C语言 统计学生成绩

要求:编写程序实现对M位学生的N门课程成绩进行统计分析
(1)统计出每个学生的总分、平均分及单科最高分;
(2)统计出每门课的平均分、最高分;
(3)统计出所有学生的最高总分与最高平均分;
(4)统计出所有学生总成绩的平均分及所有成绩的总平均分;
(5)统计出所有学生单科最高分的平均值与最大值。
急求,谢谢。。。

#include<stdio.h>
#include<stdlib.h>
struct student
{
double score[5];
}s[10];
void avg()
{
printf("\n");
double sum;
for(int i=0;i<10;i++)
{
sum=0;
printf("第%d位学生的平均分数是: ",i+1);
for(int j=0;j<5;j++)
sum+=s[i].score[j];
printf("%.2lf\n",sum/5);
}
printf("\n");
return ;
}
void tavg()
{
printf("\n");
double sum;
for(int j=0;j<5;j++)
{
sum=0;
for(int i=0;i<10;i++)
sum+=s[i].score[j];
printf("第%d门功课的平均分是: %.2lf\n",j+1,sum/10);
}
return ;
}
void maxsc()
{
printf("\n");
double max=-1;
int i,j;
for( i=0;i<10;i++)
{
for( j=0;j<5;j++)
if(max<s[i].score[j])
{
max=s[i].score[j];
}
}
printf("最高分是:%.2lf分,对应学生与功课如下:\n",max);
for(i=0;i<10;i++)
{
for(int j=0;j<5;j++)
if(max==s[i].score[j])
{
printf("第%d位学生的第%d门成绩\n",i+1,j+1);
}
}
printf("\n");
}
int main()
{
int i,j;
for(i=0;i<10;i++)
{
for(j=0;j<5;j++)
{
printf("输入第%d位学生的第%d门功课的成绩: ",i+1,j+1);
scanf("%lf",&s[i].score[j]);
printf("\n");
}
printf("\n");

}
printf("学生平均分数情况:\n");
avg(); //每个学生的平均分
printf("功课平均分数情况:\n");
tavg(); //每门功课的平均分
printf("最高分数即对应学生功课:\n");
maxsc(); //最高分对应的学生和功课
system("PAUSE");
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-01-15
自己做吧,用结构体把学号姓名成绩封装起来,然后用结构体定义指针,建立一个包含所有学生的链表,然后对链表进行操作,得到结果后用文件输出,对照书本去做吧,不难。自己做好对自己信心有很大帮助,你现在信心不足,不敢动手。要是别人帮你完成那是害你。谭浩强的书上这些都有,努力吧!
第2个回答  2019-09-27
//按你要求来的
不过只输入了3组数,你可以自己改
#include
#include
#define
max
100
typedef
struct
{
char
name[max];//
姓名
int
num;//学号
int
eng;//英语成绩
int
pro;//程序设计成绩
int
maths;//数学成绩
}student;
void
input(student
s[],int
n)//输入以及求总分
{
int
sum=0;
for(int
i=0;i<n;i++)
{
printf("输入第%d个学生的姓名:\n",i+1);gets(s[i].name);
printf("输入第%d个学生的学号:\n",i+1);scanf("%d",&s[i].num);
printf("输入第%d个学生的英语成绩:\n",i+1);scanf("%d",&s[i].eng);
printf("输入第%d个学生的程序设计成绩:\n",i+1);scanf("%d",&s[i].pro);
printf("输入第%d个学生的数学成绩:\n",i+1);scanf("%d",&s[i].maths);
sum=s[i].eng+s[i].pro+s[i].maths;
printf("总分为:%d\n",sum);
fflush(stdin);
}
}
void
sumscore(student
s[],int
n)//单科成绩总和
{
int
sum_eng=0,sum_pro=0,sum_maths=0;
for(int
i=0;i<n;i++)
{
sum_eng+=s[i].eng;
sum_pro+=s[i].pro;
sum_maths+=s[i].maths;
}
printf("英语总成绩为:%d\n",sum_eng);
printf("程序设计总成绩为:%d\n",sum_pro);
printf("数学总成绩为:%d\n",sum_maths);
}
void
searchst(student
s[],int
n)//查找学生
{
char
e[max];int
number;
printf("输入要查询的姓名:\n");gets(e);
printf("输入要查询的学号:\n");scanf("%d",&number);
for(int
i=0;i<n;i++)
if(!strcmp(s[i].name,e)&&number==s[i].num)
{
printf("英语成绩:%d\n程序设计成绩:%d\n数学成绩:%d\n",s[i].eng,s[i].pro,s[i].maths);
printf("总成绩为:%d\n",s[i].eng+s[i].pro+s[i].maths);
return;
}
printf("查无此人!");
}
void
main()
{
student
s[3];int
n=3;//这里只用了3个测试,30个太夸张了,可以改成30组数....
input(s,n);
printf("\n");
sumscore(s,n);
printf("\n");
searchst(s,n);
printf("\n");
}
相似回答