实验7

实验任务4

源代码

#include <stdio.h>
#include <ctype.h>

int main(){
FILE *fp;
char ch;
int lines=0;
int chars=0;

fp=fopen("data4.txt","r");
if(fp==NULL){
    printf("文件打开失败!\n");
    return 1;
}

while((ch=fgetc(fp))!=EOF){
    if(ch=='\n'){
        lines++;
    }else if(!isspace(ch)){
        chars++;
    }
}

if(chars>0&&lines==0){
    lines=1;
}else if(ch!='\n'){
    lines++;
}

fclose(fp);

printf("data4.txt统计结果:\n");
printf("行数:\t\t%d\n",lines);
printf("字符数(不计空白符):\t%d\n",chars);

return 0;
}

运行结果

bky7.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_pass,cnt);

pass_rate=1.0*cnt/N;
printf("\n本次等级考试通过率: %.2f%%\n",pass_rate*100);

return 0;
}

void output(STU st[],int n){
int i;
printf("%-12s%-10s%-15s%-15s%-10s%-8s\n","准考证号","姓名","客观题得分","操作题得分","总分","结果");
for(i=0;i<n;i++){
    printf("%-12ld%-10s%-15.2f%-15.2f%-10.2f%-8s\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 s[],int n){
int i;
FILE *fout;
fout=fopen("list_pass.txt","w");
if(!fout){
    printf("fail to open file\n");
    return;
}
fprintf(fout,"%-12s%-10s%-15s%-15s%-10s%-8s\n","准考证号","姓名","客观题得分","操作题得分","总分","结果");
for(i=0;i<n;i++){
    fprintf(fout,"%-12ld%-10s%-15.2f%-15.2f%-10.2f%-8s\n",
            s[i].id,s[i].name,s[i].objective,s[i].subjective,s[i].sum,s[i].result);
}
fclose(fout);
}

int process(STU st[],int n,STU st_pass[]){
int i,j=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[j]=st[i];
        j++;
    }else{
        strcpy(st[i].result,"不通过");
    }
}
return j;
}

运行结果

bky7.5

bky7.5

实验任务6

源代码

#define STUDENT_NUM 80  
#define LINE_LEN 100    

int main(){
   
    char students[STUDENT_NUM][LINE_LEN];
    int flag[STUDENT_NUM]={0};
    int lucky[5];
    char filename[50];
    FILE *fp_read,*fp_write;
    int i,count=0,rand_idx;

    
    fp_read=fopen("D:\\fhe07\\Documents\\list.txt","r");
    if(fp_read==NULL){
        printf("list.txt文件打开失败!\n");
        return 1;
    }
    for(i=0;i<STUDENT_NUM&&fgets(students[i],LINE_LEN,fp_read)!=NULL;i++);
    fclose(fp_read);

    srand((unsigned int)time(NULL));

    
    while(count<5){
        rand_idx=rand()%STUDENT_NUM;
        if(flag[rand_idx]==0){
            lucky[count++]=rand_idx;
            flag[rand_idx]=1;
        }
    }

   
    printf("----------中奖名单----------\n");
    for(i=0;i<5;i++){
        printf("%s",students[lucky[i]]);
    }

    
    printf("----------保存到文件----------\n");
    printf("输入文件名:");
    scanf("%s",filename);
    fp_write=fopen(filename,"w");
    if(fp_write==NULL){
        printf("文件创建失败!\n");
        return 1;
    }
    for(i=0;i<5;i++){
        fputs(students[lucky[i]],fp_write);
    }
    fclose(fp_write);
    printf("保存成功!\n");

    return 0;
}

运行结果

bky7.6

bky7.6

posted @ 2025-12-24 20:18  fhe  阅读(6)  评论(0)    收藏  举报