求帮忙解决一道C语言程序设计的题,用大一的知识点。
发布网友
发布时间:2022-04-28 14:09
我来回答
共1个回答
热心网友
时间:2022-06-18 23:53
#include<stdio.h>
#include<string.h>
struct student
{
char num[8];
char name[10];
int cgrade;
int mgarde;
int physics;
float ave;
};
int cmp(const void *a,const void *b)
{
struct student c=*(struct student*)a;
struct student d=*(struct student*)b;
return (d.cgrade+d.mgarde+d.physics)-(c.cgrade+c.mgarde+c.physics);
}
int main()
{
struct student stu[100];
int i,k,max[3],min[3],sum[3],num[9]={0};
for(i=0;i<3;i++)
{
max[i]=0;
min[i]=200;
sum[i]=0;
}
FILE *fp;
fp=fopen("文件路径,\用\\代替","r"); //这里填你的txt路径
printf(" 学号 姓名 平均分\n");
for(i=0;!feof(fp);i++)
{
fscanf(fp,"%s%s%d%d%d%f",&stu[i].num,&stu[i].name,&stu[i].cgrade,&stu[i].mgarde,&stu[i].physics,&stu[i].ave);
printf("%7s %10s %10.1f\n",stu[i].num,stu[i].name,stu[i].ave);
}
for(k=0;k<i;k++)
{
sum[0]+=stu[k].cgrade;
sum[1]+=stu[k].mgarde;
sum[2]+=stu[k].physics;
if(max[0]<stu[k].cgrade) max[0]=stu[k].cgrade;
if(max[1]<stu[k].mgarde) max[1]=stu[k].mgarde;
if(max[2]<stu[k].physics) max[2]=stu[k].physics;
if(min[0]>stu[k].cgrade) min[0]=stu[k].cgrade;
if(min[1]>stu[k].mgarde) min[1]=stu[k].mgarde;
if(min[2]>stu[k].physics) min[2]=stu[k].physics;
if(stu[k].cgrade>=90) num[0]++;
if(stu[k].cgrade>=60) num[1]++;
if(stu[k].cgrade<60) num[2]++;
if(stu[k].mgarde>=90) num[3]++;
if(stu[k].mgarde>=60) num[4]++;
if(stu[k].mgarde<60) num[5]++;
if(stu[k].physics>=90) num[6]++;
if(stu[k].physics>=60) num[7]++;
if(stu[k].physics<60) num[8]++;
}
printf("\nC语言最高分:%d 最低分:%d\n高数最高分:%d 最低分:%d\n物理最高分:%d 最低分:%d\n",max[0],min[0],max[1],min[1],max[2],min[2]);
printf("\nC语言平均分:%.1f\n高数平均分:%.1f\n物理平均分:%.1f",(float)sum[0]/i,(float)sum[1]/i,(float)sum[2]/i);
printf("\nC语言优秀人数:%d 及格人数:%d 不及格人数:%d\n高数优秀人数:%d 及格人数:%d 不及格人数:%d\n物理优秀人数:%d 及格人数:%d 不及格人数:%d\n",num[0],num[1],num[2],num[3],num[4],num[5],num[6],num[7],num[8]);
qsort(stu,i,sizeof(stu[0]),cmp);
printf("\n排序后\n\n 学号 姓名 总分\n");
for(k=0;k<i;k++)
printf("%7s %10s %10d\n",stu[k].num,stu[k].name,stu[k].cgrade+stu[k].mgarde+stu[k].physics);
return 0;
}