原题链接:https://www.imooc.com/code/5738
这道题主要想考察做题者灵活使用数组的能力,主要有以下两个点。
1.正确认识和理解数组。
2.是否能熟练的使用冒泡排序法对一个数组进行排序。
好,废话不多说。我们直接上代码!
//在一个长度为10的整型数组里面,保存了班级10个学生的考试成绩。要求编写5个函数,分别实现计算考试的总分,最高分,最低分,平均分和考试成绩降序排序。
#include<stdio.h>
int main(void)
{
int score[10]={67,98,75,63,82,79,81,91,66,84};
int x,a;
int y;
int sum = 0;//学生成绩总和
int max;//学生成绩的最高分
int min;//学生成绩的最低分
max = min = score[0];
int average = 0;//学生成绩的平均分
int arr[10];//降序排列后的数组
for(int k = 0;k<10;k++)
{
sum +=score[k];
if(score[k]<max) {
max=score[k];}
if(score[k]>min){
min = score[k];
}
}
average = sum/10;
for(x = 0;x<=10;x++)
for(a = 0;a<=10;a++)
{
if(score[x]<score[a])
{ y = score[x];
score[x]=score[a];
score[a]=y;
}
}
printf("降序排列后的成绩是:\n");
for(int k = 0;k<=10;k++)
{ if(score[k]==0)
continue;
printf("%d\n",score[k]);
}
printf("全班成绩的总分是:%d\n平均成绩是:%d\n最低成绩是:%d\n最高成绩是:%d\n",sum,average,max,min);
}
这段代码先利用循环求出最大值和最小值,我来解释一下为什么要用两个if,因为冒泡排序是从第二个数和后面一个数字比较;如果大于前面这个就和前面这个数交换位置。所以最大值和最小值的数组下标都在score【0】,也就是数组第一个值。这是我们完成的第一个需求。
这才是我们完整的排序过程。
下面是运行结果,可以看到我们的数组都按照从小到大的顺序排序好了,那么冒泡排序的任务就完成了。
这是我的第一期分享自己的见解,如果有误导的地方欢迎各位指正我的错误,不过既然来都来了,就求求各位看官给个三连吧!