有3个学生,每个学生的数据包括学号(整数),姓名(最多20个字符),2门课的成绩(float类型数据),从键盘输入3个学生的数据,要求打印出总分最高(假定唯一)的学生的信息(学号,姓名,2门课的成绩,平均分)。 提示思路:定义学生结构体,基于结构体建立结构体数组,输入数据后,循环查找最高分学生数组中的位置,显示该位置的结构体变量的详细数据。 【输入形式】 学生结构体数组 【输出形式】 最高分学生的详细数据 【样例输入】 1 zhangsan 80 90 2 lisi 92 98 3 wangwu 80 78 【样例输出】 2 lisi 92 98 95 【样例说明】 【评分标准】 #include<iostream> using namespace std; struct student { }; int main() { student s[3]; for(int i=0;i<3;i++) { cin>>s[i].num>>s[i].name>>s[i].score1>>s[i].score2; } }按要求补全,C语言
时间: 2024-02-26 10:56:33 浏览: 80
以下是题目要求的代码实现:
```c
#include <stdio.h>
#include <string.h>
struct student {
int num; // 学号
char name[21]; // 姓名
float score1; // 第一门课程成绩
float score2; // 第二门课程成绩
};
int main() {
struct student s[3];
int max_index = 0; // 最高分学生在数组中的位置
float max_score = 0; // 最高分
for (int i = 0; i < 3; i++) {
scanf("%d %s %f %f", &s[i].num, s[i].name, &s[i].score1, &s[i].score2);
float total_score = s[i].score1 + s[i].score2;
if (total_score > max_score) {
max_score = total_score;
max_index = i;
}
}
printf("%d %s %.2f %.2f %.2f\n", s[max_index].num, s[max_index].name, s[max_index].score1, s[max_index].score2, (s[max_index].score1 + s[max_index].score2) / 2.0);
return 0;
}
```
解释:
首先定义了一个 `struct student` 结构体,包含学生的学号、姓名、两门课的成绩;然后在 `main` 函数中定义了一个 `student` 数组 `s`,用于存储三个学生的数据。
接着使用 `scanf` 函数从标准输入中读取每个学生的数据,计算每个学生的总分,并与当前的最高分进行比较,如果当前学生的总分高于最高分,则更新最高分和最高分学生的位置。
最后输出最高分学生的详细数据,包括学号、姓名、两门课的成绩和平均分。注意输出时需要保留两位小数,可以使用 `%.2f` 格式控制符。
代码中没有进行输入数据的合法性检查,需要注意输入数据的正确性。
阅读全文