最近在读李春葆教授的《新编C语言习题与解析》,遇到的问题还真是不少。在此求教!

1.这本书的24页第20题和21题有些自相矛盾。 这里有两个表达式:d=9+e,e++,d+9;(来自20题) int num=7,sum=7;sum=num++,sum++,num++;(来自21题) 关键是,李老师在20题里说这种表达式是错的(没说原因),而在21题却说是可以这样表达的。 不知道为什么?

2.第10页提示里面,“变量声明”写成了“变理声明”。应该是打印错误吧。

3.第27页第40题。

设x,y,t均为int型变量,则执行语句x=y=3;t++x||++y;后,y的值是多少。

我是这样想的:

逻辑或运算||这种双目运算符的优先级低于自加运算++这种单目运算符。所以先计算++x与++y,x与y都返回4,4与4进行或运算,返回真也就是1,所以y应该返回1。

但是李老师的答案是这样的:

在语句t++x||++y;上,++x返回4不为假,故不会执行++y。结果是3.

我尝试思考这个答案:

或许是前一个子式为真,由于是逻辑或运算,那么就不用执行后一个子式了。但是反过来一想,后面整体还是一个逻辑式,总要返回0或1.就算或运算直接不执行,那么3又是哪里来的呢?子式++x应该是先加1后返回x,那么t就真的不知是继承谁的值了。