用结构体解决下列问题:从键盘输入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无用
悬赏问题
- ¥50 power BI 从Mysql服务器导入数据,但连接进去后显示表无数据
- ¥15 (关键词-阻抗匹配,HFSS,RFID标签)
- ¥50 sft下载大文阻塞卡死
- ¥15 机器人轨迹规划相关问题
- ¥15 word样式右侧翻页键消失
- ¥15 springboot+vue 集成keycloak sso到阿里云
- ¥15 win7系统进入桌面过一秒后突然黑屏
- ¥30 backtrader对于期货交易的现金和资产计算的问题
- ¥15 求C# .net4.8小报表工具
- ¥15 安装虚拟机时出现问题