c语言 编写程序,用结构体存放学生的若干信息,包括学号、姓名和3门课程的分数,从键盘输入数据,输出每门课程的总平均分,以及最高分的学生的完整数据。
时间: 2024-03-25 15:42:09 浏览: 81
C语言程序设计-结构体和共用体教育课件.ppt
好的,这是一个关于C语言结构体的问题。下面是代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENT_NUM 50
#define MAX_NAME_LENGTH 20
typedef struct {
int id;
char name[MAX_NAME_LENGTH];
float score[3];
} Student;
int main() {
Student students[MAX_STUDENT_NUM];
int student_num, max_score_index = 0;
float score_sum[3] = {0}, max_score = 0;
printf("请输入学生数量: ");
scanf("%d", &student_num);
// 输入学生信息
for (int i = 0; i < student_num; i++) {
printf("请输入第%d个学生的学号、姓名和3门课程的分数: ", i + 1);
scanf("%d %s %f %f %f", &students[i].id, students[i].name,
&students[i].score[0], &students[i].score[1], &students[i].score[2]);
}
// 计算每门课程的总分和平均分
for (int i = 0; i < student_num; i++) {
for (int j = 0; j < 3; j++) {
score_sum[j] += students[i].score[j];
}
}
printf("每门课程的总平均分为: %.2f %.2f %.2f\n",
score_sum[0] / student_num, score_sum[1] / student_num, score_sum[2] / student_num);
// 找到最高分的学生
for (int i = 0; i < student_num; i++) {
float total_score = students[i].score[0] + students[i].score[1] + students[i].score[2];
if (total_score > max_score) {
max_score = total_score;
max_score_index = i;
}
}
printf("最高分的学生的信息:\n");
printf("学号: %d\n", students[max_score_index].id);
printf("姓名: %s\n", students[max_score_index].name);
printf("三门课程的分数: %.2f %.2f %.2f\n", students[max_score_index].score[0],
students[max_score_index].score[1], students[max_score_index].score[2]);
return 0;
}
```
这个程序中,我们首先定义了一个结构体 `Student`,包括了学号、姓名和3门课程的分数。然后定义了一个数组 `students`,用来存放所有学生的信息。在 `main` 函数中,我们先输入学生数量,然后在循环中输入每个学生的信息,并计算每门课程的总分和平均分。接着,我们遍历所有学生,找到最高分的学生,并输出他的完整信息。最后,程序结束。
注意,这个程序假设输入的数据都是合法的,没有进行输入的合法性检查。如果需要更加健壮的程序,可以针对输入的不同情况进行相应的处理。
阅读全文