题目:假设一个班有n(n<=50)个学生,每人考m(m<=5)门课,求每个学生的平均成绩和每门课的平均成绩,并输出各科成绩均大于等于平均成绩的学生数量。
input:输入数据有多个测试实例,每个测试实例的第一行包括两个整数n和m,分别表示学生数和课程数。然后是n行数据,每行包括m个整数(即:考试分数)。
output:对于每个测试实例,输出3行数据,第一行包含n个数据,表示n个学生的平均成绩,结果保留两位小数;第二行包含m个数据,表示m门课的平均成绩,结果保留两位小数;第三行是一个整数,表示该班级中各科成绩均大于等于平均成绩的学生数量。
每个测试实例后面跟一个空行。
#include<stdio.h>
#include <math.h>
int main()
{
int subject,student,i,j;
while(scanf("%d %d",&student,&subject)!=EOF)/*输入学科数目和学生数目*/
{ int shuzu[student][subject];
/*建立一个二维数组,每行代表学生,每列代表各个学科*/
double avg_student[student],avg_subject[subject];
/*建立一个存储平均数的数列,之后打印各个数列就行(这里要用double,用float会错)*/
int good_student=0,count=0;/*记录成绩都大于平均数的学生(暂时都称为好学生)*/
double sum_student=0,sum_subject=0;/*这里也是要double*/
for(i=0;i<student;i++)
{
for(j=0;j<subject;j++)
{
scanf("%d",&shuzu[i][j]);/*输入成绩*/
sum_student+=shuzu[i][j];/*计算每个学生的成绩和*/
}
avg_student[i]=sum_student/subject;/*将平均值给平均数组*/
sum_student=0;/*算出平均数后记得清零*/
if(i==student-1){printf("%.2f",avg_student[i]);}
else{printf("%.2f ",avg_student[i]);}
/*这是控制输出的格式,按照题目中默认要求,最后一个输出不能出现空格,不然会报错*/
}printf("\n");
for(i=0;i<subject;i++)
{
for(j=0;j<student;j++)
{
sum_subject+=shuzu[j][i];
}
avg_subject[i]=sum_subject/student;
sum_subject=0;if(i==subject-1){printf("%.2f",avg_subject[i]);}
else{printf("%.2f ",avg_subject[i]);}
}printf("\n");/*同上操作算出每个学科的平均分*/
for(i=0;i<student;i++)
{
for(j=0;j<subject;j++)
{
if(shuzu[i][j]<avg_subject[j]){count++;}
}
if(count==0){good_student++;}
count=0;
}
//拿一个学生(相同的i)的成绩与各个平均分比较,如果小了说明不合格,计算就加一,当计数为0
//说明合格,好学生就能加一。
printf("%d\n",good_student);
good_student=0;/*好学生要清零,清零不注意第一次能对,连续几次可能就出问题*/
printf("\n");
}
return 0;
}