如何用C语言编写一个函数来接收用户输入10个学生的学号和各科成绩(每个学生有3门课的成绩,都是整数),然后计算并返回3门课程总分最高的学生的学号及其最高总分?请提供相应的代码实现。
时间: 2024-12-22 18:19:17 浏览: 19
在C语言中,你可以创建一个结构体表示学生信息,包含学号和三门课程的成绩。接着,定义一个函数来接收用户的输入,并遍历这个结构体数组来找出总分最高的学生。下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义学生结构体
typedef struct {
int student_id;
int score[3]; // 学生的三门课程成绩
} Student;
// 函数声明
Student* find_highest_student(Student students[], int num_students);
int main() {
int i, j;
Student students[10];
// 输入学生数据
for (i = 0; i < 10; i++) {
printf("请输入第 %d 位学生的学号和三门课程的成绩:\n", i + 1);
scanf("%d", &students[i].student_id);
for (j = 0; j < 3; j++) {
scanf("%d", &students[i].score[j]);
}
}
// 找出总分最高的学生
Student* highest_student = find_highest_student(students, 10);
if (highest_student) {
printf("总分最高的学生学号是:%d,最高总分为:%d\n",
highest_student->student_id, highest_student->score[0] + highest_student->score[1] + highest_student->score[2]);
} else {
printf("没有找到学生数据。\n");
}
free(highest_student); // 释放内存
return 0;
}
// 函数实现 - 寻找最高总分的学生
Student* find_highest_student(Student students[], int num_students) {
Student* max_student = NULL;
int max_score = INT_MIN;
for (int i = 0; i < num_students; i++) {
int total_score = students[i].score[0] + students[i].score[1] + students[i].score[2];
if (total_score > max_score) {
max_score = total_score;
max_student = &students[i];
}
}
if (max_student) {
return max_student;
} else {
return NULL; // 如果所有学生的总分都一样,返回NULL
}
}
```
在这个例子中,`find_highest_student`函数会遍历整个学生数组,比较每个学生的总分,如果发现比当前最高分更高的,则更新`max_student`指针。最后,主函数会打印出最高分学生的信息。
阅读全文