#include<stdio.h>
struct student //结构体 定义
{
int num;//学号
char name[20];//姓名
int score;//分数
}stu[100];
int main()
{
float sum_grade = 0,sum=0;//所有人成绩之和
int i , num, grade, max = 0, above = 0, below = 0,equal = 0;
char name[10];//姓名
int a = 0,//90~100人数
b = 0,// 80~89人数
c = 0,// 70~79人数
d = 0,//60~69人数
e = 0;// 0~59人数
FILE *fp,*fq;
fp=fopen("E:\\1111\\stuin.dat","r");// 使用指针打开文件 stuin.txt
fq=fopen("E:\\1111\\stuout.txt","w");// 使用指针打开文件 stuout.txt
for(i=0;i<100;i++)
{
fscanf(fp,"%d%s%d",&stu[i].num,&stu[i].name,&stu[i].score);
switch(stu[i].score/10)//统计不同分数的人数 ,观察那人分数的十位部分
{
case 6: ++d;break;//60~69
case 7: ++c;break;// 70~79
case 8: ++b;break;// 80~89
case 9: ++a;break;//90~100
case 10: ++a;break;//90~100
default: ++e;break;// 0~59 其它皆为不及格
}
sum=sum+stu[i].score;
}
sum_grade =sum/100;//平均成绩
for(i = 0;i <100;i++)
{
if(stu[i].score > sum_grade)
++above;
else if(stu[i].score < sum_grade)
++below;
else
++equal;
if(stu[i].score > max)//顺便查找最大成绩者
max = stu[i].score;
}
printf("最高成绩者:\n");
for(i = 0;i <100;i++)//找最大成绩者
{
{ if(stu[i].score == max)
{ printf("%d %s %d\n",stu[i].num,stu[i].name,stu[i].score);
fprintf(fq,"考得最好的学生是:%d %s %d;\n",stu[i].num,stu[i].name,stu[i].score);}}
}
printf("\n");
printf("平均分为:%f\n",sum_grade);
printf("过平均分人数:%d\n",above);
printf("未过平均分人数:%d\n",below);
printf("等于平均分人数:%d\n",equal);
printf("优秀:%d,%3.1f%%\n",a,(float)a/(float)100 * 100);
printf("良好:%d,%3.1f%%\n",b,(float)b/(float)100 * 100);
printf("中等:%d,%3.1f%%\n",c,(float)c/(float)100 * 100);
printf("及格:%d,%3.1f%%\n",d,(float)d/(float)100 * 100);
printf("不及格:%d,%3.1f%%\n",e,(float)e/(float)100 * 100);
fprintf(fq,"平均分为:%f;\n过平均分的人数:%d;\n等于平均分的人数:%d;\n未过平均分的人数%d个;\n优秀:%d,%f%%;\n良好:%d,%f%%;\n中等:%d,%f%%;\n及格:%d,%f%%;\n不及格:%d,%f%%;\n",sum_grade,above,below,equal,a,(float)a/(float)100 * 100,b,(float)b/(float)100 * 100,c,(float)c/(float)100 * 100,d,(float)d/(float)100 * 100,e,(float)e/(float)100 * 100);
fclose(fp);//关闭文件
fclose(fq);
}
温馨提示:答案为网友推荐,仅供参考