C语言:输入4名学生3门课程的成绩,并分别用函数求出每门课程的平均分数与所有成绩中最高的分数所对应的学生与课程

本文介绍了一个使用C语言编写的程序,该程序能够自动随机生成四名学生三门课程的成绩,并通过函数实现每门课程平均分的计算及最高分学生与课程的查找。

题目来源:大工慕课 链接
作者:Caleb Sung

题目要求

输入4名学生3门课程的成绩,并分别用函数求出:

  1. 每门课程的平均分数
  2. 所有成绩中最高的分数所对应的学生与课程

参考代码

这个程序手输成绩数据一定很蛋疼,本着能懒就懒的原则,这里的成绩是由程序自动生成的,大家也可以自行修改。

头文件

用到了标准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。
<think> 根据用户需求,我们需要完成以下功能1. 输入10个学生5成绩(假设成绩为整) 2. 用函数实现: a. 计算每个学生平均分 b. 计算平均分 c. 找所有50个分数最高分数对应学生课程 我们将设计三个函数分别完成上述功能在主函数输入成绩调用这些函数。 步骤: 1. 定义全局常量:学生N=10,课程M=5 2. 主函数中定义一个二维组scores[N][M]存储成绩 3. 输入成绩:使用循环输入每个学生的每成绩 4. 实现三个函数: - void student_avg(int scores[N][M]): 计算每个学生平均分 - void course_avg(int scores[N][M]): 计算平均分 - void find_max(int scores[N][M]):最高分数对应学生课程(注意:最高分可能不止一个,但题目要求找一个即可,通常我们找到第一个现的最高分) 注意:题目要求用函数实现,所以我们将每个功能封装为函数。 另外,题目要求找最高分数对应学生课程,这里我们假设如果有多个相同的最高分,只返回第一个找到的。 下面我们开始写代码: </think> ### C语言实现学生成绩统计程序 以下是完整的C语言程序,实现输入10个学生5成绩计算1. 每个学生平均分 2. 每平均分 3. 找最高分数对应学生课程 ```c #include <stdio.h> #define STUDENTS 10 #define COURSES 5 // 计算每个学生平均分 void student_averages(int scores[STUDENTS][COURSES]) { for (int i = 0; i < STUDENTS; i++) { int sum = 0; for (int j = 0; j < COURSES; j++) { sum += scores[i][j]; } printf("学生 %d 的平均分: %.2f\n", i+1, (float)sum/COURSES); } } // 计算平均分 void course_averages(int scores[STUDENTS][COURSES]) { for (int j = 0; j < COURSES; j++) { int sum = 0; for (int i = 0; i < STUDENTS; i++) { sum += scores[i][j]; } printf("课程 %d 的平均分: %.2f\n", j+1, (float)sum/STUDENTS); } } // 找最高对应学生课程 void find_highest(int scores[STUDENTS][COURSES]) { int max_score = scores[0][0]; int max_student = 1; int max_course = 1; for (int i = 0; i < STUDENTS; i++) { for (int j = 0; j < COURSES; j++) { if (scores[i][j] > max_score) { max_score = scores[i][j]; max_student = i+1; max_course = j+1; } } } printf("最高分 %d 分现在学生 %d 的课程 %d\n", max_score, max_student, max_course); } int main() { int scores[STUDENTS][COURSES]; // 输入成绩 printf("请输入10个学生5成绩:\n"); for (int i = 0; i < STUDENTS; i++) { printf("学生 %d 的5成绩(空格分隔): ", i+1); for (int j = 0; j < COURSES; j++) { scanf("%d", &scores[i][j]); } } printf("\n==== 学生平均分 ====\n"); student_averages(scores); printf("\n==== 课程平均分 ====\n"); course_averages(scores); printf("\n==== 最高分统计 ====\n"); find_highest(scores); return 0; } ``` ### 程序说明 1. **据结构**: - 使用二维组`scores[10][5]`存储成绩 - 行表示学生10行) - 列表示课程(5列) 2. **核心函数**: - `student_averages()`: 计算每个学生平均分 - 遍历每个学生,累加其5课程成绩 - 计算平均值:$平均分 = \frac{总成绩}{5}$ - `course_averages()`: 计算平均分 - 遍历每课程,累加所有学生课程成绩 - 计算平均值:$平均分 = \frac{总成绩}{10}$ - `find_highest()`: 查找最高分 - 遍历所有成绩,记录最大值及其位置 - 输格式:`最高分 [分数] 分现在学生 [学号] 的课程 [课程号]` 3. **输入示例**: ``` 请输入10个学生5成绩: 学生 1 的5成绩(空格分隔): 85 76 90 88 92 学生 2 的5成绩(空格分隔): 78 85 80 92 87 ...(输入剩余8个学生成绩)... ==== 学生平均分 ==== 学生 1平均分: 86.20 学生 2 的平均分: 84.40 ... ==== 课程平均分 ==== 课程 1平均分: 82.50 课程 2 的平均分: 79.80 ... ==== 最高分统计 ==== 最高分 95 分现在学生 3课程 4 ``` ### 使用说明 1. 编译程序:`gcc score_calculator.c -o score_calculator` 2. 运行程序:`./score_calculator` 3. 按提示逐个输入学生成绩(每行输入一个学生的5成绩,空格分隔) 4. 程序自动计算三类统计结果
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值