学生成绩排序 - 爱问答

(爱问答)

学生成绩排序

//题目是判断 5名学生的成绩,最高是10分,从小到大的顺序排列

#include<stdio.h>

#include<windows.h>

 

int main(void){

system("cls");

int i,j,test,a[11];

 

for(i=0; i<=10; i++){

a[i] = 0; //分别把他们都初始化为0,表示还没有一个空间有学生成绩

}

 

for(i=1; i<=5; i++){

printf("请输入第%d个学生第成绩: ", i);

scanf("%d", &test);

 

a[test]++;

}

for(i=0; i<=10; i++)//判断a[0] ~ a[10]

for(j=1; j<=a[i]; j++){

printf("%d ", i); //分数多少,打印多少

}

printf(" ");

system("pause");

return 0;

}

/*这个程序采用的是对号入座,比如,  第一个同学是5分,为就在a[5]哪里加一次。

而 a[test]++ 也是我最搞不懂地方, 我个人认为是:

 假如第一个同学输入第成绩是5, 那么我加从0开始数,到5的时候 == a[4]程序加一次加变成 == a[5],

 而书上说的是在,a[5]加一次,如果重复在加一次。

 

 还有一点就是: for(j=1; j<=a[i]; j++)   这里我不懂,为什么我把j=1改成j=0会做不到理想的程序输出。

 而 for(j=1; j<=a[i]; j++) 前一条语句 for(i=0; i<=10; i++)  的这个作用,我的理解为是:索引。

 索引a[i] 从0~10的

 

 */


这个程序用了一个非常规的方法来排序,排序效率是高的,占空间也是大的,但输出效率不高.

其中的

a[test]++

不是你理解的,它缺省设

a[0]~a[10]为0

然后同学成绩是多少,相对应就的数组就加1

也就是若成绩test=5,那么

a[test]++就为a[5]++也就是

a[5]=a[5]+1,若是第一个成绩为5的,那么a[5]=0+1=1

这个程序的一个问题是,成绩必须在0~10之间,否则,下标就溢出了

而输出时,用了二重循环,且j从1开始,也就是不会输出a[n]为0的

若a[n]为2,那么就输出两次i

实际应用中,这个方法只用于统计,不太用于排序的


下一篇:为什么2048EU/t是220V交流

上一篇:青少年志愿者培训内容有哪些

热门标签:
英语 谜语 作文 数学 公式 语文 物理 化学 工艺 java c语言 实验 方程 金属 分子 数据库 硫酸 酒精 运算 石油 vc 世界大战 php 化合物 mysql
最新更新:
电学的一个小问题 为什么打点计时器只能粗略瞬时速度 lookdownupon用法 中专都考不上大学有必要复读一年吗? 如图,已知∠B=∠DEF,AB=DE,请添加一个条件使△ABC≌△DEF,则需添加的条件是__________. 求曲线y=2x^2和直线y=2的所围图形的面积 夜上受降城闻笛是哪句 这个怎么填数字? 小明家下五层楼是5楼,那么小明家上五层楼是几层楼? 填空题,这个题目是怎么算的呢…… 22335577()143中括号里填什么数字。 懂得人帮我看一下这个英文是啥意思??? 最小的物质单位是什么 怎么估算根号52000000 about的重读字母是哪里