C++ Primer 第五版:第一章「开始」习题答案
第一章:开始
练习1.1
查阅你使用的编译器文档,确定它所使用的文件命名约定。编译并运行第2页的main程序。
1 | int main() |
练习1.2
改写程序,让它返回-1。返回值-1通常被当作程序错误的标识。重新编译并运行你的程序,观察你的系统如何处理main返回的错误标识。
1 | int main() |
编译后在命令行运行程序,之后通过echo
查看。
cmd: echo %ERRORLEVEL%
,输出-1
bash: echo $?
,输出127
练习1.3
编写程序,在标准输出上打印 Hello, World。
1 |
|
练习1.4
我们的程序使用加法运算符+来将两个数相加。编写程序使用乘法运算符*,来打印两个数的积。
1 |
|
练习1.5
我们将所有输出操作放在一条很长的语句中。重写程序,将每个运算对象的打印操作放在一条独立的语句中。
1 |
|
练习1.6
解释下面程序片段是否合法。
1 | std::cout << "The sum of " << v1; |
如果程序是合法的,它的输出是什么?如果程序不合法,原因何在?应该如何修正?
不合法。
分号「;」之间会被编译器处理成一条语句,所有第二、第三行没有cout对象(<<运算符要求左侧的运算对象必须是一个ostream对象),所以不合法。
修正方式1:二三行添加cout对象
1 | std::cout << "The sum of " << v1; |
修正方式2:删除一二行多余的分号
1 | std::cout << "The sum of " << v1 |
练习1.7
编译一个包含不正确的嵌套注释的程序,观察编译器返回的错误信息。
1 | int main() |
练习1.8
指出下列哪些输出语句是合法的(如果有的话):
1 | std::cout << "/*"; |
预测编译这些语句会产生什么样的结果,实际编译这些语句来验证你的答案(编写一个小程序,每次将上述一条语句作为其主体),改正每个编译错误。
第三行不合法,编译出错,修正:增加一个双引号。
1 | std::cout << /* "*/" */"; |
输出:
1 | /**/ */ /* |
练习1.9
编写程序,使用while循环将50到100的整数相加。
练习1.10
除了++运算符将运算对象的值增加1之外,还有一个递减运算符(--)实现将值减少1。编写程序,使用递减运算符在循环中按递减顺序打印出10到0之间的整数。
练习1.11
编写程序,提示用户输入两个整数,打印出这两个整数所指定的范围内的所有整数。
练习1.12
下面的for循环完成了什么功能?sum的终值是多少?
1 | int sum = 0; |
从-100加到100,sum的终值为0。
练习1.13
使用for循环重做1.4.1节中的所有练习(第11页)。
练习1.14
对比for循环和while循环,两种形式的优缺点各是什么?
对比 for 循环和 while 循环的优缺点:for 循环的变量可以在语句中定义,而 while 语句中直接就是判断循环的条件,无法在语句中定义变量。如此看来,for 语句中定义的变量所占用的内存可以在循环结束后回收,减少了内存的占用。
练习1.15
编写程序,包含第14页“再探编译”中讨论的常见错误。熟悉编译器生成的错误信息。
编译器可检查的错误:
- 语法错误(syntax error):比如main参数列表漏掉括号;语句结束之处用冒号而非分号;字符串字面值常量两侧漏掉引号。
- 类型错误(type error):比如向一个期望参数为int的函数传递一个字符串字面值常量。
- 声明错误(declaration error):比如对来自标准库的名字忘记使用std::以及标识符名字拼写错误。
练习1.16
编写程序,从cin读取一组数,输出其和。
<<
输入运算符返回其左侧运算对象,而istream对象遇到文件结束符(end-of-file)或无效输入(类型不同)时就会变得无效,即条件变为假。
从键盘向程序输入数据时,如何输入文件结束符:
- Windows:ctrl+z
- UNIX(包括Mac OS X):ctrl+d
练习1.17
如果输入的所有值都是相等的,本节的程序会输出什么?如果没有重复值,输出又会是怎样的?
- 输入全部相等的值:程序只会打印出一个数字及它出现的次数。
- 输入没有重复的值:程序会打印每个数值,次数都为1。
练习1.18
编译并运行本节的程序,给它输入全都相等的值。再次运行程序,输入没有重复的值。
练习1.19
修改你为1.4.1节练习1.11(第11页)所编写的程序(打印一个范围内的数),使其能处理用户输入的第一个数比第二个数小的情况。
练习1.20
在网站http://www.informit.com/title/032174113 上,第1章的代码目录包含了头文件Sales_item.h。将它拷贝到你自己的工作目录中。用它编写一个程序,读取一组书籍销售记录,将每条记录打印到标准输出上。
练习1.21
编写程序,读取两个ISBN相同的Sales_item对象,输出他们的和。
练习1.22
编写程序,读取多个具有相同ISBN的销售记录,输出所有记录的和。
练习1.23
编写程序,读取多条销售记录,并统计每个ISBN(每本书)有几条销售记录。
练习1.24
输入表示多个ISBN的多条销售记录来测试上一个程序,每个ISBN的记录应该聚在一起。
练习1.25
借助网站上的Sales_item.h头文件,编译并运行本节给出的书店程序。