C语言文件操作练习

    科技2022-07-10  118

    C语言文件操作练习

    fscanf和fprintf

    fscanf和fprintf

    老师要统计所有同学的c语言成绩总分和排名,但是他又懒得算,就让你写个程序来帮他算。他将同学们的成绩存入了文件score.txt中,下面是score.txt的样例。 Ultraman 113 10 10 70 Zhanghua 15 5 15 90 Tom 40 10 15 70 Pikachu 99 0 0 80 Doraemon 10 15 15 80 每行分别表示每名同学的姓名、杭电ACM刷题数,课题表现分,实验分和笔试成绩。总成绩按照下面的方式进行计算: 1.总成绩满分100。 2.笔试成绩×70%后再加到总分上。 3.实验分和课堂分合计30分。若杭电刷题超过30,则每刷10道,可再实验分和课堂分中加1分(但不可超过30分上限),若杭电刷题超过80,则实验分和课堂分得满分。 使用以上方式计算每名同学的总分,并按总分从大到小的顺序,将每名同学的姓名与成绩存入rank.txt文件中。若总分相同,则姓名从首位开始ASCII码小的同学排在前面。 结果如下: Doraemon 86 Pikachu 86 Zhanghua 83 Ultraman 79 Tom 78 结果输出到rank.txt中。

    代码

    #include<iostream> #include<stdio.h> #include<algorithm> using namespace std; struct student{ char name[30]; int problem_num; int class_score; int experiment_score; int exam_score; double sum=0; }stu[100]; bool cmp(student a,student b) { if(a.sum!=b.sum) return a.sum>b.sum; else return a.name[0]<b.name[0]; } int main() { FILE *fp=fopen("C:/Users/think/Desktop/score.txt","r"); int i=0; //读取文件 while(fscanf(fp,"%s",stu[i].name)!=EOF) { fscanf(fp,"%d",&stu[i].problem_num); fscanf(fp,"%d",&stu[i].class_score); fscanf(fp,"%d",&stu[i].experiment_score); fscanf(fp,"%d",&stu[i].exam_score); i++; } /*for(int j=0;j<5;j++) { cout<<stu[j].name<<endl; cout<<stu[j].problem_num<<endl; cout<<stu[j].class_score<<endl; cout<<stu[j].experiment_score<<endl; cout<<stu[j].exam_score<<endl; }*/ //计算总分 for(int j=0;j<i;j++) { double cla_epr=stu[j].class_score+stu[j].experiment_score; stu[j].sum+=stu[j].exam_score*0.7; if(stu[j].problem_num>=80) { cla_epr=30; } else { while((stu[j].problem_num-=10)>0?true:false) { cla_epr++; } if(cla_epr>30) cla_epr=30; } stu[j].sum+=cla_epr; } //排名 sort(stu,stu+i,cmp); //写入rank.txt FILE *fpWrite=fopen("C:/Users/think/Desktop/rank.txt","w"); //fprintf(fpWrite,"%s",stu[0].name); for(int j=0;j<i;j++) { fprintf(fpWrite,"%s ",stu[j].name); fprintf(fpWrite,"%2.f\n",stu[j].sum); } return 0; }

    结果

    Processed: 0.014, SQL: 8