C语言程序设计 从文件中读取学生成绩按要求处理后按文件输出

图一是要求图二是哪个成绩单要输出成txt求大佬写一下程序 急用重赏
优良中差的分段是90-100 80-89 70-79 0-69

#include "stdio.h"
#include <stdlib.h>
struct stu{//定义一个个人信息结构体
char stuid[13],name[20],g[3];//ID号、姓名、性别
int score;//成绩
};
int main(int argc,char *argv[]){
FILE *fp,*fq;//读文件指针fp和创建文件指针fq
struct stu *p,t;//结构体指针p和变量t
int i,j,k,n,a,b,c,d;//abcd为四级变量
fq=fopen("stu2.txt","w");//创建一个写文件stu2.txt
//打开读文件stu1.txt并判断读写文件是否打开成功
if(!fq || (fp=fopen("stu1.txt","r"))==NULL){
printf("Open the file failure, exit...\n");//不成功则提示并退出
return 0;
}
//检测一下文件中存储了多少个学生的信息并记入变量n
for(n=0;fscanf(fp,"%s%s%s%d",t.stuid,t.name,t.g,&t.score),!feof(fp);n++);
if((p=(struct stu *)malloc(sizeof(t)*n))==NULL){//按n大小动态申请内存空间
printf("Application memory failure, exit...\n");//申请失败则提示退出
return 0;
}
rewind(fp);//读文件指针恢复到文件开头
for(a=b=c=d=i=0;i<n;i++){//读取n个学生信息并依次存入动态数组中
fscanf(fp,"%s%s%s%d",p[i].stuid,p[i].name,p[i].g,&p[i].score);
if(p[i].score>=90 && p[i].score<=100)//同时按成绩级别分别统计人数
a++;
else if(p[i].score>=80 && p[i].score<=89)
b++;
else if(p[i].score>=70 && p[i].score<=79)
c++;
else
d++;
}
fclose(fp);//读取完毕关闭文件
//向文件输出级别结果
fprintf(fq,"优: %g  良: %g  中: %g  差: %g\n",a/(n+0.0),b/(n+0.0),c/(n+0.0),d/(n+0.0));
//同时输出到屏幕以便检查
printf("优: %g  良: %g  中: %g  差: %g\n",a/(n+0.0),b/(n+0.0),c/(n+0.0),d/(n+0.0));//不想屏显则删除此行
for(i=0;i<n;i++){//对n个学生按成绩降序排序并输出到文件及屏幕
for(k=i,j=k+1;j<n;j++)
if(p[k].score<p[j].score)
k=j;
if(i!=k)
t=p[k],p[k]=p[i],p[i]=t;
        //输出到文件
fprintf(fq,"%s %s %s %d\n",p[i].stuid,p[i].name,p[i].g,p[i].score);
//输出么屏幕
printf("%s\t%s\t%s\t%d\n",p[i].stuid,p[i].name,p[i].g,p[i].score);//不想屏显则删除此行
}
free(p);//释放所申请的内在空间
fclose(fq);//关闭写文件
return 0;
}

运行结果:

注:文件都在当前目录下

追问

小师傅有QQ嘛 还要和导师讲每行代码的意思QAQ
教教我ouo

温馨提示:答案为网友推荐,仅供参考