C语言第7题,为什么结果是23

如题所述

首先,初始化int变量x值为23。

然后,进入do-while循环,首先执行一次循环体中的语句:
printf("%d", x--);
因为自减运算符在变量x后面,所以x的值是在参与一次执行后减少,这里是在被以%d带符号10进制整数形式输出之后减少。所以输出的结果是23原来的值,输出之后,x的值立即自减1变为22。
随后执行while的条件语句:
while (!x)
这句代码表示当!x不等于0,即当x等于0时,进行下一次迭代,否则结束这个do-while循环。因为这里x的值是22,所以!x之后是0,所以do-while循环结束。

main函数结束。追问

那结果该是22啊!

为什么是23

追答

!,逻辑非运算符
当操作数x为一个非0数值,!x返回0,表示假。
当操作数x为0,!x返回1,表示真。

因为x--自减运算符在后面,先输出原来的值23,之后才把x值减1变成22进行条件判断。

如果自减运算符在变量前面:--x,那么程序会先把x值自减变成22,再将它输出,这个时候输出才是22。

追问

x--,怎样才算之后,才为22

追答

printf语句执行完x的值就变成22了,再进去条件判断 !x 就相当于 !22

看这两句代码:
int a = 3, b;
b = a++;

你觉得最后b的值是多少?

不要写程序,直接说。

追问

b=4

x- -后面有个分号,就算判断为假,输出怎么还是23

追答

首先,你要记住自增运算符++和自减运算符--放在变量之前和变量之后的效果是不一样的,即a++和++a两个表达式很多时候作用不一样。

在赋值语句 b = a++;中,由于自增运算符++在a后面,可以说它的作用是让a以原来的值参与完某个其他运算之后再自增1,这个例子里的"其他运算"就是指赋值运算。这里先让a以原来的值3参与赋值运算,把a的值赋给b,所以b的值是3,赋完值以后,a的值才自增1变为4,也就是说,这个赋值语句结束后,a的值为4,b的值为3。

相反,如果这个例子里的自增运算符在变量a前面,赋值语句就是:b = ++a; 它的作用就是让a的值先自增1,然后再以这个新的值参与"其他运算"。这个例子里:++a让a先自增为4,然后参与赋值运算把新的值赋给b,这时候b的值才是4。

do-while循环与for循环以及while循环不同,程序在进入do-while循环时,会无条件执行一次循环体,之后才是判断条件符不符合,所以这个程序是先执行一次循环体中的语句:printf()输出x的值,之后才是判断条件。do-while循环是典型的直到型循环。其他两个循环是先判断条件再决定是否执行循环体,都是当型循环。

温馨提示:内容为网友见解,仅供参考
第1个回答  2016-12-01
这题关键看while后面的条件,
!x 是一个逻辑语句,
就是说当x不为0时,!x为0;
如果你认识'!=',那么这个也同样可以这么理解,!即为非的意思。
在条件语句中主要看结果是否为1(真)或0(假);

在do-while循环中,无论条件成不成,都已经输出了一个值,在判断条件中为0,循环无法继续,则,最终只输出了一个23.
第2个回答  2016-12-01
x--是先使用x,再对x进行减1。如果是--x,则先对x减1,再使用追答

这里代码就是先输出x的值,再对x减1

第3个回答  2016-12-01
do只执行一次,while条件为假,23为真,!23为假追问

为什么为假就是23,x--执行后为22

追答

c语言里面非零都是真,

C语言第7题,为什么结果是23
因为自减运算符在变量x后面,所以x的值是在参与一次执行后减少,这里是在被以%d带符号10进制整数形式输出之后减少。所以输出的结果是23原来的值,输出之后,x的值立即自减1变为22。随后执行while的条件语句:while (!x)这句代码表示当!x不等于0,即当x等于0时,进行下一次迭代,否则结束这个do-whil...

c语言 请大神帮忙看看 解释一下 7 9 11三个题目 谢谢
而a是不大于b的所以这个不执行 所以结果是10 50 10 第九题 b和d你都没选我就不说了 c switch中x是float类型数据c语言中这里是不能使用float数据的(为什么?这是gui定)第十一题 第一次执行switch时k为5 执行default n=0,k=4,没有遇到跳转之类的继续向下执行 n+=2 n=2 k=3 所以第一...

C语言读程序问题?
在c语言中。0开头的整型常量是指的八进制。027就是2x8+7,所以答案选c。

c语言函数问题,求结果
答案是22 调用函数fun时,先计算fun(--x,--y); 再计算fun(x++,y++)前缀 -- (或++):是先减(加)1后再将其结果代入运算 后缀 ++ (或--):是先代入数据后在对其进行加(减)1运算 故而 第一步:计算fun(--x,--y)时实际上代入的值为 fun(5,6) == 11; 即先将x和y减1...

c语言第7题
d的值为1 a>b>c 因为运算符>结合性是从左到右,所以先计算a>b的值,a比b大,所以值a>b的值为1,然后计算1>c的值,因为1比3小,所以结果为0,所以a>b>c的值为0.d=0;

C语言从键盘输入再输出结果
于是i=20 第二个是%*d 含义是忽略接下来一个整型输入。 于是20被忽略。第三个 %d对应&j 于是j=30 &k没有对应,于是不会改变值,仍为0 输出Ijk也就是10 30 0 7 输出 S(i+j)=4*i+j*i+j+1 =4*6+8*6+8+1 =24+48+9 =81 输出为81 8 判断条件不全。无法计算。

c语言,第7题,分析一下
D 用转义字符\\后面跟102时,说明这时候是八进制数,102(八进制)=66(十进制)所以输出ASCII为66的字符"B"

C语言自增自减问题 为什么q的结果是22呢
1.首先递增操作放在前面,是用的计算后结果,比如只有一个的时候,其实值是6,这个没问题吧。2.有问题的事两个的时候,两个加在一起,按理说会觉得是13,前面的6,后面的7,但是实际上不是,这是因为加法操作符是先算完两个部分,然后根据当时的值来算的,也就是说如果只有两个表达式想加,结...

[c语言题目]第7题,为什么定义的2d,但是输出的结果却是三位的,前面的2...
2d是将数字按宽度为2,采用右对齐方式输出,若数据位数不到2位,则左边补空格。而不是指输出只能2位数的意思,你理解错了

c语言选择题,要过程,详细
第一题:D 第一次s+=a++就是s=s+(a++)=0+5=5,然后a自加1变为6,第二个 s+=a++就变成了s=5+6=11,a自加过后变成了7;第二题:B do while循环最少都要执行一次循环,先执行do里面的循环体,所以x--=23,x=22,!x=0,退出循环 第三题:D 进入for循环,x=10,i=0,x>8为...

相似回答