C语言表达式

问题一:设整形变量a,b,c的值分别是3,4,5,计算下面表达式的值:!(a+b)+c-1&&b+c/2书上说b+c/2的值为6,能解释下吗?问题二:若inta=0,b=... 问题一:设整形变量a,b,c的值分别是3,4,5,计算下面表达式的值:
!(a+b)+c-1&&b+c/2
书上说b+c/2的值为6,能解释下吗?

问题二:若int a=0,b=2,c=3;则a&&b++&&++c的值是0,b值是2,c值是3.
若int a=1,b=0,c=3;则a&&b++&&++c的值是0,b值是1,c值是3.

若int a=0,b=2,c=3;则a||b++||++c的值是1,b值是3,c值是3.
若int a=1,b=2,c=3;则a||b++||++c的值是1,b值是2,c值是3.
这四个表达式都能解释下是怎么运算得来的吗?要详细点...

本人是自学,问题有点多,谢谢大家能够抽出时间帮忙解答.
有高手希望能加个好友,方便请教...

问题补充:还有能解释下问题二所有表达式中的b和c两个值是怎么得出来的吗?不太懂....
展开
 我来答
匿名用户
2013-11-26
展开全部
问题一:
b+c/2值为6,是因为c/2中c和2都是整型所以得到的值也为整型,这个值是2(整型要舍掉小数部分),在加上值为4的b,最后就等于6了。

问题二:
int a=0,b=2,c=3;
a&&b++&&++c值为0,b值为2,c为3。
是因为逻辑“&&”表示关系与,所以当a等于0时,就已经知道了整个表达式的值为0,因此不必再计算后面的子表达式的值了,所以a&&b++&&++c值为0,b值为2,c为3。

int a=1,b=0,c=3;
a&&b++&&++c值为0,b值是1,c值是3。
(其实跟上面差不多的)因为a为1,还不知道整个表达式的值,要继续计算,
当计算到b++时,由于b++是先引用值再将加1,所以b为0去当&&得左表达式(因为&&是“副作用”点,++被执行,b就变成1),知道整个表达式为0,终止计算。所以a&&b++&&++c值为0,b值是1,c值是3。

int a=0,b=2,c=3;
a||b++||++c的值是1,b值是3,c值是3。
因为逻辑“||”表示关系或,a为0,不知道整个表达式的值,需要继续计算,当计算到b当||左表达式(因为是“副作用”点,++被执行,b变成3),知道了整个表达式值为1,终止计算。所以a||b++||++c的值是1,b值是3,c值是3。

最后一个自己想想吧。
匿名用户
2013-11-26
展开全部
问题一:b+c/2。由于运算优先级除法比加法高,所以先算c/2,由于c为整形,2也是整形(应为没有写成2.0) 所以做的是整型除法 5/2=2 再算4+2=6

问题二:具体看下运算符的优先级吧,就是哪个运算符先算,具体的我也忘了, 不过 || && ! 这三个符号是逻辑运算符,其表达式值只有两个 1 和0 如果表达式 的逻辑结果为真,则值为1 ,逻辑结果为假,值为0, C语言默认 数字零是逻辑为假的,非零数字逻辑为真的。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-11-26
展开全部
问题一:对于int型/的作用其实是求商的,明白否(强制转换)。
问题二:讲方法。。。对于c语言中的逻辑运算,其 结合性是从左往右的,也就是从左往右运算。在运算的过程中,只要计算到某一步时能够确定整个表达式的值时,后面的式子就不会参与运算了,也就是保持原来的值不变。像你的问题中的第一个例子,a=0,0&&任何数还是0,所以后面的两个式子就不会参与运算了。不懂再问。。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-11-26
展开全部
问题一中的b和c都应该是整形变量,根据逻辑顺序,先算c/2,应该得2.5,但是由于c是整形变量,系统会自动认为是2。所以再加上b就是六。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-11-26
展开全部
!(a+b)+c-1&&b+c/2 = ((!(a+b)) + c-1) && (b+(c/2)) = ((!7)+4) && (4+2) = (0+4)&&6 = 4&&6 = 1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式