用C语言输入10个学生5门课的成绩,分别用函数实现下列功能计算每个学生的平均分:计算每门课的平均分; 我出所有50个分数中最高的分数所对应的学生和课程,计算平均分方差:
时间: 2024-12-18 17:17:39 浏览: 13
在C语言中,为了实现这个需求,我们可以创建一个结构体`Student`存储学生的姓名和成绩数组,然后编写两个函数:一个用于计算单科平均分,另一个用于统计最高分和平均分方差。以下是关键部分的代码实现:
```c
#include <stdio.h>
#include <string.h>
// 定义学生结构体
typedef struct {
char name[50];
int scores[5]; // 存储五门课的成绩
} Student;
// 函数:计算单科平均分
double calculate_subject_average(Student student[], int subject_index) {
if (subject_index >= 0 && subject_index < 5) {
double sum = 0;
for (int i = 0; i < 10; i++) {
sum += student[i].scores[subject_index];
}
return sum / 10.0;
} else {
printf("Invalid subject index.\n");
return 0;
}
}
// 函数:找出最高分并计算平均分方差
void find_max_score_and_variance(Student student[], double *max_score, double *variance) {
*max_score = -1; // 初始化为负一,表示未找到
double total_sum = 0, square_sum = 0;
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 5; j++) {
total_sum += student[i].scores[j];
// 更新最大值
if (student[i].scores[j] > *max_score) {
*max_score = student[i].scores[j];
}
// 计算方差
square_sum += pow(student[i].scores[j], 2);
}
}
*variance = (total_sum / (10 * 5)) - pow(*max_score, 2); // 方差公式
}
int main() {
Student students[10]; // 创建10个学生的数组
for (int i = 0; i < 10; i++) {
printf("请输入第 %d 位学生各科成绩:\n", i + 1);
scanf("%s", students[i].name);
for (int j = 0; j < 5; j++) {
scanf("%d", &students[i].scores[j]);
}
}
// 调用函数计算单科平均分
printf("每门课的平均分:\n");
for (int subject = 0; subject < 5; subject++) {
double avg = calculate_subject_average(students, subject);
printf("科目%d的平均分:%.2f\n", subject + 1, avg);
}
double max_score, variance;
find_max_score_and_variance(students, &max_score, &variance);
printf("\n最高分(学生名+课程)及对应的平均分方差:\n");
printf("最高分:%d,对应课程:%s,平均分方差:%.2f\n", max_score, students[find_max_score_index(max_score)].name, variance);
return 0;
}
// 辅助函数:查找最高分的学生索引
int find_max_score_index(int score) {
int index = -1;
for (int i = 0; i < 10; i++) {
if (students[i].scores[0] == score) { // 假设第一门课是关键课程,实际需要遍历全部五门
index = i;
break;
}
}
return index;
}
```
在这个代码中,我们首先定义了`Student`结构体,然后实现了计算单科平均分和查找最高分及方差的函数。在主函数中,用户可以输入10个学生5门课的成绩,并通过这两个函数获取所需信息。
阅读全文