1. 首页 > 科技

a=b=c=1时++a||++b&&++c和++a&&++b||++c,++a&&++b&&++c的区别是啥?a、b、c的值又分别是多少???

a=b=c=1时++a||++b&&++c和++a&&++b||++c,++a&&++b&&++c的区别是啥?a、b、c的值又分别是多少???

张老师在一次“探究性学习”课中,设计了如下数表:(1)求出a= _________ ,b= _________ ,c= ___

解:(1)由题意有:n 2 ﹣1,2n,n 2 +1;

(2)猜想为:以a,b,c为边的三角形是直角三角形.

证明:∵a=n 2 ﹣1,b=2n;c=n 2 +1

∴a 2 +b 2 =(n 2 ﹣1)2+(2n) 2 +1+4n 2 =n 4 +2n 2 +1=(n 2 +1) 2 而c 2 =(n 2 +1) 2

∴根据勾股定理的逆定理可知以a,b,c为边的三角形是直角三角形.

已知:a=b=c=1且a,b,c均为int型变量,执行以下语句:++a||++b&&++c;则变量a的值是多少,b的是多少,

1).首先我们来看运算的优先级:a:在这三个运算符中优先级的顺序是++第一,

为单目运算符,结合方式是从右向左;

b:第二个就是区分&&和||了,他们都是双目运算符,

结合方式是从左向右,但是&&的

优先级要高于||;

2).虽然这三个运算符是有优先级的,但是在特殊情况下还不是按其优先级来算的,比如你提问的这题就是典型的例子,会出现短路现象。

3). ++a||++b&&++c;中先划分为两个部分++a一部分, ++b&&++c为 一部分,即可看成是(++a)||(++b&&++c)先算左边++a,a从1加到2 ;左边逻辑值就是1了,就不需要往下运算了,那么b,c的值就会不变仍然为1.这就是我提到的短路现象。

4).所以最后的结果就是a=2,b=1,c=1;

5)代码如下

#include<stdio.h>

main()

{int a,b,c;

a=b=c=1;

if(++a||++b&&++c)

printf("%d,%d,%d\n",a,b,c);

}

6).你可以结合我所说的,在TC或者VC下调试一下;可惜我等级不够,要不然把结果图片也放上去,就这样吧。祝你好运!

C语言中,a=b=c具体是什么意思?

1. 赋值语句本身也是一个表达式,也是有返回值的,它的返回值就是赋值给变量的值,比如b = 1 这个语句,会把1赋值给b,但是它本身也是个表达式,这个表达式的返回值为1。

2. 赋值语句是先算等号右边的值,把右边的值赋值给左边的变量

明白这两点以后,分析一下 a = b = c,按照赋值语句的运算方式,这个语句按照下面步骤:

1. 给 a 赋值,这时候要计算右边的表达式,也就是 b = c

2. 右边的表达式 b = c 是一个赋值语句,先值 b 赋值,b = 1,然后返回这个表达式的值,也就是1

3. 把 1 赋值给 a,返回 a = 1 的值,也就是1。因为代码没有用到这个表达式的返回值,所以被丢弃了。

总结起来一句话,把 c 赋值给 b,返回 b,把返回的 b 赋值给 a,返回 a。最后的结果就是 b = 1, a = 1。

执行以下语句后a,b,c的值分别为( ). int a,b,c; a=b=c=1; --a||--b&&c++;

--$a|| --$b && $c++; 逻辑运算符从左向右,

--的运算级别高于逻辑运算

--$a|| --$b已经为假了,后面就不用再计算了肯定是假