当前位置: 代码迷 >> C语言 >> [求助]请问这两个小程序为什么有这样的运行结果?
  详细解决方案

[求助]请问这两个小程序为什么有这样的运行结果?

热度:127   发布时间:2007-01-06 11:03:47.0
[求助]请问这两个小程序为什么有这样的运行结果?

/* Note:Your choice is C IDE */
#include "stdio.h"
main()
{
int x=2;
while(x--);
printf("%d\n",x);

}
结果-1






/* Note:Your choice is C IDE */
#include "stdio.h"
main()
{
int k,n,m;
n=10;m=1;k=1;
while(k++<=n)
m*=2;
printf("%d\n",m);

}

结果1024

搜索更多相关的解决方案: 运行  结果  

----------------解决方案--------------------------------------------------------
第一个:
main()
{
int x=2; //x的初始值为2
while(x--);
/*注意,这个while后有个分号,即表明,这个while循环体是空语句,这里检查x,逻辑表达式中,c语言认为非0就是真,所以,x一直递减,当x=0时,退出这个while循环,此时由于x--是后减操作,所以x继续减1,最后得到-1*/
printf("%d\n",x);

}

程序步骤
次数 x while判断 x的操作
1 2 true x--
2 1 true x--
3 0 false x--
4 -1 打印x


第二个:
/* Note:Your choice is C IDE */
#include "stdio.h"
main()
{
int k,n,m;
n=10;m=1;k=1;
while(k++<=n) //k++是后加操作,所以这个循环一共执行10次,相当于for(k=1;k<=n;k++),最后就是2^10
m*=2;
printf("%d\n",m);

}


----------------解决方案--------------------------------------------------------
以下是引用kaid在2007-1-6 11:03:47的发言:

/* Note:Your choice is C IDE */
#include "stdio.h"
main()
{
int x=2;
while(x--); /*相当于while(x) x--;*/
printf("%d\n",x);

}
结果-1






/* Note:Your choice is C IDE */
#include "stdio.h"
main()
{
int k,n,m;
n=10;m=1;k=1;
while(k++<=n) /*同上,这两行代码相当于while(k<=n){k++;m*=2;}*/
m*=2;
printf("%d\n",m);

}

结果1024


----------------解决方案--------------------------------------------------------
haha,原来加了个分号就变成了空语句,不为零就变成了真,看来2进制的机器还是挺兼容23456。。的吧~~

感谢各位这么迅速就作出了有效的解释
----------------解决方案--------------------------------------------------------
没有必要分析的这么详细
----------------解决方案--------------------------------------------------------
2楼真详细...
----------------解决方案--------------------------------------------------------
精神可嘉
----------------解决方案--------------------------------------------------------
还是有些不明白,k跟m有什么关系呢,k自加,但变量m不一直没有变化吗?那k跟m又没关系,怎么会出现结果1024的呢,还望帮助!
----------------解决方案--------------------------------------------------------

m*=2表示m自乘2所得值赋予m,即m=m*2


----------------解决方案--------------------------------------------------------
楼上说的没错,但k跟m有什么关系呢,为何结果是1024,能不能把过程说一下?
----------------解决方案--------------------------------------------------------
  相关解决方案