#include<stdio.h>
#define num_sub 3
#define num_stu 5
int main()
{
int i=0,j = 0;
double grade[num_stu][num_sub] = { 0 };
double Ave_student(double a[num_stu][num_sub], int count1);
double Ave_subject(double a[num_stu][num_sub], int count2);
void max(double a[num_stu][num_sub]);//声明函数
for (i = 0; i < num_stu; i++)
{
printf("请输入第%d个学生语数外成绩\n", i + 1);
for (j = 0; j < num_sub; j++)
scanf("%lf", &grade[i][j]);
}//输入
for (i = 0; i < num_stu; i++)
{
printf("%d号学生的平均成绩为%.2lf\n", i + 1, Ave_student(grade , i));
}
for ( i = 0; i < num_sub; i++)
{
switch (i)
{
case(0):printf("语文的平均成绩为%.2lf\n", Ave_subject(grade , i)); break;
case(1):printf("数学的平均成绩为%.2lf\n", Ave_subject(grade , i)); break;
case(2):printf("英语的平均成绩为%.2lf\n", Ave_subject(grade , i)); break;
default:
break;
}
}
max(grade);
return 0;
}
double Ave_student(double a[num_stu][num_sub],int count1)//max(int x,int y)
{
int i = 0;
double n = 0, x = 0;
for (i = 0; i < num_sub; i++)
{
n += a[count1][i];
}
x = n / num_sub;
return x;
}
double Ave_subject(double a[num_stu][num_sub], int count2)
{
int i = 0;
double n = 0;
for (i = 0; i < num_stu; i++)
{
n += a[i][count2];
}
return(n / num_stu);
}
void max(double a[num_stu][num_sub])
{
int i = 0, j = 0, x = 0, y = 0;
double n = 0;
for (i = 0; i < num_stu; i++)
{
for (j = 0; j < num_sub; j++)
{
if (n < a[i][j])
{
n = a[i][j];
x = i;
y = j;
}
}
}
printf("15个成绩中最高的分数为%.2lf,是", n);
switch (x)
{
case(0):printf("一号同学的"); break;
case(1):printf("二号同学的"); break;
case(2):printf("三号同学的"); break;
case(3):printf("四号同学的"); break;
case(4):printf("五号同学的"); break;
default:
break;
}
switch (y)
{
case(0):printf("语文\n");
case(1):printf("数学\n");
case(2):printf("英语\n");
default:
break;
}
}
思路解析:通过3*5二维数组grade存储五位学生的三门科目成绩,在定义三个函数Ave_student、Ave_subject、max来计算学生以及科目的平均值,其中max中需要返回的参数过多,有最高的成绩以及所对应的学生和科目,但只用使用max一次,故把max定义为void。为提高程序的复用性,把学生以及科目的数量用#define进行宏定义