哈尔滨地铁2017年招聘:谁能告诉我这是什么意思?

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/28 08:29:34
main()
{int a=10,b=20,c=30,d;
d=++a<=10||b-->=20||c++;
printf("%d,%d,%d,%d\n",a,b,c,d);
getch(;
}
abcd的直都怎么出来的?

getch(;
//这个什么意思啊?

a,b,c的值是定义好的
d有一个赋值的运算
d=++a<=10||b-->=20||c++;
这个赋值运算考的是 运算符的优先集的问题
/*
括号成员第一; //括号运算符[]() 成员运算符. ->
全体单目第二; //所有的单目运算符比如++ -- +(正) -(负) 指针运算*&
乘除余三,加减四; //这个"余"是指取余运算即%
移位五,关系六; //移位运算符:<< >> ,关系:> < >= <= 等
等于(与)不等排第七; //即== !=
位与异或和位或; //这几个都是位运算: 位与(&)异或(^)位或(|)
"三分天下"八九十;
逻辑或跟与; //逻辑运算符:|| 和 &&
十二和十一; //注意顺序:优先级(||) 底于 优先级(&&)
条件高于赋值, //三目运算符优先级排到 13 位只比赋值运算符和","高//需要注意的是赋值运算符很多!
逗号运算级最低! //逗号运算符优先级最低
*/
你可以按照运算符的优先集把这句进行分析
// ++ ,--
d=(++a)<=10 ||(b--)>=20||(c++);
继续分析
// <= ,>=
d=[(++a)<=10] ||[(b--)>=20]||(c++);
// 最后就剩 || ,左结合
d={[(++a)<=10] ||[(b--)>=20]}||(c++);

a=11
b=19
c=31
d=1
主要看第三行++a是11不小于等于10,继续计算,b--是19也不大于等于20,继续计算,c++为31,逻辑非0就是1为真,所以d=1。
说的不太清楚,不知道你明白了没有。

相当于 d=(((++a)<=10)||(b-->=20)||c++);
也就是 d= 0 || 1 || 30
因此答案是 11,19,30,1
楼上的说错了 ||运算遇到真值就不运算了 也就是说
d=0 || 1 ||*
*号不运行了 所以c=30

不敢苟同
在不同的软件中运行结果不一样
有的是:
||运算遇到真值就不运算
而有的要运算完
所以答案也不唯一
最好尽量不写这种语句