用结构体解决下列问题:从键盘输入n个学生的信息,每个学生信息包括学号、姓名、3门课的成绩,然后计算每个学生的总分,求出前两名总分最高的学生,并输出学生的信息。
输入
只有一组数据,共n+1行
其中第一行是一个正整数n(1≤n≤100),表示要输入的学生人数。
第2--n+1 行 表示输入n个学生信息,分别是:学号(12位数字),姓名(英文名,长度不超过20个字符),3门课的成绩(大于等于0的整数)。
输出
有两行,输出总分最高的学生的信息,包括:学号,姓名,三门课成绩,总成绩,一个空格隔开。如输出样例所示。
难度
较难
输入示例
4
202008065201 zhangsan 88 80 99
202008065202 lisi 90 80 99
202008065203 wangwu 66 50 30
202008065204 wangwu 90 100 100
输出示例
202008065204 wangwu 90 100 100 290
202008065202 lisi 90 80 99 269
结构体语言c语言程序问题输入
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- hello_world&& 2022-11-28 11:36关注
#include<stdio.h> struct student{ char num[30]; char name[20]; int score[3]; int sum; }; void sort(int n,struct student stu[]) { struct student t; int i,j; for(i=0;i<n-1;i++)//n个数的数列总共扫描n-1次 { for(j=0;j<n-i-1;j++)//每一趟扫描到stu[n-i-2]与stu[n-i-1]比较为止结束 { if(stu[j].sum<stu[j+1].sum)//后一位数比前一位数大的话,就交换两个数的位置(降序) { t=stu[j+1]; stu[j+1]=stu[j]; stu[j]=t; } } } } int main() { int i,n; struct student stu[100]; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%s %s %d %d %d",stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]); stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]; } sort(n,stu); printf("%s %s %d %d %d %d",stu[0].num,stu[0].name,stu[0].score[0],stu[0].score[1],stu[0].score[2],stu[0].sum); printf("\n"); printf("%s %s %d %d %d %d",stu[1].num,stu[1].name,stu[1].score[0],stu[1].score[1],stu[1].score[2],stu[1].sum); }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 PointNet++的onnx模型只能使用一次
- ¥20 西南科技大学数字信号处理
- ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
- ¥30 STM32 INMP441无法读取数据
- ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
- ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
- ¥15 用visualstudio2022创建vue项目后无法启动
- ¥15 x趋于0时tanx-sinx极限可以拆开算吗
- ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
- ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。