C语言 求解答

如题所述

【第一行】:
x=1,y=1,z=1;
if((x=2)&&(y=2)&&(z=2))
首先,x=2是赋值,执行后x==2,并且此等式的值为2,所以if (x=2)的结果是true。

其次,按照if的判断规则,遇到a&&b&&c这样的判断,当a为true后,会进行b的判断,如果b也为true,就继续进行c的判断。所以这一行会依次进行x=2,y=2,z=2的赋值并且总的判断结果是true (true&&true&&true),结果打印出222。

【第二行】:
一样的,先进行x=0的赋值和判断。赋值后x的值为零。但是由于x=0这个等式的值为0即false,所以此处(x=0)&&(y=2)&&(z=2)总的结果也为false,并且后面的y=2和z=2的赋值并不进行,因为第一项为false了,后两项就不进行判断了(效率上的优化),无论后两项是true还是false,总的结果都是false。所以此时x==0,y==1,z==1,但是不会打印。

【第三行】:
一样的,先进行x=2的赋值和判断,结果为true,此时x==2。
但是注意此时是if(a||b||c)这样形式的判断,如果a是true了,无论后两项结果是什么,总的结果都是true,后两项就 不进行赋值和判断了(效率上的优化)。所以此时x==2,y==1,z==1。
打印出211。

【第四行】:
先进行x=0的赋值和判断,此时x==0,(x=0)的结果是false,所以需要继续进行y=2的赋值和判断。此时y==2,并且(y=2)的值为true。
此时总的结果是false||true||?,为true,第三项不需要进行赋值和判断了(效率上的优化)。

打印出此时xyz的值021

【第五行】:
先进行x=0的赋值和判断,此时x==0,(x=0)的结果是false,所以(x=0)&&(y=2)的结果就是false了,y=2这一步不进行赋值和判断了(效率上的优化),y的值仍旧为1。
因为(x=0)&&(y=2)的结果是false,所以需要进行和它相或的z=2的赋值和判断,此时z==2,并且(z=2)的值为true,总的结果是(false&&?||true),为true。
打印出此时xyz的值012

【总的原则】:
a&&b&&c...的时候,只要遇到false的,总的结果就是false了,后面的就不必进行了。
a||b||c...的时候,只要遇到true的,总的结果就是true了,后面的就不必进行了。
这题考的就是这种提高效率的机制。

以上,未理解的话可以继续追问。
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-11-22
看影子像妹子。。。拍反光了你

看影子像妹子。。。拍反光了你

&& 从左往右,如果左边为假,表达式返回假,且不再计算后面的

|| 从左往右,如果左边为真,表达式返回真,且不再计算后面的

第一个
x=2,表达式值2非零为真,继续,y=2表达式值2非零为真,继续,z=2表达式值2非零,结束判断,if表达式为真,此时x:2 y:2 z:2,输出 222,

第二个
x=0,表达式值0为零为假,不再继续,结束判断,if表达式为假,此时x:0 y:1 z:1,不输出,
第三个
x=2,表达式值为2非零为真,不再继续,结束判断,if表达式为真,此时x:2 y:1 z:1,输出211

第四个
x=0,表达式值为0为零为假,继续,y=2表达式值为2非零为真,不再继续,结束判断,if表达式为真,此时x:0,y:2,z:1,输出021

第五个
要换着方式理解下&&优先级高于||,if表达式修改下就是if( ((x=0)&&(y=2)) || (z=2) )

x=0,表达式值0为零为假,&&表达式结束计算,|| 表达式左边计算结果为假,继续,z=2,表达式值为2非零为真,||表达式为 0||1,为真,if表达式为真,此时x:0,y:1,z:2,输出012
第2个回答  2014-11-22
直接用电脑截图多省事,难道电脑没联网?
1)x=2赋值表达式的计算结果就是2,当这个表达式出现在if语句逻辑表达式位置上的时候,它的计算结果是被当作逻辑值处理的,在C语言中用整型数表示逻辑量,非零表示“真”,所以这是一个永真式;这个if的逻辑条件永远不会为假。
也就是说,这里所表达的逻辑条件并不是“a的内容是否等于2”,而是向变量x中送入数据2。
所以x、y、z的值在每次打印前都被判断语句改变了一次。
2)x=2作为判断条件,等于if(2),故if(x=0)就是if(0)。
3)||号在判断前面的值为0后,后面的内容就不知行了。
3)鉴于是个妹子,那多说两句,郝斌C语言视频教程是我看过的最好的C语言入门视频,看过后你能省好多时间和精力。本回答被网友采纳
第3个回答  2014-11-22
第一条if((x=2)&&(y=2)&&(z=2)),由于()的运算优先级高于&&,所以先算x=2,y=2,z=2这三个赋值表达式,即此时x的值为2,y的值为2,z的值为2,这三个表达式的结果都非0,因此if语句成立,执行后面的printf语句,输出222。
第二条if语句由于x=0语句使得if的条件为0,不执行。
第三条if,由于x=2,即x非0,||运算中只要有一个非零就成立,并且不会再去计算后面的表达式,所以y和z未被重新赋值,即x=2,y=1,z=1,输出211。
剩下的分析方法类似,主要是注意&&和||运算的优先级以及它们运算时的特点,当&&中有一个式子=0,系统就不会再往下计算,这个表达式就为假;当||中有一个式子非0,系统不会继续计算,该表达式为真
第4个回答  2014-11-22
注意== 和 =
&& 全真则真 遇到0,后面不用看了
|| 一真则真 遇到1,后面不用看了

