你好,可以请问你一个C语言问题吗

以下程序段运行后的输出结果是( )。
int x=4;
do
{ printf("%d ", x-- );
}while(!(x-=3));
A、42095
B、3 0
C、死循环
D、4 0

这道题可以给我解释一下吗

x--的意思是先使用x,然后x=x-1。放在这道题中就是

printf("%d ", x);
x--;

所以输出了一个4,然后x自减为3。

程序运行到了 while(!(x-=3)); 这一行。循环条件中的 x-=3 即 x=x-3 即 x=0 ,该表达式变成 while(!0),所以循环继续。

第二次循环,输出0,x自减为-1,同上述步骤进入循环条件 while(!(-4)) ,非任何非零值均为0,所以 while(0),循环终止。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-01-02
D、4 0
0 为假,非0(无论正,负,只要不是0)为真。
int x=4;
do { printf("%d ", x-- ); }while(!(x-=3));
后缀减,可写成: do { printf("%d ", x ); x=x-1; } while(!(x-=3));
第一次打印 4; x 变 3; while 里,x-=3 得0,!0 为真继续,
第二次打印 0; x 变 -1; while 里,x-=3 得-4, -4为真, !(真) 为假, 结束循环。
第2个回答  2018-01-02
答案是D吧。

do...while会保证至少一次循环。第一次循环里,x--是后操作符,在打印时x还是4 。在打印完之后才会执行--,到while的条件时,x为3 。x-=3有小括号提高了优先级会先进行计算,结果为x=0了。此时为false,然后对false进行了取反操作成了true,进入第二次循环,打印出0。然后x变为-1,再在while条件里x变为了-4,此时取反后为false。循环终止。
第3个回答  2018-01-02
x初始值为4.
第一次循环, 输出x--, 先取值, 输出4, x自减为3.
然后执行循环判断. x-=3, x值为0. !x=1, 继续循环.
第二次循环, 一样先取值, 输出0, x自减为-1.
执行循环判断, x-=3, x=-4 !x=0, 退出循环.
输出为4 0
选 D追问

!x 是什么意思呢

追答

逻辑非运算

来自:求助得到的回答本回答被提问者采纳
第3个回答  2018-01-02
D
do
{ printf("%d ", x-- );
}while(!(x-=3));
x=4;
printf("%d ", x-- )----->>x=4-------printf(4)
x-- ------------------->>x=4-1=3----------x=3;
while(!(x-=3));--------->>x-=3------>x=0---->while(!0)---->while(true)
printf("%d ", x-- )----->>x=0-------printf(0);
x-- ------------------->>x=0-1=-1;
while(!(x-=3));--------->>x-=3------>x=-4---->while(!-4)---->while(false)
相似回答