题目来源:大工慕课 链接
作者:Caleb Sung
题目要求
输入4名学生3门课程的成绩,并分别用函数求出:
- 每门课程的平均分数
- 所有成绩中最高的分数所对应的学生与课程
参考代码
这个程序手输成绩数据一定很蛋疼,本着能懒就懒的原则,这里的成绩是由程序自动生成的,大家也可以自行修改。
头文件
用到了标准I/O,另外需要生成随机数,故:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
randScore()
这个函数用于随机生成成绩,我默认所有成绩都是及格的(希望大家也能门门过关哈hhh):
int randScore(int score[4][3]){
int i, j;
srand(time(NULL));
for(j=0; j<3; j++)
for(i=0; i<4; i++)
score[i][j] = rand()%40+60;
return score[4][3];
}
printScore()
这个函数用于规规矩矩地打印成绩,最后的printf("\n")
完全是为了打印出的文本比较美观,之后的函数均同理:
void printScore(int score[4][3]){
int i, j;
for(i=0; i<4; i++){
printf("学生%d的三门成绩分别为:\t", i+1);
for(j=0; j<3; j++){
printf("%d\t", score[i][j]);
if(j==2)
printf("\n");
}
}
printf("\n");
}
aver()
这个函数用于解决第一问,即计算每个科目的平均成绩并打印出来:
void aver(int score[4][3]){
int i, j, aver[3] = {0};
for(j=0; j<3; j++){
for(i=0; i<4; i++)
aver[j] += score[i][j];
}
for(j=0; j<3; j++)
printf("第%d门课程的平均成绩是%.3f。\n", j+1, aver[j]/4.0);
printf("\n");
}
findMax()
这个函数用于解决第二问,即所有成绩中最高的分数所对应的学生与课程并打印出来:
void findMax(int score[4][3]){
int i, j, max = 0, name, sub;
for(j=0; j<3; j++)
for(i=0; i<4; i++)
if(score[i][j] > max){
max = score[i][j];
name = i;
sub = j;
}
printf("成绩最高的学生为学生%d,科目为第%d门课程,成绩为%d。", name+1, sub+1, max);
}
主函数
因为上面写了一堆函数,主函数就可以直接调用他们实现操作了,因而主函数十分简单:
void main(){
char student[4];
int score[4][3]={0}, i, j;
score[4][3] = randScore(score);
printScore(score);
aver(score);
findMax(score);
}
运行效果
每次跑出来的结果都是不一样的:
学生1的三门成绩分别为: 72 88 76
学生2的三门成绩分别为: 89 76 65
学生3的三门成绩分别为: 73 86 94
学生4的三门成绩分别为: 88 98 76
第1门课程的平均成绩是80.500。
第2门课程的平均成绩是87.000。
第3门课程的平均成绩是77.750。
成绩最高的学生为学生4,科目为第2门课程,成绩为98。