C语言 求解答
【第一行】:x=1,y=1,z=1;if((x=2)&&(y=2)&&(z=2))首先,x=2是赋值,执行后x==2,并且此等式的值为2,所以if (x=2)的结果是true。其次,按照if的判断规则,遇到a&&b&&c这样的判断,当a为true后,会进行b的判断,如果b也为true,就继续进行c的判断。所以这一行会依次进行x=2...

C语言菜鸟求高手解答...
1. 第一个问题似乎是一个关于C语言条件判断的疑问。你需要明确表达你的问题,以便得到具体的解答。2. 在C语言中,`m++` 表示先使用变量 `m` 的值,然后将 `m` 的值加1。所以,表达式 `m++ > 5` 首先将 `m` 的值(初始为5)用于比较,然后 `m` 自增。3. 由于 `m` 的初始值是5,...

C语言入门题目,求详细易懂的解答过程。
答案为第一行:Tony。解答:for循环共循环2次,然后strcpy(a,b)比较两串字符大小,如果strcpy值大于0,则a大于b。具体的比较是看字符串的字母的ASCII码的大小,如果相同,再继续比较第二个,这个不赘述。主要看一下name[],对于一维数组来讲,它是元素,对于二维数组来讲,它不是具体的元素,而是代...

C语言编程作业,求解答
作业1:result(int)= c (char) * i (int) + f (float) \/ d (double) -(f + i);第一步:f+i, 一个float和int相加,按精度高的float进行计算,结果为float result = char * int + float\/double - float;第二步:char * int, 他们都是整数相加为int result =int + float\/double...

C语言问题,求解答
程序运行的结果是:3+1*3+1=7 b=7 选答案D 若要改变成(3+1)*(3+1)的效果,应定义为:define ABC(x) (x)*(x)

c语言题求解答
1、因为逻辑运算是“左结合律”和“ 短路求值 ”的,另外C语言保证逻辑运算的求值顺序是从左往右的。2、第一个printf()没什么好说的,赋值如此,所以x=-1 y=-1 z=-1 3、第二个printf(),x=-1 y=0 z=0,要说明一下:++y&&++x||++z;它的运算过程先算++y它的值为0,决定了++y && ...

C语言问题,求大佬解答
图形输入整数() => 甲;如果( 甲 大于 0 ){ 和 += 甲;如果(个数 < 最大输入个数) 输入数[个数 ++] = 甲;} }直到 甲 等于 0;图形输出词语(“输入的正整数个数为:”);图形输出整数(个数,10);图形换行();平均值 = 和 除 个数;图形输出词语(“输入正整数的平均值为:...

C语言题目,求详细解答。
答案是:x=5,y=4,a=1;过程:当x=3,y=6时 执行while(x(3)++!=(y=5))a+=1; (a=1);if(y<x) break; (因为y=5,x=4,所以不成立,因此不执行)注意:这时x因为(x++)所以,x=4;继续执行while(x++(4)!=(y=4))(因为上面y通过想减已经为5了,再减一,等4,与x...

C语言问题 运行结果是多少 为什么 求详细解答
结果15 之所以容易被理解错误是由于运算符优先级的问题 解决此类问题,第一步,宏展开 k=10*MIN(i,j);即 k=10*(i)<(j)? (i):(j);第二步,根据运算符优先级、结合性判断 原式等效于 k=(10*(i))<(j)? (i):(j);二目运算符*优先级高于三目运算符? :第三步,代入值,判断...

c语言的问题,求助解答。
1. (z>=y>=x)? 1:0 z>=y就是对的,所以为1 ,然后1>=x不对,所以为0,所以整个表达式为0 2. z>=y&&y>=x z>=y对为1 ,y>=x对为1,1&&1,所以答案为1,A

相似回答