一道C语言小题

[复制链接]
查看11 | 回复2 | 2011-2-4 15:59:40 | 显示全部楼层 |阅读模式
#include
main()
{
int x=3;
do
{printf("%3d",x-=2);}
while(!(--x));

}该程序怎样运行,为何结果是1
-2 ,谢谢!

回复

使用道具 举报

千问 | 2011-2-4 15:59:40 | 显示全部楼层
do-while循环退出的条件是!(--x)为false,即0.也就是--x非0.也即x非1.打印语句的显示值是x-=2也就是x=x-2。所以x=3进入循环体后,首先x-=2变成1,打印1。这是进入while判断因为是1,所以循环继续进行。但--x已经让x从1变成0.0再减2变成-2,打印-2。进入while判断发现不满足x非1的条件,循环退出。所以留在屏幕上的是1和-2。因为有%3d的显示控制,中间还会有补齐的空格。
回复

使用道具 举报

千问 | 2011-2-4 15:59:40 | 显示全部楼层
第一次x-=2;x=1结果是1:(--x)x=0;!x不是零所以循环继续执行第二次x-=2x=-1运行结果是-2--xx=-3!x为零,循环结束
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行