若int a=3;则表达式(++a)+(++a)+(++a)的值为( )。 a. 3 b. 12

作者&投稿:愈宽 (若有异议请与网页底部的电邮联系)
若int a=3;则表达式(a++)+(a++)+(a++)的值是多少~

// 按照C语言标准,无解,如果任何老师说这个有特定解,那也是在特定编译器环境下的// C语言标准规定,无解// 首先 转化为 A + B + C 的运算形式// 但是:从来没有规定编译器对A,B,C的运算顺序// 对,加法运算符,是从左到右的运算顺序// 也就是先算 A + B = (AB),然后再算 (AB) + C 是正确的// 但是 A,B,C 是三个复合运算,他们运算先后没有规定/* 当然由于ABC都一样,所以区分这个没啥必要,只是为了全面,别听信一些扯淡的回答 */// 然后对于 a++; 运算,a的值究竟在什么时候增加1,又是C语言未规定的// 对此唯一有的约束是,在一个分号; 之前的所有运算,必须结束// 也就是在下一条语句前,a必须完成了1次自增加// 除此之外毫无约束// 表达式的值嘛,也就多种多样了 9 10 11 都可以嘛// 参考资料: ISO/IEC 9899:1999// 在此标准后的标准,概不负责

结果为7。
条件表达式为:表达式1?表达式2:表达式3。先求解表达式1,若其值为真(非0)则将表达式2的值作为整个表达式的取值,否则(表达式1的值为0)将表达式3的值作为整个表达式的取值。
先判断++a==b--是否为真,++a表达的值为6,b--表达的值为6,两者相等,为真。则将表达式++a的值作为整个表达式的取值,因为在此之前a的值已经自增变成6,再进行++a表达式的值为7。

扩展资料:
1、优先级
条件运算符优先级高于赋值、逗号运算符,低于其他运算符
例如:
⑴ m<n ? x : a+3
等价于:(m<n) ?(x) :(a+3)
⑵ a++>=10 && b-->20 ? a : b
等价于:(a++>=10 && b-->20) ? a : b
2、结合性
条件运算符具有右结合性
当一个表达式中出现多个条件运算符时,应该将位于最右边的问号与离它最近的冒号配对,并按这一原则正确区分各条件运算符的运算对象。
例如:
w<x ? x+w : x<y ? x : y
与 w<x ? x+w : ( x<y ? x : y) 等价
与 (w<x ? x+w : x<y) ? x : y 不等价
参考资料:
百度百科-条件运算符

在这里答D就对了——其实时下的多数编译器做出来是16,可是选项里没有;也有编译器做出来是18,刚好有,就选它吧!大多数编译器把前两个先算出来放在一个临时变量中,再把最后一个加上:5+5+6==16。但也有编译器先把所有前++都先算了:6+6+6==18。由于C没有规定算法细节,在边缘事件处理上可以有自己的主见,就造成了不同的编译器会得出不同的结果的情况来。所以这种题做一下练习,知道怎么回事是可以的;拿来考人,只能说明出题者就不太懂C……


田家庵区15668629603: 若a 为int数据,其值为3,表达式!a||++a的值? -
酉伯阿替: a=3!a=0 逻辑运算 (false)++a =40 || 4=1 逻辑运算 所以!a || ++ a结果为1,也就是true

田家庵区15668629603: 设int a=3,则表达式a<1&&––a>1的运算结果和a的值分别是 -
酉伯阿替: int a=2;, 则表达式a<1 &&++a>1的运算结果和a的值分别是 0 和 2 .这是因为当判别a<1时结果为假,而后面的是&&,则整个表达式的值已经得到,即为假.所以 ++a>1就不再判断.所以,a的值仍是2.

田家庵区15668629603: c语言问题:若a为int类型,且其值为3,则执行完表达式a+=a - =a*a后,a的值为 - 12.请问怎么算的? -
酉伯阿替: 运算顺序是从右到左. a-=a*a; //这时 a=3-9=-6 a+=-6;// a=-6 + -6 =-12 其实这里涉及一个寄存器复用问题,在连续等号操作中,a占用的寄存器在中途被更改了,因此才有-6+-6 ,而不是3+-6

田家庵区15668629603: 若已有定义:int a =3 :则表达式A+=a - =a*a的值为什么? -
酉伯阿替: 这个问题主要考你的表达是运算顺序.#include <stdio.h> void main() { int a=3; a+=a -=a*a; //首先计算a*a==9; //再计算a-=9; 结果是a==-6 //最后a+=-6; 结果是a==-12 printf("a=%d\n",a); }

田家庵区15668629603: int a=3 为什么(a++)+a的值是6,而a+(++a)的值是8? -
酉伯阿替: 那是因为在执行这个语句这前:a+(++a) 先做++a,,因为a++的意思是先执行语句,后执行a自加,,,而++a的意思是,先a自加,后再执行语句.. (是整个语句之前之后)

田家庵区15668629603: 若a为int类型,且其值为3,则执行完表达式a+=a - =a*a -
酉伯阿替: 因为赋值运算符是运算顺序从右到左 首先执行a-=a*a 此时进行a=3-3*3 得到a=-6 在执行a+=a 可以得到a=-12

田家庵区15668629603: c++中,定义一个整型变量,即“int a=3”为什么表达式(a+5)++是错的 -
酉伯阿替: a+5是表达式,表达式是没有自增运算符的

田家庵区15668629603: 27、若a为int类型,且其值为3,则执行完表达式a+=a - =a*a后,a的值是 -
酉伯阿替: a*a=3*3=9 a=a-9=3-9=-6 a=(-6)+(-6)=-12 a的值是-12 选C

田家庵区15668629603: 若有定义int a=3,b=4;则表达式'a'<a||a=b的值为 -
酉伯阿替: a=b不能作为逻辑表达式.要判断是否相等,必须要用'a'<a||a==b 若这样的话,表达式'a'<a||a==b的值为0.如果要使用赋值表达式的值作为条件,则应该改为:'a'<a||(a=b) 这个表达式的值为1. 因为'a'=97,故左侧'a'<a为假;而(a=b)的值为4,为真. 所以整个表达式的值为真,即为1.

田家庵区15668629603: 若int a=3 则表达式(int)(a+6.5)%2+(a=b=5)的值为 答案为什么是6 -
酉伯阿替: 表达式一般从右向左计算,首先将5赋值给b,再赋值给a,右边的括号里的值就是a的值,也就是5,再对a+6.5取整,即对11.5取整得11,11模2得1,1+5得6

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网