中国红十字会领导班子:帮我看看这个题!

来源:百度文库 编辑:神马品牌网 时间:2024/05/04 21:50:40
#include <stdio.h>
main()
{
int n[10];
int i,j,tmp;
printf("Please 10 numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&n[i]);
printf("Origin numbers:\n");
for(i=0;i<10;i++)
printf("%2d",n[i]);
printf("\n");
i=0;
j=9;
while(i<j)
{
tmp=n[i];
n[i]=n[j];
n[j]=tmp;
i++;
j--;
}
printf("Reversing numbers:\n");
i=0;
while(i<10)
{
printf("%2d",n[i]);
i++;
}
getch();
}
这里的while里的语句为什么是:i<j;下面不是有:i++;j--;了吗,当i自加到4,j自减到5的时候,若i在自加一次,j在自减速一次,i不是大于j了吗,为什么while里的语句还能执行。而我改成:i<10&&j>=0为什么不行呢?帮帮忙啊!在线等!
当i>j不执行的时候,不是才交换了5个数吗,那后面5个又是怎么交换的?

你这是排序吧!
你理解错了,他这种是快速排序,
是拿前后两个数同时比较,
不是拿第一个数依次与后面的数比较,
你再好好想想,当i>j的时候,那条while语句不会执行了,
不信你单步运行一下,在tubor c里,按F7是单步运行

这是一个把一组数反转的问题,在while循环是先判断i<j,再执行循环体,最后再循环体里面使i,j自增,自减,当I自增至4时,J自减到5时仍执行一次自循环体,再以后I为5,而J为4则I>J,不再执行,退出循环。当你改了以后相当于是反过去再反过来了。