永发信息网

一道C语言选择题

答案:4  悬赏:20  手机版
解决时间 2021-04-29 17:00

以下程序

main()

{int i=3,j=2,a,b,c;

a=(--i==j++)?--i:++j;

b=i++;

c=j;

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

}

输出结果是 ( )

A.2,1,3 B.1,1,3

C.1,1,2 D.4,2,4

  

  这道题我认为应该选A,可答案却是B。请问这是为什么?

最佳答案

i=3;j=2;


a=(--i==j++)?--i:++j;



首先执行(--i==j++) ; 明显--i先减再引用 ,即执行的是 i = i-1; a = i;即a为 2; j++先是先引用再加, 引用的值是=还是2;


此时因为2==2,所以 (--i==j++) 成立, 所以接下来的便是 a = --i;


这句是先减再引用,即执行的是 i = i-1; a = i; 执行后a = 1;


故选B。

全部回答

首先--i中--前置运算符,所以要先算出值为2,j++中++是后置运算符,先不计算而是比较,于是先执行==,发现?运算符前的值为真,得出a=--i,--是前置运算符,于是在赋值之前必须再减1。所以a最后值为1了。

a=(--i==j++)?--i:++j; 首先看这句 --i后 i=2 j++后j=3 但是判断时由于运算优先级 判断2==2是 所以--i i=1 b=i++ 所以b=1 i=2 c=j=3 所以答案 113
其实挺简单的,因为--i,故i变为2,而j++还是2,所以--i==j++为真,所以再--i,由于前面i已经变为2,所以--i后,i为1,再把i值赋给a,故a==1.后面两个相信楼主也看懂了吧,就不说了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
心理咨询。
求初中700字作文,要和网上不一样的。3篇。
深圳有陕西老乡会群么?
魔兽世界7.0雏鹰利爪成就怎么达成
女生胡乱猜疑 喜欢惹自己喜欢的人生气是什么
有一个长方形的长为A厘米,宽为8-x厘米,面积
为什么天热我的脸颊就会出豆
老产生自弃、厌世等悲观想法有什么自我调节方
武威十中在哪里啊,我有事要去这个地方
大话3最多几开
名侦探柯南第195集
合肥企邦知识产权代理有限公司在哪里啊,我有
谁有中学生学习报初一语文茂名专版的答案
歇后语的破折号作用,歇后语有什么特点作用
谁能帮我做完赛尔号邀请任务我加分
推荐资讯
求:谁知道离沈阳南塔鞋城最近的狗市?
赤石桥河我想知道这个在什么地方
电脑高手进来帮个忙
布达拉宫资料
思念诗里带有“杨阳”的?
5173怎么交易,会骗人吗?交易的游戏号还能够找
流感越来越严重了怎么防治呢
赵强华三字的 GBK 码是什么? 谁能告诉我个准
临淄公交7路还跑吗?
新苑小区的物业管理部门为了美化环境,在小区
我若化成风你若化成雨是哪首歌的词?
月经过了好几天还没来医生说可能是宫外孕,但
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?