Description
假设一个班有n(n<=50)个学生,每人考m(m<=5)门课,求每个学生的平均成绩和每门课的平均成绩,并输出各科成绩均大于等于平均成绩的学生数量。
Input
输入数据有多个测试实例,每个测试实例的第一行包括两个整数n和m,分别表示学生数和课程数。然后是n行数据,每行包括m个整数(即:考试分数)。
Output
对于每个测试实例,输出3行数据,第一行包含n个数据,表示n个学生的平均成绩,结果保留两位小数;第二行包含m个数据,表示m门课的平均成绩,结果保留两位小数;第三行是一个整数,表示该班级中各科成绩均大于等于平均成绩的学生数量。 每个测试实例后面跟一个空行。
我的程序只要学生人数大于8 程序就运行不了 小于8就没事;;;;;;;
#include
#define H 50
#define L 5
void shuru(int s[][L], int x, int y); 输入学生成绩
void xuesheng(int s[][L], float ah[], int x, int y); 计算每个学生的平均值
void kecheng(int s[][L], float al[], int x, int y); 计算没门科目的平均值
void bijiao(float ah[], int s[][L], int x, int y); 输出学生科目的平均值
void print(float al[], float ah[], int x, int y); 比较成绩 然后输出人数
int main()
{
int s[H][L], x, y; 学生成绩,人数,科目
float ah[L], al[H]; 学生平均成绩,科目平均成绩
while (scanf("%d%d", &x, &y) != EOF)
{
shuru(s, x, y); 输入学生成绩
xuesheng(s, ah, x, y); 计算每个学生的平均值
kecheng(s, al, x, y); 计算没门科目的平均值
print(al, ah, x, y); 输出学生科目的平均值
bijiao(al, s, x, y); 比较成绩 然后输出人数
}
return 0;
}
void shuru(int s[][L], int x, int y) 输入学生成绩
{
int i, j;
for (i = 0; i < x; i++)
{
for (j = 0; j < y; j++)
{
scanf("%d", &s[i][j]);
}
}
}
void xuesheng(int s[][L], float ah[], int x, int y) 计算每个学生的平均值
{
int i, j, sum;
for (i = 0; i < x; i++)
{
sum = 0;
for (j = 0; j < y; j++)
{
sum = sum + s[i][j];
}
ah[i] = (float)sum / y;
}
}
void kecheng(int s[][L], float al[], int x, int y) 计算没门科目的平均值
{
int i, j, sum;
for (j = 0; j < y; j++)
{
sum = 0;
for (i = 0; i < x; i++)
{
sum = sum + s[i][j];
}
al[j] = (float)sum / x;
}
}
void print(float al[], float ah[], int x, int y) 输出学生科目的平均值
{
int i, j;
for (j = 0; j < x; j++)
{
printf("%.2f ", ah[j]);
}
printf("\n");
for (i = 0; i < y; i++)
{
printf("%.2f ", al[i]);
}
printf("\n");
}
void bijiao(float ah[], int s[][L], int x, int y) 比较成绩 然后输出人数
{
int i, j, k,t=0;
for (i = 0; i < x; i++)
{
k = 0;
for (j = 0; j < y; j++)
{
if (s[i][j] >= ah[j]) k = k + 1;
}
if (k == y) t = t + 1;
}
printf("%d\n", t);
}