实验7

任务4

#include <stdio.h>
#include <string.h>
#define N  1000 
void read(char x[N]) {
    
    int i=0,n;
    int number;
    FILE *fp;
    
    
    fp=fopen("D:\data4.txt","r");
    
    if(fp==NULL){
        printf("fail to opren to read\n");
        return ;
    } 
    while (!feof(fp)) {
        x[i]=fgetc(fp);
        if(x[i]==EOF)
        break;
        i++;
    }
    
    fclose(fp);
    
}
int calculateh(char x[N],int h){
    int k,i;
    k=strlen(x);
    printf("%d",k);
    for(i=0;i<k;i++){
    
        
        if(x[i]=='\n'){
            h++;
        }
        
    }
    return h;
}
int calculatem(char x[N],int m){
    int k,i;
    k=strlen(x);
    printf("%d",k);
    for(i=0;i<k-1;i++){
    
        if(x[i]!=' '&&x[i]!='\n'&&x[i]!='\t'){
            m++;
        }
        
        
    }
    return m;
}
    
int main() {
    int h=1,m=0;
    char x[N];
     read(x);
     
     h=calculateh(x,h);
     m=calculatem(x,m);
     
    printf("data4.txt统计结果:\n");
    printf("行数:                    %d\n",h);    
    printf("字符数(不计空白符):    %d\n",m);

    return 0;
}

任务5

#include <stdio.h>
#include <string.h>
#define N 10
typedef struct {
     long id;             // 准考证号
    char name[20];     // 姓名
    float objective;     // 客观题得分
     float subjective;      // 操作题得分
    float sum;     // 总分
    char result[10];     // 考试结果
} STU;
// 函数声明
void read(STU st[], int n);
void write(STU st[], int n);
void output(STU st[], int n);
int process(STU st[], int n, STU st_pass[]);
int main() {
    STU stu[N], stu_pass[N];
    int cnt;
    double pass_rate;
    printf("从文件读入%d个考生信息...\n", N);
    read(stu, N);
printf("\n对考生成绩进行统计...\n");
    cnt = process(stu, N, stu_pass);
    
    printf("\n通过考试的名单:\n");
    output(stu, N); // 输出所有考生完整信息到屏幕
     write(stu, N); // 输出考试通过的考生信息到文件
     pass_rate = 1.0 * cnt / N;
     printf("\n本次等级考试通过率: %.2f%%\n", pass_rate*100);
     return 0;
}
// 把所有考生完整信息输出到屏幕上
// 准考证号,姓名,客观题得分,操作题得分,总分,结果
void output(STU st[], int n) {
     int i;
     
     printf("准考证号\t姓名\t客观题得分\t操作题得分\t总分\t\t结果\n");
     for (i = 0; i < n; i++)
      printf("%ld\t\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%s\n", st[i].id, 
st[i].name, st[i].objective, st[i].subjective, st[i].sum, st[i].result);
}
// 从文本文件examinee.txt读入考生信息:准考证号,姓名,客观题得分,操作题得分
void read(STU st[], int n) {
     int i;
     FILE *fin;
     fin = fopen("D:\\examinee.txt", "r");
     if (!fin) {
     printf("fail to open file\n");
     return;
      }
     while (!feof(fin)) {
    for (i = 0; i < n; i++)
    fscanf(fin, "%ld %s %f %f", &st[i].id, st[i].name, 
&st[i].objective, &st[i].subjective);
    }
    fclose(fin);
}
// 把通过考试的考生完整信息写入文件list_pass.txt
// 准考证号,姓名,客观题得分,操作题得分,总分,结果
void write(STU s[], int n) {
    
    FILE *fp;
    fp=fopen("list_pass.txt","wb");
    if(fp==NULL){
        printf("fail to open file to write\n");
        return;
    }
    fwrite(s,sizeof(STU),n,fp);
    
    fclose(fp);
}
// 对考生信息进行处理:计算每位考生考试总分、结果;统计考试通过的人数
int process(STU st[], int n, STU st_pass[]) {
    int i,cnt=0;
    for(i=0;i<N;i++){
    st[i].sum=st[i].subjective+st[i].objective;
    if(st[i].sum>=60){
        strcpy(st[i].result,"通过");
    cnt++;
    }
    else{
        strcpy(st[i].result,"不通过");
    }
    }
    return cnt;
    }

任务6

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define N 10
typedef struct {
    long id;
    char name[20];
    char clas[20];
} stu;

//函数声明

void output(stu s[]);  //显示
 
int main() {
    stu x[80],s[80];
    FILE *fp;
     char *name[100];
    int i;
    FILE *fin;
    
    
    fin=fopen("D:\\list.txt","r");  //从文件读取 
    if(!fin) {
        printf("fail to open file\n");
        return 0;
    }
    
    while(!feof(fin)){
        for(i=0;i<80;i++)
        fscanf(fin,"%ld %s %s",&x[i].id,&x[i].name,&x[i].clas);
    }
    
    fclose(fin);
    
    srand(time(NULL));  //随机抽取 
    int opp[80]={0};
    int z[5];
    int cnt=0,num;
    while(cnt<5){
        num=rand()%80;
        if(opp[num]==0){
            opp[num]=1;
            z[cnt]=num;
            cnt++;
        }
    }
    for(i=0;i<5;i++){
        cnt=z[i];
        s[i]=x[cnt]; 
    } 
    
    
    output(s);
    
    printf("\n------------保存到文件------------\n"); 
    printf("输入文件名: ");
    scanf("%s",name);
    
    
    fp=fopen(name,"w");
    if(fp==NULL){
        printf("fail to open file to write\n");
        return 0;
    }
    fwrite(s,sizeof(stu),5,fp);
    
    fclose(fp);
printf("保存成功!");     
}

                
void output(stu s[])   { //显示
int i;

printf("------------随机抽点名单-------------\n");
for(i=0;i<5;i++){
    printf("%-20ld%s\t%s\n",s[i].id,s[i].name,s[i].clas);
} 


}

 

posted @ 2024-12-30 00:30  陈熠萱  阅读(11)  评论(0)    收藏  举报