今天的学习内容是冒泡排序,是新内容。经过了昨天的恢复训练,今天开始练习一道题,这道题跟昨天的题目有关系。
我们来看看这道题。
一个班有m个(5<=m<=100)同学考试,输入每个同学的英语成绩,求平均分数,最高分以及前5名(以便发奖励),从高到低输出。
输入两行,第一行为m,第二行为m个数,表示英语成绩。
输出一行,6个数,表示求平均分数(保留两位小数)以及前5名,从高到低输出。
样例输入:
10
81 85 83 84 88 92 97 91 94 87
样例输出
88.20, 97,94,92,91,88
先讲了一下冒泡排序的原理,仔细的讲解了下面的动图。
然后开始撸代码。中间除了一些小问题,最后的结果还算顺利的弄出来了。
一起看代码。(注释是我加的)
#include<bits/stdc .h>
using namespace std;
int main()
{
int m=0;
int a[105]; //数组要多申请一点,以免越界
int s=0;
float sum=0;
cin>>m;
for(int i=1;i<=m;i )
{
cin>>a[i];
sum=sum a[i];
}
//冒泡排序,首先要注意的是,外循环从大到小,内循环,从小到大
for(int i=m;i>=1;i--)
{
for(int j=1;j<i;j )
{
//比大小,如果前面的大,就交换位置
if(a[j]>a[j 1])
{
s=a[j 1];
a[j 1]=a[j];
a[j]=s;
}
}
}
sum=sum/m;
//cout<<setprecision[2]<<fixed<<sum<<","; //这个地方不能用方括号,否则结果不对
cout<<setprecision(2)<<fixed<<sum<<",";
for(int i=m;i>m-5;i--)
{
cout<<a[i];
if(i>m-4)
cout<<",";
}
return 0;
}
结果如下:
作者简介:本人是一个从业20多年的软件开发人员,并非培训机构的人员,现在自己在家教自己儿子学习C ,在此将相关的信息分享出来,供各位感兴趣的家长讨论,参考。
前几期的文章,欢迎浏览转发点赞!!!
1、。
2、。
3、。
4、。
5、。
6、。
7、。
,