2016考研数学平均分:请问c语言的大虾,

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/08 08:42:59
下面这段程序,我有几点不明,请教一下.

#include<stdio.h>
main()
int a[11]
int i,j,t;
printf("\n");
printf("input 10 numbers :\n");
for(i=1;i<11;i++)
scanf("%d",&a[i]);
printf("\n");
for(j=1;j<=9;k++)
for(i=1,i<=10-j;i++)
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf("the storden numbers :\n")
for(i=1;i<11;i++)
printf("%d",&a[i]);
}
1、这题里的i,j分别控制什么量,代表什么意思?
2、数组中只有10个数字,为什么要定义11个
3、for(i=1;i<11;i++)出现了三次,每次都是什么意思?

1 i,j 都是用来限制循环次数的
2 这个不一定的 看个人的习惯 可以用a[0]到a[9],a[1]到a[10]表示
3
#include<stdio.h>
main()
int a[11]
int i,j,t;
printf("\n");
printf("input 10 numbers :\n");
for(i=1;i<11;i++) /* 控制输入的个数*/
scanf("%d",&a[i]);
printf("\n");
for(j=1;j<=9;k++)
for(i=1,i<=10-j;i++) /* 控制比较的数*/
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf("the storden numbers :\n")
for(i=1;i<11;i++) /* 控制输出的数*/
printf("%d",&a[i]);
}

第一个i是控制你的输入数字的个数的,你看你执行了scan函数,这样你就可以在10次的循环中输入10个数字了,关于循环次数的计算是:(如果条件是<)
循环次数=|终值-初值|/步长,本题中初值为1。终值为11,他们的差的绝对值就是10,步长是1(因为i++,相当于i=i+1;)所以结果为10,但是如果条件是
i<=11.那么结果就和i <12是一样的,你可以自己算算,然后第一个j和第2个i他们共同完成了冒泡法的排序功能,冒泡法的实质就是比较相邻两个数的大小,然后把较大(小)的一个数向后(前)冒出,这样达到排序的目的,举一个简单的例子,5个数字吧,从小到大排:
第一次:9 0 4 6 3
第二次:0 9 4 6 3
第三次:0 4 9 6 3
第四次:0 4 6 9 3
第五次:0 4 6 3 9<这样这个9就冒出了,然后再去把0冒出,当然这个例子就不用了,这里只是进行了一个数字的冒泡,也就是j=1的过程,你看看这样是不是没有完,所以你还要对0,4,6,3分别进行冒泡,多以才会有j<=9(小例子中就要是j<=4了),至于为什么不是10,那是因为数组的下标识从0开始的,所以长度为10的数组实际上是a0,a1,a2....a9,明白吗?
当然最后的一个i就很明显了,你不是有十个数据吗,而且是用数组存储的,你要想显示出来当然要这样用以个循环,循环10次,不过,你写的这个例子对于数组的使用还是有一点点问题的,最好从0开始使用,还是好好看看教材比较好。希望我的答案你能满意

这是一个冒泡排序算法

这个程序是排序程序。