回 帖 发 新 帖 刷新版面

主题:一个冒泡法的程序,小弟不是很明白,希望各位大虾指教!!!!谢谢!!

main()
{
int a[11];
int i,j,t;
printf("input 10 numbers:\n");
for(i=1;i<11;i++)
scanf("%d",&a[i]);
printf("\n")
for(j=1;j<=9;j++) //(这句for是什么意思????)
for(i=1;i<=10-j;i++)   //(这句呢,还有为什么是i<=10-j????)
if(a[i]>a[i+1])
{t=a[i];
a[i]=a[i+1];
a[i+1]=t;}
printf("the numbers:\n");
for(i=1;i<11;i++)
printf("%d",a[i]);
}谢谢各位大虾指教!!!!

回复列表 (共29个回复)

11 楼

本程序使用 for循环嵌套 ;
      
for(j=1;j<=9;j++) //的语句的意思是让程序执行9次;
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;}语句的作用是把小的元素 放在数组的前面,
    这样在程序执行完后,整个数组便按 由小到大的顺序排列了.

12 楼

t=a[i];
a[i]=a[i+1];
a[i+1]=t;
其实C里有没一些现成的交换两个值的函数啊?这样用一个t中间变量好麻烦。。

13 楼

嫌麻烦别学C
不过确实有一个不用第3方变量的方法来实现a和b的转换,当然也不是楼上说的什么函数
是二级考试辅导书上的,看你够不够聪明了
就a和b两个已经赋值的变量
不用别的任何变量,3个语句实现a和b的值互换

14 楼


for(j=1;j<=9;j++) //(这句for是什么意思????)
这里是循环9次,

for(i=1;i<=10-j;i++)   //(这句呢,还有为什么是i<=10-j????)

因为你已经将大的数字放在后面了,所以后面的数就不用在排序了,

15 楼


for(j=1;j<=9;j++) //(这句for是什么意思????)
这里是循环9次,

for(i=1;i<=10-j;i++)   //(这句呢,还有为什么是i<=10-j????)

因为你已经将大的数字放在后面了,所以后面的数就不用在排序了,

16 楼

for(j=1;j<=9;j++) //(这句for是什么意思????)
这里是循环9次,

for(i=1;i<=10-j;i++)   //(这句呢,还有为什么是i<=10-j????)

因为你已经将大的数字放在后面了,所以后面的数就不用在排序了,

17 楼

for(j=1;j<=9;j++) //(这句for是什么意思????)
这里是循环9次,

for(i=1;i<=10-j;i++)   //(这句呢,还有为什么是i<=10-j????)

因为你已经将大的数字放在后面了,所以后面的数就不用在排序了,

18 楼

yjfox和zhouxingyun正确,
for(j=1;j<=9;j++)是为了i<=10-j而设的。

19 楼

main()
{
int a[11];
int i,j,t;
printf("input 10 numbers:\n");
for(i=1;i<11;i++)
scanf("%d",&a[i]);
printf("\n")
for(j=1;j<=9;j++) //(这句for是什么意思????)/*换个角度思考,就是这个for控制 循环的次数,每次冒一个泡起来*/
for(i=1;i<=10-j;i++)   //(这句呢,还有为什么是i<=10-j????)/*执行了j次循环之后已经有j个冒出来了,不用比了*/
if(a[i]>a[i+1])
{t=a[i];
a[i]=a[i+1];
a[i+1]=t;}
printf("the numbers:\n");
for(i=1;i<11;i++)
printf("%d",a[i]);
}

20 楼

我知道啊

我来回复

您尚未登录,请登录后再回复。点此登录或注册