C语言,编写程序,用结构体存放学生的若干信息,包括学号、姓名和3门课程的分数,从键盘输入数据,输出每门课程的总平均分,以及最高分的学生的完整数据。
时间: 2024-03-14 10:47:42 浏览: 70
好的,下面是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT_NUM 100
#define COURSE_NUM 3
struct student {
int id;
char name[20];
int score[COURSE_NUM];
};
int main() {
struct student stu[MAX_STUDENT_NUM];
int n = 0;
// 读取学生信息
printf("请输入学生信息(学号 姓名 语文成绩 数学成绩 英语成绩):\n");
while (scanf("%d %s %d %d %d", &stu[n].id, stu[n].name, &stu[n].score[0], &stu[n].score[1], &stu[n].score[2]) != EOF) {
n++;
}
// 计算每门课程的总平均分
double course_avg[COURSE_NUM] = {0};
for (int i = 0; i < n; i++) {
for (int j = 0; j < COURSE_NUM; j++) {
course_avg[j] += stu[i].score[j];
}
}
for (int i = 0; i < COURSE_NUM; i++) {
course_avg[i] /= n;
}
printf("每门课程的总平均分:\n");
printf("语文:%.2lf,数学:%.2lf,英语:%.2lf\n", course_avg[0], course_avg[1], course_avg[2]);
// 查找最高分的学生
int max_score = 0;
int max_score_index = 0;
for (int i = 0; i < n; i++) {
int sum_score = 0;
for (int j = 0; j < COURSE_NUM; j++) {
sum_score += stu[i].score[j];
}
if (sum_score > max_score) {
max_score = sum_score;
max_score_index = i;
}
}
printf("最高分的学生的完整数据:\n");
printf("学号:%d,姓名:%s,语文成绩:%d,数学成绩:%d,英语成绩:%d\n", stu[max_score_index].id, stu[max_score_index].name, stu[max_score_index].score[0], stu[max_score_index].score[1], stu[max_score_index].score[2]);
return 0;
}
```
以上代码中,我们使用了一个结构体 `student` 来存储每个学生的信息。在 `main` 函数中,我们首先声明一个长度为 `MAX_STUDENT_NUM` 的结构体数组 `stu`,用于存储读取到的学生信息。接着,我们使用一个 `while` 循环来读取用户输入的数据,每读取一行就将其存储到数组中,并将 `n` 的值加 1。读取完毕后,我们利用两个循环计算每门课程的总平均分,并输出到屏幕上。最后,我们再利用一个循环查找最高分的学生,并输出其完整数据。
需要注意的是,在读取字符串类型的数据时,我们使用了 `scanf` 函数,并将 `%s` 指定为格式化字符串。由于 `scanf` 会在读取到空格、换行符等特殊字符时停止读取,因此我们可以直接读取一行数据,并将其分别存储到 `student` 结构体中的不同成员中。
阅读全文