浙大pta《c语言基础》经典例题-创新互联
1.表达式 !x 等价于:
创新互联公司专注于企业网络营销推广、网站重做改版、顺河网站定制设计、自适应品牌网站建设、HTML5建站、电子商务商城网站建设、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为顺河等各大城市提供网站开发制作服务。x==0
分析:
x | x==0 | !x |
非0 | 0 | 0 |
0 | 1 | 1 |
从而可以看出x==0与!x的逻辑结果是等价的
2.表达式 !!6的值是:
1
补充:逻辑量:a(非0)为真,!a=0;!!a=1
3.表达式 ~(~2<<1)的值是:
5
解析:2的二进制:10 ~2:01 ~2<<1(左移一位 一般相当于乘2)但这里没有超出机器字所表示 的位数其实是010,后取反,即得101,也就是5
补充:正常进行移位运算时一般需要转换为2进制,且补足8位,如若前面不够全部添0
4.表达式 (z=0, (x=2)||(z=1),z) 的值是:
0
补充:逗号表达式
一些特点
1、逗号表达式是C语言优先级最低的运算符。
2、逗号表达式是左结合性(即按从左到右顺序运算)的运算符。
常见表达式
//例一
#include
void main(){
int x, y, z;
o = x = 3, y = 4, z = 5;
printf("x=%d,y=%d,z=%d,o=%d\n",x,y,z,o);
}
运行结果:x=3,y=4,z=5,o=3
//例二
#include
void main(){
int x, y, z, o;
o = ( x = 3, y = 4, z = 5 );
printf("x=%d,y=%d,z=%d,o=%d\n",x,y,z,o);
}
运行结果:x=3,y=4,z=5,o=5
我们可以发现例一和例二中,变量o最终的结果是完全不同的。
我们可以先把上面两个表达式简化成👇
例一:o = 表达式1,表达式2,表达式3;
因为逗号表达式是优先级最低的表达式,赋值表达式的优先级高,所以会把表达式1的值直接赋值给o
例二:o = (表达式1,表达式2,表达式3);
括号里中的先执行,逗号表达式是左结合性,所以会从左往右依次执行,最后再把表达式3的值赋值给o
小结论:
结合以上两个例子的运行结果我们可以得出一个结论:
当没有括号时,第一个表达式为整个表达式的值。
而有括号时,依次执行后,最后一个表达式为整个表达式的值。
而且所有的表达式都依次执行了。
例题一
逗号表达式a=2*6,a*3,a+5的值为_____
逗号表达式的结果是整个表达式执行完后最后的一个值。
所以我们可以假定逗号表达式的结果为o
把这个式子看成o=(a=2*6,a*3,a+5)
a=2*6=12,此时表达式的值为12
a*3并不是一个赋值语句,此时表达式的值还是12
运算到这一步,可以看成o=(a+5)=12+5=17
该表达式的值为17
例题二
int a,表达式 (a=4*5,a+6),a++的值为_____
逗号表达式的结果是整个表达式执行完后最后的一个值。
所以我们可以假定逗号表达式的结果为o、
把这个式子看成o=((a=4*5,a+6),a++)
a=4*5=20,此时表达式的值为20
a+6并不是一个赋值语句,此时表达式的值还是20
a++是先赋值这条语句运算完后才会+1,直到这里,表达式的值为20
例题三
int a,表达式为(a=4*5,a+6),a++ 执行完后a的值为_____
这个例题是求a的值,而不是表达式的值,这里表达式2(也就是a++)中的a=a+1也是会执行的,所以a的值为21。
例题四
int x=5,y=8,z;
z=(x++,++y,x+y);
求z=_______
既然有括号,那就先依次执行前面的表达式,再把最后一个表达式赋值给z,
先执行x++,x=x+1=5+1=6
再执行y++,y=y+1=8+1=9
最后z=x+y=6+9=15
PS:如果这里的表达式三为x+++y,则要注意了!
z=(x++,++y,x+++y);
首先依次执行x++得x=6、++y得y=9
后置++的优先级大于前置++
所以这里是(x++)+y;而不是x+(++y);
(x++)+y这里先把x的值与y的值相加,随后x再自增加1
也就是z=x+y;x=x+1;
这里z的值还是15,但是x的值又加了1,x=7
————————————————
版权声明:本文为博主「DMWFJJ」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/DMWFJJ/article/details/122567247
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
文章标题:浙大pta《c语言基础》经典例题-创新互联
文章起源:http://pwwzsj.com/article/docejd.html