又来一道C语言题

来源:百度知道 编辑:UC知道 时间:2024/09/24 23:21:12
main ()
{ int x=3;
do
printf("%d,",x-=2); while(!(- - x));
}
答案第一个是一 可是为什么 还有一个-2
还有-(-x)是什么意思

main()
{
int x=3; //定义一个变量x,将其赋值为3
do
printf("%d,",x-=2);
/* 先执行一次输出语句,输出x, x-=2相当于x=x-2,输出结果是:1,x的值变为1
第二次执行,输出x的值为 -2;
*/
while(!(--x));
/*
第一次判断:!表示非,--x相当于x=x-1;这时x变为0,!(x)就等于1,继续执行 do 后面的语句;
第二次判断:此时x的值为-2;计算完之后x=-3;!(x)就等于0;退出while循环.
*/
}
输出结果为:1 -2

3-2 = 1

(- -x) 这个不是自减 -(-x)

执行一次

结果为1

这个程序根本运行不了

先是x = x- 2;显示1
然后while 判断在把x 减一变成0了,而循环的条件是!(--x)即!0满足条件再执行一次,x = 0 - 2 = -2了
最后在判断x变-3了,非x就是0,循环结束

执行过程:
x-=2 //这时x变成1
printf(%d,1) //输出变成1的x
while(!(--x)) //判断条件是否成立。。
//判断之前x已经变成1,这时先执行--x让x变成0
//在while(!0) 所以循环会再次执行一遍
//关键就在于--x是先使x减1 然后在执行判断.
//我试了一下 - -x 这样就是-(-x) 如楼上所说