编写一个C语言程序:有N个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入N个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩)
时间: 2024-09-14 22:13:10 浏览: 55
在C语言中编写一个程序来实现这个需求,首先需要定义一个结构体来存储每个学生的信息,包括学号、姓名和3门课的成绩。然后通过循环从键盘输入每个学生的信息,并计算总平均成绩以及跟踪最高分学生的数据。下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 100
#define COURSES 3
typedef struct {
char id[20]; // 假设学号不超过19个字符
char name[50];
int scores[COURSES];
} Student;
int main() {
Student students[MAX_STUDENTS];
Student topStudent;
int n, i, j;
float totalScores = 0, averageScore;
// 输入学生数量
printf("请输入学生数量: ");
scanf("%d", &n);
if (n > MAX_STUDENTS || n <= 0) {
printf("输入的学生数量不合法。\n");
return 1;
}
// 输入每个学生的信息
for (i = 0; i < n; i++) {
printf("请输入第%d个学生的信息:学号 姓名 3门课成绩\n", i + 1);
scanf("%s %s", students[i].id, students[i].name);
for (j = 0; j < COURSES; j++) {
scanf("%d", &students[i].scores[j]);
totalScores += students[i].scores[j]; // 累加成绩
}
}
// 计算平均分
averageScore = totalScores / (n * COURSES);
printf("3门课的总平均成绩为: %.2f\n", averageScore);
// 初始化最高分学生为第一个学生
topStudent = students[0];
// 查找最高分的学生
for (i = 1; i < n; i++) {
int total = 0;
for (j = 0; j < COURSES; j++) {
total += students[i].scores[j];
}
if (total > totalScores) { // 如果某个学生的总分超过当前最高分
totalScores = total;
topStudent = students[i];
}
}
// 打印最高分学生的信息
printf("最高分学生的信息:学号:%s 姓名:%s 成绩:", topStudent.id, topStudent.name);
for (j = 0; j < COURSES; j++) {
printf("%d ", topStudent.scores[j]);
}
printf("\n");
return 0;
}
```
这个程序首先定义了一个`Student`结构体来存储学生的数据,然后通过循环读取输入的学生信息,并计算所有成绩的总和。接着,计算平均成绩并输出。最后,程序再次遍历所有学生数据,找出总分最高的学生,并打印出该学生的信息。
阅读全文