int a=0,b=1,c=1,d;执行语句d=--a‖++b&&--c.求a,b,c,d的值

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/06 16:15:02
int a=0,b=1,c=1,d;执行语句d=--a‖++b&&--c.求a,b,c,d的值

int a=0,b=1,c=1,d;执行语句d=--a‖++b&&--c.求a,b,c,d的值
int a=0,b=1,c=1,d;执行语句d=--a‖++b&&--c.求a,b,c,d的值

int a=0,b=1,c=1,d;执行语句d=--a‖++b&&--c.求a,b,c,d的值
运行结果是:-1,1,1,1
楼上的,在式子中,--a || ++ b && --c; 这是一个布尔条件测试算式,只能是真(1)或假(0)
你可能认为如下是正确的:
布尔条件完整测试式子作如下运算:
&& 运算高于 || 运算,于是,测试 ++b && --c
++b = 2, -- c = 0 --> b = 2, c = 0
2 && 0 逻辑运算为= 假 ( 0 )
再测试 --a || 0: --a = -1, -1 || 0 = 真(1) , d = 真 (1)
于是最后结果是: -1, 2, 0, 1
但不是这样的!C 语言编译器优化了代码!
所以实际上在测试这样的逻辑算式时,如果有类似 A || B 的式子,那么实际上只测试一个就可以认定结果为真了.就只测试A,一旦A 为真,就不再计算B 了.
所以,实际上的程序运行中的计算过程是:
--a || ( ++b && --c ) 这个式子,最左边的 --a 先被计算,--a = -1,
由于它右边是或的关系(||)而且a 不为 0,因此,程序不再计算,直接赋值给 d.b 和 c都不曾改变过.
所以最终结果:-1, 1, 1, 1,
PS:楼主 这个是c语言啊. 这种事情对于所有的C 编译器(只要是有名的)都会优化成逻辑测试过程,以避免浪费时间.

int a=0,b=1,c=1,d;执行语句d=--a‖++b&&--c.求a,b,c,d的值 对于for(int Count=1;Count,5;){;},其循环体执行情况是?A 至少执行一次B 死循环C 至少执行二次D 不执行 c++问题1.有以下程序段 int k=0 while(k=1)k++;循环执行的次数是A) 无限次B) 有语法错,不能执行C) 一次也不执行D) 执行1次这是为什么呢 若有int a=8,b=5;语句printf(“%d”,a>b);的执行结果是( ) A.0 B.1 C.5 D.8 设有定义:int a=15; 则执行语句:a/=a+a; 后a的值是(__A___)A) 0B) 1C) 0.5 D) 16 C语言 、若有定义:int a=8,b=5,c; 执行语句c = a/b+0.4 ;后,c的值为( ).A) 1.4 B) 1 C) 2.0 D) 22 、以下程序中,while 循环的次数是( ).#include void main(void){ int i = 0;while (ib>a);}A) 2 B) 1 C) 0 D) 38、执行以 int a=1,b=2,c; c=a>b?a:b; 执行后c的值为 int a=1 ,b=1 ;执行c=++a||++b a,b,c 的值? 说明语句int a=-1,b=2,c=0,d=7 则执行下面赋值语句以后X的值为( )X=a>b?c++; c>d?a-;++b 关于C语言中优先级及括号的问题#include int main(void){int a = 1;int b = 10;a = a + b - (b = a);printf(a = %d b = %d ,a,b);return 0;}这样能实现2个数的交换,那么在语句a = a + b - (b = a)这个语句中执行顺序该怎 int a=1,b=2,c; c=1.0/b*a; 执行后,c值是多少 6、阅读下列程序段,其执行结果为( ) #include void fun(int a) { int x = 5; x += a++; printf(%d,x); } int main() { int a = 3,x = 1; fun(a); x += a++; printf(%d ,x); return 0; } A.82 B.83 C.84 D.85 int k=10 while k>0 k=k+1 A.while循环执行多次 B.循环是无限循环 C.循环体语句一次也不执行 a||(b=c)执行后b的值为0 这句话怎么错了呀如果int a=2,b=3,c=0,下列描述正确的是( B ).A、a&&b>c的结果为假 B、!=(b!=c)表达式的值为1 C、a||(b=c)执行后b的值为0 D、a>b!=c和a>(b!=c)的执行顺序是一样的 12、设有int a=1,b=2,c=3,d=4,m=1,n=1; 则执行表达式(m=ad)后,n的值为.(A)1 (B)2 (C)3 (D)0 C语言 int a;int b; }d[3] ={{1,4},{2,5},{6,7}}; printf(%d ,d[2].a* d[2].b/d[1].b);struct num{int a;int b;}d[3] ={{1,4},{2,5},{6,7}};则执行printf(%d ,d[2].a* d[2].b/d[1].b); 语句的输出结果是:().A.2B.2.5C.8D.8.4 c语言二级问题 若有程序段char c=256;int a=c;,则执行该程序后a的值是 A,256 B,65536 C,0 D,-1 关于C语言For语句下列程序执行的结果是a=1b=2;c=3;while(b<a<c){t=a;a=b;b=t;c--}printf("%d,%d,%d",a,b,c); 2,1,0 2.执行语句for(i=1;i++<4;);后i的值 为什么是5?3.若 int x;则执行下列程序段后输出