用C语言编写程序,用结构体存放学生的若干信息,包括学号、姓名和3门课程的分数,从键盘输入数据,输出每门课程的总平均分,以及最高分的学生的完整数据。
时间: 2024-03-26 16:36:21 浏览: 103
好的,以下是用结构体存放学生信息的C语言程序:
```
#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 100
struct student {
char id[20];
char name[20];
int score[3];
float average;
};
int main() {
struct student students[MAX_STUDENTS];
int n;
printf("请输入学生人数(不超过%d人):", MAX_STUDENTS);
scanf("%d", &n);
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的信息:\n", i + 1);
printf("学号:");
scanf("%s", students[i].id);
printf("姓名:");
scanf("%s", students[i].name);
printf("三门课程的分数:");
scanf("%d%d%d", &students[i].score[0], &students[i].score[1], &students[i].score[2]);
students[i].average = (students[i].score[0] + students[i].score[1] + students[i].score[2]) / 3.0; // 计算平均分
}
// 计算每门课程的总平均分
float avg[3] = {0};
for (int i = 0; i < n; i++) {
avg[0] += students[i].score[0];
avg[1] += students[i].score[1];
avg[2] += students[i].score[2];
}
avg[0] /= n;
avg[1] /= n;
avg[2] /= n;
printf("每门课程的总平均分为:%.2f %.2f %.2f\n", avg[0], avg[1], avg[2]);
// 找出最高分的学生
int max_index = 0;
for (int i = 0; i < n; i++) {
if (students[i].average > students[max_index].average) {
max_index = i;
}
}
printf("最高分的学生是:%s %s %.2f\n", students[max_index].id, students[max_index].name, students[max_index].average);
return 0;
}
```
在这个程序中,我们首先定义了一个 `student` 结构体,包含了学生的学号、姓名和3门课程的分数,并且额外添加了一个 `average` 字段表示该学生的平均分。
在主函数中,我们首先定义了一个长度为 `MAX_STUDENTS` 的 `students` 数组,用于存放所有学生的信息。然后从键盘读入学生人数 `n`,并循环读入每个学生的信息,计算每个学生的平均分,存储到 `students` 数组中。
接着,我们计算每门课程的总平均分,并输出结果。最后,我们循环遍历 `students` 数组,找出平均分最高的学生,输出该学生的完整信息。
需要注意的是,在读入字符串时,我们使用了 `%s` 格式化字符串,但是由于字符串可能包含空格等特殊字符,因此需要使用 `fgets` 函数来读入字符串,或者使用 `%[^\n]%*c` 格式化字符串来读入整行字符串。在这个程序中,为了简化代码,我们假设了所有输入的字符串都不包含空格。
阅读全文