C语言求教

假期自学C语言,遇到这个题不懂求解答解析
有一下语句:double a,b;int w; long c;若各变量已正确赋值,则下列选项中正确的表达式是()
A a=a+b=b++
B w%((int)a+b)
C (c+w)%(int)a
D w=a%b

答案是C
%运算符两边数值必须为整形,假如是一个表达式的话,那么表达式的值必须为整形。
根据C语言不同类型数值运算的默认规则,可知,唯有C的表达式两边数值均为整形。
所以答案为C

默认规则:占用存储空间小的类型自动转化为占用更多存储空间的类型。
如:int型与double型的数值一起运算,运算的过程是,先将int型自动转化成double型,然后运算,得出的结果是double型。
PS.int型占用4个byte,double型占用8个byte的存储空间。
PS2.A中的连等在语法中是不被允许的
PS3.B的表达式左边w变量时int型,没有问题,但是右边((int)a+b)
,double型的a被强制转化为int型,然后与double型的b相加,结果为double型,B卒。
PS4.C (c+w)%(int)a
(c+w)一个是int型,一个是long型,都属于整形,所以没问题。
(int)a,double型的a被强制转化为int型。
所以两边都是整形,C答案正确。
PS5.D最简单,两边都是double型,毫无疑问,错误。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-07-21
A错,连等式没问题,关键是中间的a+b出错,你不能将b++赋值给a+b
B错,用(int)a+b去对w求余,这里(int)a是整数,但b是浮点,两个相加仍旧为浮点,无法求余
C正确,c+w为整数,用(int)a对它求余,没有语法问题
D错,a和b都是浮点数,请自己思考吧

如有疑问欢迎追问本回答被网友采纳
第2个回答  2020-01-13
第3个回答  2014-07-21
是D。考的是变量类型转换
相似回答