主题:一个冒泡法的程序,小弟不是很明白,希望各位大虾指教!!!!谢谢!!
geshenyi
[专家分:670] 发布于 2005-08-21 12:38:00
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 楼
VictoryGuan [专家分:100] 发布于 2005-08-23 09:02:00
本程序使用 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 楼
某奥 [专家分:0] 发布于 2005-08-23 12:56:00
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
其实C里有没一些现成的交换两个值的函数啊?这样用一个t中间变量好麻烦。。
13 楼
YJFOX [专家分:4430] 发布于 2005-08-23 15:11:00
嫌麻烦别学C
不过确实有一个不用第3方变量的方法来实现a和b的转换,当然也不是楼上说的什么函数
是二级考试辅导书上的,看你够不够聪明了
就a和b两个已经赋值的变量
不用别的任何变量,3个语句实现a和b的值互换
14 楼
zhouxingyun [专家分:40] 发布于 2005-08-23 18:56:00
for(j=1;j<=9;j++) //(这句for是什么意思????)
这里是循环9次,
for(i=1;i<=10-j;i++) //(这句呢,还有为什么是i<=10-j????)
因为你已经将大的数字放在后面了,所以后面的数就不用在排序了,
15 楼
zhouxingyun [专家分:40] 发布于 2005-08-23 18:57:00
for(j=1;j<=9;j++) //(这句for是什么意思????)
这里是循环9次,
for(i=1;i<=10-j;i++) //(这句呢,还有为什么是i<=10-j????)
因为你已经将大的数字放在后面了,所以后面的数就不用在排序了,
16 楼
zhouxingyun [专家分:40] 发布于 2005-08-23 18:58:00
for(j=1;j<=9;j++) //(这句for是什么意思????)
这里是循环9次,
for(i=1;i<=10-j;i++) //(这句呢,还有为什么是i<=10-j????)
因为你已经将大的数字放在后面了,所以后面的数就不用在排序了,
17 楼
zhouxingyun [专家分:40] 发布于 2005-08-23 18:58:00
for(j=1;j<=9;j++) //(这句for是什么意思????)
这里是循环9次,
for(i=1;i<=10-j;i++) //(这句呢,还有为什么是i<=10-j????)
因为你已经将大的数字放在后面了,所以后面的数就不用在排序了,
18 楼
blueboy307 [专家分:110] 发布于 2005-08-27 08:15:00
yjfox和zhouxingyun正确,
for(j=1;j<=9;j++)是为了i<=10-j而设的。
19 楼
maozigogo [专家分:260] 发布于 2005-09-26 23:55:00
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 楼
chenligeng [专家分:0] 发布于 2005-09-27 22:44:00
我知道啊
我来回复