c语言2、输入3个学生3门课的成绩,分别用函数实现下列功能: ①计算每个学生平均分; ②计算每门课的平均分; ③找出所有9个分数中最高的分数所对应的学生和课程。
时间: 2024-12-20 08:18:46 浏览: 19
在C语言中,我们可以定义几个函数来实现这个需求。首先,我们需要创建一个结构体`Student`表示学生,包含姓名和三门课的成绩。然后定义三个辅助函数分别用于计算平均分、计算每门课的平均分以及查找最高分。
```c
#include <stdio.h>
#include <string.h>
// 定义学生结构体
typedef struct {
char name[50];
int score[3]; // 学生的三门课成绩
} Student;
// 函数声明
float average_score(Student student);
float course_average(int scores[], int num_courses);
void find_highest_student_and_course(Student students[], int num_students);
int main() {
Student students[3]; // 存储3个学生的数组
int i, j;
printf("请输入学生信息(按顺序输入姓名和三门课的成绩):\n");
for (i = 0; i < 3; i++) {
scanf("%s", students[i].name);
for (j = 0; j < 3; j++) {
scanf("%d", &students[i].score[j]);
}
}
// 计算每个学生的平均分并打印
for (i = 0; i < 3; i++) {
float avg = average_score(students[i]);
printf("学生 %s 的平均分为: %.2f\n", students[i].name, avg);
}
// 计算每门课的平均分并打印
float course_scores[] = {students[0].score[0], students[0].score[1], students[0].score[2],
students[1].score[0], students[1].score[1], students[1].score[2],
students[2].score[0], students[2].score[1], students[2].score[2]};
for (j = 0; j < 3; j++) {
float avg = course_average(course_scores, 3);
printf("第%d门课的平均分为: %.2f\n", j+1, avg);
}
// 查找最高分并打印学生和课程
find_highest_student_and_course(students, 3);
return 0;
}
// 辅助函数实现
float average_score(Student student) {
float sum = 0;
for (int i = 0; i < 3; i++) {
sum += student.score[i];
}
return sum / 3.0;
}
float course_average(int scores[], int num_courses) {
float total = 0;
for (int i = 0; i < num_courses; i++) {
total += scores[i];
}
return total / num_courses;
}
void find_highest_student_and_course(Student students[], int num_students) {
int highest_score = students[0].score[0];
int highest_index = 0;
char highest_student_name[50] = "";
char highest_course[3][20];
for (int i = 0; i < num_students; i++) {
for (int j = 0; j < 3; j++) {
if (students[i].score[j] > highest_score) {
highest_score = students[i].score[j];
highest_index = i;
strcpy(highest_student_name, students[i].name);
for (int k = 0; k < 3; k++) {
if (k == j) {
sprintf(highest_course[k], "%d", j+1); // 第一门课是1, 第二门课是2, ...以此类推
} else {
strcpy(highest_course[k], "无"); // 如果不是最高分对应的科目,则标记为"无"
}
}
}
}
}
printf("最高分(%.2f)属于学生 %s,对应课程: ", highest_score, highest_student_name);
for (int k = 0; k < 3; k++) {
printf("%s, ", highest_course[k]);
}
}
```
阅读全文