代码如下
#include "stdio.h"
#define N 10 //学生人数上限
#define M 5 //课程门数上限
struct stud
{ char name[10]; //姓名
double course[M];//成绩
double aver; //平均分
}s[N];
int main()
{ int n,m,i,j;
double course[M]={0}; //用于统计每门课程的平均分
scanf("%d,%d",&n,&m); //输入学生人数与课程门数
for(i=0;i<n;i++)
{
scanf("%s",s[i].name);
请在此插入你的代码
}
printf("name ");
for(j=0;j<m;j++) //求每门课程的平均分
{ course[j]=course[j]/n;
printf("CNO:%d ",j+1);//显示栏目
}
printf("\n");
for(i=0;i<n;i++)
{ printf("%10s",s[i].name);
for(j=0;j<m;j++)
if(s[i].course[j]<course[j])
printf("%5.1f ",s[i].course[j]);
else
printf("%8c",32);
printf("\n");
}
return 0;
}
现对代码中难理解的一部分进行分析:
for(i=0;i<n;i++)//i表示的是人的个数
{
scanf("%s",s[i].name);//输出当前同学的名字
for(j=0;j<m;j++)//m是前面自己输入的有多少个科目,故循环多少次
{
scanf("%lf",&(s[i].course[j]));//输出i同学在j科目的成绩(该循环循环m次)就把每一科对应的成绩输入进去
course[j]=course[j]+s[i].course[j];
//这里course[j]原本程序初始化为0了,j为i同学对应科目,
//例如有2个同学,2个科目(n=m=2)
//i=0 输入名字 j=0 输入第一科的成绩,第一科总成绩等于0+该同学这科的成绩
//i=0 j=1 输入第二科的成绩,第二科总成绩等于0+该同学这科的成绩
//i=1 输入名字 j=0 输入第一科的成绩,第一科总成绩等于上一位同学该科成绩加上该同学这科的成绩
//i=1 j=1 输入第二科的成绩,第二科总成绩等于上一位同学该科成绩加上该同学这科的成绩
//总的来说course保存的是各科目的总分(每个同学该科的分数相加)
}
}
以上程序如果集合course[j]=course[j]/n;分析便轻松解决