
3.5 习题
1.编写一个C++程序,要求从键盘上输入两个整数,将其存入整型变量x和y,并求出这两个整数进行四则算术运算、整除运算和取余运算的结果。例如,在用户屏幕输入2和5后,其返回结果如图3-12所示。

图3-12 算术运算结果
【解答】该习题首先必须声明两个整型变量,并将用户从键盘输入的值存入两个变量,对其进行算术运算并输出结果,可调用本章介绍的对应算术运算符,将结果存入到一个整型变量后输出。需要读者注意的是,取余运算的两个操作数必须为整数。其实现的简要代码如下所示。

2.若有下面的语句:

则在计算表达式:

后,m的值为多少?
【解答】该习题主要考查关系运算符,此外读者还需要考虑算术运算符与关系运算符的优先级问题。对于表达式x<z-4而言,先运算算术表达式z-4,其值为3,再运算关系表达式x<0,此时x的值为5,因此表达式x<z-4不成立,其值为假,因此m的值为0。
3.分析下面程序的输出结果。

【解答】在该程序中,给出了多个表达式在具体使用环境中值的变化,尤其是递增和递减表达式,其将变量运算的结果赋值给表达式后,变量自身会改变。而关系表达式和逻辑表达式的结果只有两种:0和1。当表达式的结果为真时返回1,反之返回0。逗号表达式的结果为表达式中最后一个表达式的值,条件表达式的结果依赖于表达式中的关系表达式。其输出结果如图3-13所示。

图3-13 表达式的应用
4.设int x=15,则表达式x<=20?10:30的值为多少?
【解答】该习题主要考查条件运算符,而条件运算符为一个三目运算符,对于其中的三个表达式的含义为:如果子表达式1的结果是true,则整个表达式的结果是子表达式2的值;否则是子表达式3的值。因此,该题首先判断表达式1,即x<=10是否成立,此处x的值为10,因此该表达式不成立,其值为表达式2的值,即30。
5.编写一个C++程序,要求从键盘上输入两个整数,将其存入整型变量a和b,不用第三个变量,将变量a和b的值进行互换,并将交换前后的a和b的值输出。例如,输入a的值为2,b的值为5,输出结果如图3-14所示。

图3-14 交换变量值
【分析】该习题主要考查递增和递减运算符的应用,不允许使用第三个变量,要求将变量的值互换,可以通过变量a和变量b的相互赋值来实现。比如将a的值变为a+b,b的值变为a-b,此时a的值为a+b,因此b的值就为a+b-b,即相当于b=a了,此时的a为未改变前的变量a的值。依此类推,可得出a=a-b,即可得到未改变前的变量b的值。其简要代码如下所示。

6.若表达式(a+b)>c*2&&b!=5||!(1/2)中,a、b、c的定义和赋值为:

则表达式的值为多少?
【分析】该习题涉及关系运算符、算术运算符、逻辑运算符等,在表达式的运算前,读者要清楚其优先级和结合性。其中算术运算符的优先级最高,其次为关系运算符,最后为逻辑运算符,但其中非运算(!)的优先级又高于算术运算符。因此,该表达式先计算括号,a+b的值为7,c*2的值为4,1/2的值为0。因此,整个表达式的值为1。
7.下面程序段的输出结果是多少?

【解答】该程序段分别输出变量a、b、c和d的值,其a和b的值在初始化时已确定,其输出都为10,而变量c和d的值都相同,其值都为5*(a+b),即100。因此,该程序的输出结果为a=10,b=10,c=100,d=100。