用C语言编写程序,用结构体存放学生的若干信息,包括学号、姓名和3门课程的分数,从键盘输入数据,输出每门课程的平均分,以及最高分学生的完整数据
时间: 2023-12-01 18:02:07 浏览: 103
C语言程序设计-输入2个学生3门课的成绩,计算学生成绩平均分,课程平均分和最高分.
5星 · 资源好评率100%
以下是一个示例程序,实现了上述要求:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 100
typedef struct {
int id; // 学号
char name[20]; // 姓名
double scores[3]; // 3门课程的分数
} Student;
int main() {
Student students[MAX_STUDENTS];
int num_students = 0;
// 从键盘输入数据,直到输入结束或学生数量达到上限
while (num_students < MAX_STUDENTS) {
printf("请输入第 %d 个学生的信息(学号 姓名 分数1 分数2 分数3),或输入空行结束:\n", num_students + 1);
char line[100];
if (fgets(line, sizeof(line), stdin) == NULL || line[0] == '\n') {
break;
}
Student *s = &students[num_students];
// 解析输入的数据,存入结构体中
if (sscanf(line, "%d %s %lf %lf %lf", &s->id, s->name, &s->scores[0], &s->scores[1], &s->scores[2]) != 5) {
printf("输入格式错误!\n");
continue;
}
num_students++;
}
// 计算每门课程的平均分
double avg_scores[3] = {0};
for (int i = 0; i < num_students; i++) {
for (int j = 0; j < 3; j++) {
avg_scores[j] += students[i].scores[j];
}
}
for (int j = 0; j < 3; j++) {
avg_scores[j] /= num_students;
printf("第%d门课程的平均分为:%.2lf\n", j+1, avg_scores[j]);
}
// 找到最高分学生的完整数据
Student *max_score_student = &students[0];
for (int i = 1; i < num_students; i++) {
double max_score = max_score_student->scores[0];
if (students[i].scores[0] > max_score) {
max_score_student = &students[i];
}
}
printf("最高分学生的完整数据为:\n");
printf("学号:%d\n", max_score_student->id);
printf("姓名:%s\n", max_score_student->name);
printf("分数1:%.2lf\n", max_score_student->scores[0]);
printf("分数2:%.2lf\n", max_score_student->scores[1]);
printf("分数3:%.2lf\n", max_score_student->scores[2]);
return 0;
}
```
注意,上述程序假设输入的每一行都是一个学生的信息,且格式为“学号 姓名 分数1 分数2 分数3”,以空格分隔。如果输入格式不符,程序会提示错误并要求重新输入。在计算平均分和找到最高分学生时,程序会忽略未输入分数的学生。如果有多个学生分数相同且都是最高分,则程序只会输出其中一个学生的信息。
阅读全文