5.1 什么是空语句?什么时候会用到空语句?
答:
只含义一个单独的分号的语句是空语句。即:;
。
如果在程序的某个地方,语法上需要一条语句但是逻辑上不需要,此时应该使用空语句。
5.2 什么是块?什么时候会用到块?
答:
用花括号括起来的语句和声明的序列就是块。
如果在程序的某个地方,语法上需要一条语句,而逻辑上需要多条语句,此时应该使用块
5.3 使用逗号运算符重写1.4.1节的while
循环,使它不再需要块,观察改写之后的代码可读性提高了还是降低了。
答:
5.4 说明下列例子的含义,如果存在问题,试着修改它。
答:
- (a) 这个循环试图用迭代器遍历
string
,但是变量的定义应该放在循环的外面,目前每次循环都会重新定义一个变量,明显是错误的。 - (b) 这个循环的
while
和if
是两个独立的语句,if
语句中无法访问status
变量,正确的做法是应该将if
语句包含在while
里面。
5.7 改写下列代码段中的错误。
答:
- (a)
ival1 = ival2
后面少了分号。 - (b) 应该用花括号括起来。
- (c)
if (!ival)
应该改为else
。 - (d)
if (ival = 0)
应该改为if (ival == 0)
。
5.10 我们之前实现的统计元音字母的程序存在一个问题:如果元音字母以大写形式出现,不会被统计在内。编写一段程序,既统计元音字母的小写形式,也统计元音字母的大写形式,也就是说,新程序遇到'a'和'A'都应该递增aCnt
的值,以此类推。
答:
5.13 下面显示的每个程序都含有一个常见的编码错误,指出错误在哪里,然后修改它们。
答:
(a) 少了break
语句。应该为
(b) 在default
分支当中,ix
未定义。应该在外部定义ix
。
(c) case
后面应该用冒号而不是逗号。
(d) case
标签必须是整型常量表达式。
5.14 编写一段程序,从标准输入中读取若干string
对象并查找连续重复出现的单词,所谓连续重复出现的意思是:一个单词后面紧跟着这个单词本身。要求记录连续重复出现的最大次数以及对应的单词。如果这样的单词存在,输出重复出现的最大次数;如果不存在,输出一条信息说明任何单词都没有连续出现过。 例如:如果输入是:
那么输出应该表明单词now连续出现了3次。
答:
5.15 说明下列循环的含义并改正其中的错误。
答:
(a)
(b)
(c) 问题:无限循环
5.17 假设有两个包含整数的vector
对象,编写一段程序,检验其中一个vector
对象是否是另一个的前缀。 为了实现这一目标,对于两个不等长的vector
对象,只需挑出长度较短的那个,把它的所有元素和另一个vector
对象比较即可。 例如,如果两个vector
对象的元素分别是0、1、1、2 和 0、1、1、2、3、5、8,则程序的返回结果为真。
答:
5.19 编写一段程序,使用do while
循环重复地执行下述任务: 首先提示用户输入两个string
对象,然后挑出较短的那个并输出它。
答:
5.20 编写一段程序,从标准输入中读取string
对象的序列直到连续出现两个相同的单词或者所有的单词都读完为止。 使用while
循环一次读取一个单词,当一个单词连续出现两次时使用break
语句终止循环。 输出连续重复出现的单词,或者输出一个消息说明没有任何单词是连续重复出现的。
答:
5.24 修改你的程序,使得当第二个数是0时抛出异常。先不要设定catch
子句,运行程序并真的为除数输入0,看看会发生什么?
答:
5.25 修改上一题的程序,使用try
语句块去捕获异常。catch
子句应该为用户输出一条提示信息,询问其是否输入新数并重新执行try
语句块的内容。
答: