标签:name int 作业 50 学生 score 反思 成绩 对比
- 先看题目
【问题描述】
对某班学生成绩排序。从键盘依次输入某班学生的姓名和成绩(一个班级人数最多不超过50人)并保存,然后分别按学生成绩由高到低顺序输出学生姓名和成绩,成绩相同时,则按输入次序排序。
【输入形式】
从键盘依次输入最多不超过50个学生的学生姓名和成绩:
第一行输入班级学生人数;
在单独行上输入空格隔开的学生姓名和成绩,其中学生成绩是整数。
【输出形式】
按学生成绩由高到低顺序输出学生姓名和成绩,每行输出一位学生的姓名和成绩,其中姓名(英文)占15位,成绩占5位,均按缺省方式对齐。成绩相同时按输入次序排序。
【输入样例】
4 aaa 50 bbb 70 ccc 65 ddd 90
- 这是最新留的题目,说实话第一眼看到这题我完全傻眼,只记得上课确实学过如何一次性输出一大串,但不记得怎么用,所以还是先百度了答案。
百度结果如下:
#include<stdio.h>
struct
stu
{
char
name[20];
int
score;
}a[50],t;
int
main()
{
int
i,j,n;
scanf
(
"%d"
,&n);
for
(i=0;i<n;i++)
scanf
(
"%s%d"
,a[i].name,&a[i].score);
for
(i=0;i<n-1;i++)
for
(j=0;j<n-1-i;j++)
if
(a[j].score<a[j+1].score)
{t=a[j];a[j]=a[j+1];a[j+1]=t;}
for
(i=0;i<n;i++)
printf
(
"%15s%5d\n"
,a[i].name,a[i].score);
return
0;
}
- 与答案对比:
他将结构体放在了主函数外,我选择将结构体放在主函数内。
在最开始时,我并没有在意他在声明类型的同时定义的变量t,所以到后来if对比时是完全瞎写的。自己又在主函数开头定义了一个t,完全没意识到自己定义的t与结构体完全不是一个类型。包括输出的时候也是最开始的输出结果根本排不了序,我就一点一点的找原因,先是发现交换数组只交换了score,而不是整个数组,看答案也才也才意识到对应i的name和score可看做一个整体。
到后来才完全的意识到声明类型的同时定义的变量t的真正意义。
- 修改后自己的答案:
#include<stdio.h>
int main()
{
struct rem
{
char name[20];
int score;
}a[50],r;
int i,j,n;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s %d",&a[i].name,&a[i].score);
}
for(i=1;i<n;i++)
{
for(j=0;j<n-i;j++)
{
if(a[j].score<a[j+1].score)
{
r=a[j];
a[j]=a[j+1];
a[j+1]=r;
}
}
}
for(i=0;i<n;i++)
{
printf("%15s %d\n",a[i].name,a[i].score);
}
return 0;
}
标签:name,int,作业,50,学生,score,反思,成绩,对比 来源: https://blog.csdn.net/Saocr/article/details/121723225
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。