有N个学生,每个学生的数据包括学号、姓名、三门课的成绩。从键盘输入N个学生的数据,要求打印出三门课的总平均成绩,以及最高分的学生数据(包括学号、姓名、三门课成绩、平均分数)C语言
时间: 2024-10-10 15:09:16 浏览: 36
有5个学生,么个学生有三门课成绩,从键盘键入以上数据,存放在文件中
5星 · 资源好评率100%
在 C 语言中,你可以使用结构体来表示学生的信息,并创建一个循环来读取用户输入。首先,定义一个名为 `Student` 的结构体:
```c
#include <stdio.h>
#include <string.h>
// 定义学生结构体
typedef struct {
int student_id;
char name[50];
float score1, score2, score3;
} Student;
int main() {
int N;
printf("请输入学生总数: ");
scanf("%d", &N);
// 创建动态数组存储学生信息
Student* students = (Student*)malloc(N * sizeof(Student));
for (int i = 0; i < N; i++) {
printf("请输入第 %d 学生的信息:\n", i + 1);
scanf("%d", &students[i].student_id);
fgets(students[i].name, sizeof(students[i].name), stdin); // 防止换行符
students[i].score1 = get_float_score("第一门课成绩: ");
students[i].score2 = get_float_score("第二门课成绩: ");
students[i].score3 = get_float_score("第三门课成绩: ");
}
// 计算并打印总平均成绩
float total_avg = calculate_average(students, N);
printf("所有学生的平均成绩: %.2f\n", total_avg);
// 找到最高分的学生数据
Student max_student = find_highest_score(students, N);
printf("\n最高分学生信息:\n");
printf("学号: %d\n", max_student.student_id);
printf("姓名: %s\n", max_student.name);
printf("课程成绩: 第一门 %.2f, 第二门 %.2f, 第三门 %.2f\n",
max_student.score1, max_student.score2, max_student.score3);
printf("平均分数: %.2f\n", max_student.score1 + max_student.score2 + max_student.score3 / 3.0);
free(students); // 释放内存
return 0;
}
// 辅助函数获取浮点数成绩
float get_float_score(const char* prompt) {
float score;
while (scanf("%f", &score) != 1 || score < 0) { // 检查输入是否合法
printf("%s 输入错误,请重新输入。\n", prompt);
getchar(); // 清除前一个字符
}
return score;
}
// 计算平均成绩
float calculate_average(Student* students, int N) {
float sum = 0.0;
for (int i = 0; i < N; i++) {
sum += students[i].score1 + students[i].score2 + students[i].score3;
}
return sum / (3.0 * N);
}
// 寻找最高分学生
Student find_highest_score(Student* students, int N) {
Student max_student = students[0];
for (int i = 1; i < N; i++) {
if (students[i].score1 > max_student.score1 ||
(students[i].score1 == max_student.score1 &&
(students[i].score2 > max_student.score2 ||
(students[i].score1 == max_student.score2 && students[i].score3 > max_student.score3)))) {
max_student = students[i];
}
}
return max_student;
}
```
在这个程序中,我们定义了读取学生信息、计算平均分和找到最高分学生的函数。注意,这里假设用户会输入有效的分数。在实际应用中,还需要加入更多错误处理和边界检查。
阅读全文