按大小输出学生成绩:排序的问题,希望帮到类似问题的童鞋们【原创】
#include<stdio.h>int main()
{
int d, i, j, m;
printf("请输入学生人数:");
scanf("%d", &d);
int c[d];
for(i = 0; i < d; ++i)
{
printf("第 %d 号学生的成绩为:", i+1);
scanf("%d", &c[i]);
}
for(j = 0; j < d; ++j)
{
for(i = 1+j; i < d; ++i)//必须为i=1+j,否则会和前一个较大数比较后交换
{
if(c[j] < c[i])
{
m = c[j];
c[j] = c[i];
c[i] = m;
}
}
printf("第 %d 名: %d \n", j+1, c[j]);
}
return 0;
}/*注意: 如果第17行写为for(i = 1; i < d; ++i), 再进行完j=0的第一轮循环后,\
a[j]每次循环始终会和a[1]及a[1++]以后的数进行比较,因此再j>=2时a[j]\
由于小于a[1]<由于j=1时执行完循环和if语句后a[1]就顺理成章成为了第\
二大>由于第二大的数始终在【数组c且下标为j>=1】的数中,所以只要是从\
数组下标为1(包括1)之后的数开始比较,那么以后打印出的每一个数都会因\
为【行17的for的遍历与行20的if的交换】而被赋值为第二大的值,所以输\
出结果除了c[0]为最大值外,其余不论是数组c的下标是多少<0除外>,其值\
都为输入【数组中的第二大的值】*/
[ 本帖最后由 NightSky 于 2012-7-7 10:54 编辑 ]