C语言,计算机软件基础问题?
x=1;y=0;z=2;
y++&&++z||++x;
我看试卷答案是2,1,2 其中不解的是为什么++z的z为什么还是2而不是3? 展开
这就要说c++的特性了
1&&1和1&&0
执行语句1和语句2
0&&1和0&&0
只执行语句1(特性,都是特性)
因为语句1是0,语句2不管是1还是0,结果都是0
0||1和0||0
执行语句1和语句2
1||0和1||1
只执行语句1(特性,都是特性)
因为语句1是1,语句2不管是1还是0,结果都是1
此题还有一点!
++y
先将y+=1;再使用y
y++
先使用y,再将y+=1;
课余答题:
int a=0;
a+=!(a++&&++a);
cout<<a;
选择(输出的答案):
A.0 B.1 C.2 D.3
(答案见下(请先在心里想好再看))
答案:
C
解析:
int a=0;//定义变量a,并将1赋值给a
a+=!(a++&&++a);//结果:a+=!(0(运行后a+=1)&&1(a+=1)(不执行));
a+=!(0(0&&1))
a+=1;
因为a++所以a最后再+1
cout<<a;//输出a的值(2)
y++&&++z||++x;
从左到右执行
y++是先把y用完再自加
++x是加完再用
左&&右 是找0,从左到右,左边是0,就不看右边了
左||右 是找1,从左到右,左边是1,就不看右边了
综合
1、y&&++z 与运算,因为y是0,++z不会运行了, y&&++z整体是0
2、y用完自加,y变1
3、0||++x ,或运算,上一步整体为0,也就是左边为0,还要看右边,x还要自加
可追问,望采纳
当它执行y++&&++z后,因为先取y的值0后再y自加,++z的值是3,所以这一部分的值为0,所以需要再执行后面的||++z,z变为3,试卷答案是2,1,2,这是不对的,应当是2,1,3才对。