实验7

实验任务4

#include<stdio.h>
#define N 1000
int main(){
    FILE *fp;
    fp=fopen("data4.txt","r");
    if(!fp){
        perror("");
        return 0;
    }
    int line=0,count=0;
    
    char ch[N];
    while(fgets(ch,N,fp)!=NULL){
        line++;
    }
    fclose(fp);
    fp=fopen("data4.txt","r");
    if(!fp){
        perror("");
        return 0;
    }
    char c;
    while((c=fgetc(fp))!=EOF){
        if(c!=' '&&c!='\n'&&c!='\t'){
            count++;    
        }
    }
    printf("行数:                  %d",line);
    printf("\n");
    printf("字符总数(不计空白符):%d",count);
    fclose(fp);
    return 0;
}

7.4

实验任务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);
    }
}
void read(STU st[],int n){
    int i;
    FILE *fin;
    fin=fopen("examinee.txt","r");
    if(!fin){
        printf("fail to open file\n");
        return;
    }
    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);
}
void write(STU st[],int n){
    int i;
    FILE *fin;
    fin=fopen("D:\\list_pass.txt","w");
    if(!fin){
        perror("");
        return;
    }    
    for(i=0;i<n;i++){
        if(strcmp(st[i].result,"通过")==0){
            fprintf(fin,"%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);
        }
    }
    fclose(fin);
}
int process(STU st[],int n,STU st_pass[]){
    int i;
    int k=0;
    for(i=0;i<n;i++){
        st[i].sum=st[i].objective+st[i].subjective;
        if(st[i].sum>=60){
            strcpy(st[i].result,"通过");
            st_pass[k++]=st[i];
        }
        else{
            strcpy(st[i].result,"不通过");    
        }
    }
    return k;
}

7.5

7.5.2

实验任务6

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 100
int main(){
    FILE *fp;
    if((fp=fopen("list.txt","r"))==NULL){
        printf("fail");
        return 1;
    }
    char s[N][N];
    int i=0,n;
    while(fgets(s[i],N,fp)!=0){
        ++i;
    }
    n=i;
    for(i=0;i<n;i++){
        fgets(s[i],N,fp);
    }
    printf("下面开始抽奖!\n");

    printf("请输入抽奖人数:");
    int num;
    scanf("%d",&num);
    if(num<0){
        return 0;
    }
    srand(time(NULL));
    int choice;
    int flag[N]={0};
    fp=fopen("d:\\20251227.txt","w");
    for(i=0;i<num;){
        choice=rand()%n;
        if(flag[choice]==1){
            continue;
        }
        flag[choice]=1;    
        i++;
        printf("%s\n",s[choice]);
        fprintf(fp,"%s\n",s[choice]);
    }                    
    fclose(fp);
    return 0;
}

7.6

 

posted @ 2025-12-27 22:25  tensiontension  阅读(0)  评论(0)    收藏  举报