用结构体解决下列问题:从键盘输入n个学生的信息,每个学生信息包括学号、姓名、3门课的成绩,然后计算每个学生的总分,求出前两名总分最高的学生,并输出学生的信息。
时间: 2023-04-21 09:04:32 浏览: 224
可以定义一个结构体来存储每个学生的信息,包括学号、姓名、3门课的成绩和总分。然后通过循环从键盘输入n个学生的信息,计算每个学生的总分,并将学生信息存储到一个数组中。最后,对数组按照总分进行排序,找出前两名总分最高的学生,并输出他们的信息。
具体实现可以参考以下代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENT_NUM 100
// 定义学生结构体
struct Student {
char id[20]; // 学号
char name[20]; // 姓名
int score[3]; // 3门课的成绩
int total; // 总分
};
int main() {
int n;
struct Student students[MAX_STUDENT_NUM];
// 从键盘输入学生信息
printf("请输入学生人数:");
scanf("%d", &n);
for (int i = ; i < n; i++) {
printf("请输入第%d个学生的信息:\n", i + 1);
printf("学号:");
scanf("%s", students[i].id);
printf("姓名:");
scanf("%s", students[i].name);
printf("成绩1:");
scanf("%d", &students[i].score[]);
printf("成绩2:");
scanf("%d", &students[i].score[1]);
printf("成绩3:");
scanf("%d", &students[i].score[2]);
students[i].total = students[i].score[] + students[i].score[1] + students[i].score[2];
}
// 按照总分排序
for (int i = ; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (students[i].total < students[j].total) {
struct Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
// 输出前两名总分最高的学生的信息
printf("前两名总分最高的学生的信息如下:\n");
for (int i = ; i < 2; i++) {
printf("学号:%s,姓名:%s,成绩1:%d,成绩2:%d,成绩3:%d,总分:%d\n",
students[i].id, students[i].name, students[i].score[], students[i].score[1], students[i].score[2], students[i].total);
}
return ;
}
```