题为c程序设计(第五版)谭浩强 课后习题第7章第14题
一、题目复现
二、实现步骤
1.思路分析
1.定义求学生平均分的函数(即将每一行的各元素相加作为一个学生的成绩)。
2.定义求每门课平均分的函数(即将每一列的元素各自相加作为一门课的成绩)。
3.定义寻找最高分的函数(即找到最高分所对应的行号和列号)。
4.输入10个学生5门课的成绩(使用二维数组)。
5.调用函数求每个学生的平均分。
6.调用函数求每门课的平均分。
7.调用函数求最高的分数所对应的学生和课程
2.实现过程
代码如下(示例):
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
void aver_stu(int t[][5]); //之所以形参不指定行数,是为了更灵活的处理任意行数的二维数组,而不需要修改形参。
void aver_course(int t[][5]);
void high(int t[][5]);
int main()
{
int stu[10][5];
int i, j;
for (i = 0; i <= 9; i++)
for (j = 0; j < 5; j++)
scanf("%d", &stu[i][j]); //输入10个学生各5门课的成绩
aver_stu(stu); //调用函数求每个学生的平均分
aver_course(stu); //调用函数求每门课的平均分
high(stu); //调用函数求最高的分数所对应的学生和课程
return 0;
}
//求学生平均分函数
void aver_stu(int t[][5])
{
int i, j;
float k=0.0, ave;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 5; j++)
k += t[i][j];
ave = k / 5;
printf("No.%d student average is %f\n", i + 1, ave);
k = 0;
}
}
void aver_course(int t[][5])
{
int i, j;
float k=0.0, ave;
for (j = 0; j < 5; j++)
{
for (i = 0; i < 10; i++)
k += t[i][j];
ave = k / 10;
printf("No.%d course average is %f\n", j + 1, ave);
k = 0;
}
}
void high(int t[][5])
{
int i, j, h,stu, cour;
for (i = 0, j = 0,h=0, stu = 0, cour = 0; i < 10; i++)
{
for (j = 0; j < 5; j++)
{
if (t[i][j] > h)
{
h = t[i][j];
stu = i + 1;
cour = j + 1;
}
}
}
printf("The highest score is %d,from No.%d student & No.%d course",h,stu,cour);
}
总结
通过本例,希望各位可以合理的使用函数去增强程序的模块化水平。