编写C语言程序,用结构体存放学生的若干信息,包括学号,姓名,和三门课程的分数,从键盘输入数据,输出每门可的总平均分,以及最高分的学生的完整数据
时间: 2023-08-11 18:03:08 浏览: 70
以下是一个示例程序,实现了上述功能:
```c
#include <stdio.h>
#include <string.h>
#define NUM_COURSES 3 // 科目数量
#define MAX_STUDENTS 100 // 最大学生数量
// 学生结构体
struct Student {
int id; // 学号
char name[20]; // 姓名
int scores[NUM_COURSES]; // 分数
};
int main() {
struct Student students[MAX_STUDENTS];
int num_students;
float averages[NUM_COURSES] = {0}; // 各科平均分
int max_score = -1; // 最高分
struct Student *max_student = NULL; // 最高分学生
// 输入学生信息
printf("请输入学生数量:");
scanf("%d", &num_students);
printf("请依次输入每个学生的学号、姓名和%d门课程的分数:\n", NUM_COURSES);
for (int i = 0; i < num_students; i++) {
struct Student *s = &students[i];
scanf("%d %s", &s->id, s->name);
for (int j = 0; j < NUM_COURSES; j++) {
scanf("%d", &s->scores[j]);
averages[j] += s->scores[j];
if (s->scores[j] > max_score) {
max_score = s->scores[j];
max_student = s;
}
}
}
// 计算各科平均分
for (int i = 0; i < NUM_COURSES; i++) {
averages[i] /= num_students;
}
// 输出各科平均分
printf("各科平均分:");
for (int i = 0; i < NUM_COURSES; i++) {
printf("%.2f ", averages[i]);
}
printf("\n");
// 输出最高分学生的完整数据
printf("最高分学生:学号=%d, 姓名=%s, 分数=%d %d %d\n",
max_student->id, max_student->name,
max_student->scores[0], max_student->scores[1], max_student->scores[2]);
return 0;
}
```
注意,在输入姓名时,我们使用了 `%s` 格式化字符串来读入字符串,而不是使用 `%c`,因为后者只能读入一个字符。另外,我们使用了指针来遍历学生数组,以减少不必要的内存开销。