4.执行下列语句后a的值为( ),b的值为( C ). int a, b, c; a=b=c=1; ++a|| ++b &&

int a, b, c;
a=b=c=1;
++a|| ++b && ++c;
A) 错误 1     B) 2 2     C) 2 1     D) 1 1
求详解!

||的优先级高,所以++a||++b作为&&的左表达式参加运算
a的值为1,++a的结果为非零,所以||成立,忽略了++b
所以a的值被修改,b的值没有被修改
故a=2,b=1

满意请采纳,不满意请追问追问

为什么只有a的值被修改,b的没被修改?

追答

因为||对流程有控制性,
如果||的左表达式成立,就不会对他的右表达式进行计算,
在你的例子中,++a的值已经是2,是非零
那么||已经满足(有一个值是真就满足),所以这时就忽略了右表达式的计算

要仔细看看书,这个知识点,书上都会有的

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-19
    // 定义3个变量a、b、c
    int a, b, c;
    // 给3个变量赋初值,a=1 b=1 c=1
    a=b=c=1;
    // 逻辑与的优先级高于逻辑或,相当于++a || (++b && ++c)
    // 所以先判断++a是否为真,++a,前置自增后a为2,为真
    // 而此时,由于是逻辑或运算,只要有一个为真,结果就为真,已经可以判定这个表达式的值为真
    // 所以,后面括号中的表达式就不会运算,b为1,c为1
    // 这个行为通常称为“短路求值”
    ++a || ++b && ++c;

...c的值分别为( ). int a,b,c; a=b=c=1; --a||--b&&c++;
a,b,c;a=b=c=-1;++a&&++b||++c;后a,b,c值分别为 a是0 b是-1 c是0 因为 ++a&&++b||++c这个逻辑表达式 先计算&& 因为 ++a是0 所以这部分为0 ++b不执行 再计算|| ++c要计算 所以c=0

int a,b,c; a=b=c=1; 执行以下语句后,a,b,c的值分别为多少?
include <stdio.h>int main(){ int a,b,c; \/\/定义三个变量 a=b=c=1; \/\/将三个变量赋值为1 printf("Before statement 1: a=%d, b=%d, c=%d\\n", a, b, c); \/\/输出执行语句前三个变量的值 ++a||++b&&++c; \/\/执行第一个语句 printf("After statement 1: a=%d, b=%d...

c程序中输入: int a,b,c; a=b=c=1; ++a||++b&&++c; 执行后abc的值为什 ...
++a||++b&&++c是逻辑表达式,它的值只有“真”与“假”两种,常用“非零”和“零”来表示。++a||++b&&++c第一个逻辑操作符为||,它是“或”操作,就是说它两边的表达式只要有一边为“真”整个表达式的值就为真。而++a使a为2,这已为“真”了,所以整个表达式的值已经肯定为“真”了,|...

int a,b,c; a=b=c=1; ++a‖(++b &&++c);求a,b值
a\\b\\c初是1 后面的逻辑表达式本来是先算&&再算|| 但是最终还是算||,||中当左边表达式为真时就不会计算右边表达式所以只运算++a,所以结果是a=2,b=1,c=1

...int a,b,c;”,且a=b=c=1,执行if(a++||++b) c++;语句后,b的值是...
不同的地方是++在前,执行完判断先执行自加,++在后,在循环内部语句执行完后再自加,对写到题来说就是,if判断是a,b都是1,执行完后,先执行++b.在执行内部语句c++,最后执行a++,执行完后全部值都为2,b也是2 另外,在输出sprinf中,++在前或在后,都是先执行自加,在输出,...

执行下列语句后,a和b的值分别为(). int a,b; a=1+'a'; b=2+7%-4...
答案是B:98,-60 int a,b;a=1+'a'; \/\/ 字符a的ASCII是97,97加1赋值给a b=2+7%-4-'A'; \/\/字符A的ASCII是65,7除-4取余为3,加2减65为-60,再赋值给b

c语言int a,b,c.a=b=c=1. ++a||++b&&++c. 求a和b的值
结果是a=2,b=1,因为||和&&的优先级相同,||的执行规则是左边的如果为真就不再执行右边的++b,++a之后a=2,不为0,所以为真

...main() {int a,b,c; a=1;b=3;c=5; printf(“%d,%d\\n”,(++a,b++...
结果是3,10啊。这主要是由于自增操作符++前置还是后置决定的,比如说++a,就是先自增再使用,而a++就是说先使用再自增。执行printf(“%d,%d\\n”,(++a,b++),a+b+c)这条语句的过程中,a=2(就是说已经自增了),b=3(还没自增)。等这条语句执行完之后,那么a=2 b=4~...

...{ int a,b; for(a=1,b=1;a<=100;a++) { if(b>=20) break; if(b%3...
所以,答案是C

...以下语句后b的值为( )。 a=1;b=10; do { b-=a;a++;} while(b--<0...
【答案】:D 当b为10时,执行b-=a,此时b为9,接着b--表达式值为9,b的值为8,大于0,while不成立,退出循环,故选择D选项。

相似回答