有无人教教我,不会debug了,麻烦了
要求是:
现有6个学生5门课的成绩,分别用函数实现下列功能:
(1)计算每个学生的平均分;
(2)计算每门课的平均分;
(3)找出所有30个分数中最高分数所对应的学生和课程。
提示:(1)6个学生5门课(分别为语文、数学、英语、物理、化学)的成绩在主函数里初始化为
float score[6][5] = {{78,83,90,72,88}, {70,65,90,67,71}, {87,96,94,92,90}, {64,75,68,71,66}, {81,43,69,67,90},{75,86,84,90,73}};
(2) 各函数的参数和返回值请自行设计, 请不要在子函数中用printf语句输出成绩,而是要通过返回值,在主函数中打印输出。
下面是程序:
#include
int ave1[6], ave2[5];
int score[6][5] = { {78,83,90,72,88}, {70,65,90,67,71}, {87,96,94,92,90}, {64,75,68,71,66}, {81,43,69,67,90},{75,86,84,90,73} };
int average1(int score[6][5])
{
int i, x;
int sum1 = 0;
for (i = 0; i < 6; i++)
{
for (x = 0; x < 5; x++)
{
sum1 += score[i][x];
}
ave1[i] = sum1 / 5;
sum1 = 0;
}
return (ave1);
}
void average2(int score[6][5])
{
int i, x, sum2 = 0;
int ave2[6];
for (x = 0; x < 5; x++)
{
for (i = 0; i < 6; i++)
{
sum2 = score[i][x];
}
ave2[x] = sum2 / 6;
sum2 = 0;
}
return (ave2);
}
int max(int score[6][5])
{
int i, x, max = 0, maxobj, maxstu;
for (i = 0; i < 6; i++)
{
for (x = 0; x < 5; x++)
{
if (max < score[i][x])
{
max = score[i][x];
maxstu = i;
maxobj = x;
}
}
}
return(maxstu * 100 + maxobj);
}
int main()
{
int subject[20] = { '语文','数学' ,'英语','物理','化学'};
int i, x, maxstu, maxobj;
int number;
average1(score[6][5]);
for (i = 0; i < 6; i++)
{
x = i + 1;
printf("第%d个学生的平均分为%g\n", x, ave1[i]);
}
average2(score[6][5]);
for (i = 0; i < 5; i++)
{
printf("%s的平均分为%f", subject[i], ave2[i]);
}
number = max(score[6][5]);
maxstu = number / 100 + 1;
maxobj = number % 10;
printf("第%d个学生的%s有最高分%g", maxstu, subject[maxobj], score[maxstu - 1][maxobj]);
return 0;
}
题主修改如下,供参考:
#include<stdio.h>
#define N 6
#define M 5
int ave1[N], ave2[M];
int score[N][M] = { {78,83,90,72,88}, {70,65,90,67,71},
{87,96,94,92,90}, {64,75,68,71,66},
{81,43,69,67,90}, {75,86,84,90,73} };
void average1(int score[][M]) //int average1(int score[][M]) 修改
{
int i, x;
int sum1 = 0;
for (i = 0; i < N; i++) //修改
{
for (x = 0; x < M; x++) //修改
{
sum1 += score[i][x];
}
ave1[i] = sum1 / M;
sum1 = 0;
}
//return (ave1); 修改
}
void average2(int score[][M]) //void average2(int score[6][5]) 修改
{
int i, x, sum2 = 0;
//int ave2[6];
for (x = 0; x < M; x++) //修改
{
for (i = 0; i < N; i++) //修改
{
sum2 += score[i][x]; //sum2 = score[i][x]; 修改
}
ave2[x] = sum2 / N;
sum2 = 0;
}
//return (ave2); 修改
}
int max(int score[][M], int x)
{
int i, max = 0, maxobj, maxstu;
for (i = 0, max = score[i][x], maxstu = 0; i < N; i++) //修改
{
//for (x = 0; x < 5; x++) //修改
//{
if (max < score[i][x])
{
max = score[i][x];
maxstu = i;
//maxobj = x; //修改
}
//}
}
return maxstu;
//return(maxstu * 100 + maxobj);
}
int main()
{
char subject[M][8] = { "语文","数学" ,"英语","物理","化学" }; //修改
// int subject[20] = { '语文','数学' ,'英语','物理','化学'};
int i, x, maxstu, maxobj;
int number;
average1(score); //average1(score[6][5]); //修改
for (i = 0; i < N; i++)
{
x = i + 1;
printf("第%d个学生的平均分为%d\n", x, ave1[i]); //修改
//printf("第%d个学生的平均分为%g\n", x, ave1[i]);
}
average2(score); //average2(score[6][5]); //修改
for (i = 0; i < M; i++)
{
printf("%s的平均分为%d\n", subject[i], ave2[i]); //修改
//printf("%s的平均分为%f", subject[i], ave2[i]);
}
//number = max(score[6][5]); //修改
//maxstu = number / 100 + 1; //修改
//maxobj = number % 10; //修改
for (i = 0; i < M; i++)
{
number = max(score, i);
printf("第%d个学生的%s有最高分%d\n", number+1, subject[i], score[number][i]); //修改
//printf("第%d个学生的%s有最高分%g", maxstu, subject[maxobj], score[maxstu - 1][maxobj]);
}
return 0;
}