C++ Primer 第五版:第一章「开始」习题答案

第一章:开始

练习 1.1

查阅你使用的编译器文档,确定它所使用的文件命名约定。编译并运行第 2 页的 main 程序。

1
2
3
4
int main()
{
return 0;
}

练习 1.2

改写程序,让它返回 - 1。返回值 - 1 通常被当作程序错误的标识。重新编译并运行你的程序,观察你的系统如何处理 main 返回的错误标识。

1
2
3
4
int main()
{
return -1;
}

编译后在命令行运行程序,之后通过 echo 查看。

cmd: echo %ERRORLEVEL%,输出 - 1

bash: echo $?,输出 127

练习 1.3

编写程序,在标准输出上打印 Hello, World。

1
2
3
4
5
6
7
#include <iostream>

int main()
{
std::cout << "Hello, World" << std::endl;
return 0;
}

练习 1.4

我们的程序使用加法运算符 + 来将两个数相加。编写程序使用乘法运算符 *,来打印两个数的积。

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>

int main()
{
std::cout << "Enter two numbers:" << std::endl;
int v1 = 0, v2 = 0;
std::cin >> v1 >> v2;
std::cout << "The product of " << v1 << " and " << v2
<< " is " << v1 * v2 << std::endl;
return 0;
}

练习 1.5

我们将所有输出操作放在一条很长的语句中。重写程序,将每个运算对象的打印操作放在一条独立的语句中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>

int main()
{
std::cout << "Enter two numbers:" << std::endl;
int v1 = 0, v2 = 0;
std::cin >> v1 >> v2;
std::cout << "The product of ";
std::cout << v1;
std::cout << " and ";
std::cout << v2;
std::cout << " is ";
std::cout << v1 * v2;
std::cout << std::endl;
return 0;
}

练习 1.6

解释下面程序片段是否合法。

1
2
3
std::cout << "The sum of " << v1;
<< " and " << v2;
<< " is " << v1 + v2 << std::endl;

如果程序是合法的,它的输出是什么?如果程序不合法,原因何在?应该如何修正?

不合法。
分号「;」之间会被编译器处理成一条语句,所有第二、第三行没有 cout 对象(<< 运算符要求左侧的运算对象必须是一个 ostream 对象),所以不合法。

修正方式 1:二三行添加 cout 对象

1
2
3
std::cout << "The sum of " << v1;
std::cout << " and " << v2;
std::cout << " is " << v1 + v2 << std::endl;

修正方式 2:删除一二行多余的分号

1
2
3
std::cout << "The sum of " << v1
<< " and " << v2
<< " is " << v1 + v2 << std::endl;

练习 1.7

编译一个包含不正确的嵌套注释的程序,观察编译器返回的错误信息。

1
2
3
4
5
int main()
{
/* /* 内层注释 */ 外层注释 */
return 0;
}

练习 1.8

指出下列哪些输出语句是合法的 (如果有的话):

1
2
3
4
std::cout << "/*";
std::cout << "*/";
std::cout << /* "*/" */;
std::cout << /* "*/" /* "/*" */;

预测编译这些语句会产生什么样的结果,实际编译这些语句来验证你的答案(编写一个小程序,每次将上述一条语句作为其主体),改正每个编译错误。

第三行不合法,编译出错,修正:增加一个双引号。

1
std::cout << /* "*/" */";

输出:

1
/**/ */ /*

练习 1.9

编写程序,使用 while 循环将 50 到 100 的整数相加。

练习 1.10

除了 ++ 运算符将运算对象的值增加 1 之外,还有一个递减运算符(--)实现将值减少 1。编写程序,使用递减运算符在循环中按递减顺序打印出 10 到 0 之间的整数。

练习 1.11

编写程序,提示用户输入两个整数,打印出这两个整数所指定的范围内的所有整数。

练习 1.12

下面的 for 循环完成了什么功能?sum 的终值是多少?

1
2
3
int sum = 0;
for (int i = -100; i <= 100; ++i)
sum += i;

从 - 100 加到 100,sum 的终值为 0。

练习 1.13

使用 for 循环重做 1.4.1 节中的所有练习(第 11 页)。

练习 1.14

对比 for 循环和 while 循环,两种形式的优缺点各是什么?

对比 for 循环和 while 循环的优缺点:for 循环的变量可以在语句中定义,而 while 语句中直接就是判断循环的条件,无法在语句中定义变量。如此看来,for 语句中定义的变量所占用的内存可以在循环结束后回收,减少了内存的占用。

在 Stack Overflow 上面有与这个相似的问题

练习 1.15

编写程序,包含第 14 页 “再探编译” 中讨论的常见错误。熟悉编译器生成的错误信息。

编译器可检查的错误:

  1. 语法错误(syntax error):比如 main 参数列表漏掉括号;语句结束之处用冒号而非分号;字符串字面值常量两侧漏掉引号。
  2. 类型错误(type error):比如向一个期望参数为 int 的函数传递一个字符串字面值常量。
  3. 声明错误(declaration error):比如对来自标准库的名字忘记使用 std:: 以及标识符名字拼写错误。

练习 1.16

编写程序,从 cin 读取一组数,输出其和。

<< 输入运算符返回其左侧运算对象,而 istream 对象遇到文件结束符(end-of-file)或无效输入(类型不同)时就会变得无效,即条件变为假。

从键盘向程序输入数据时,如何输入文件结束符:

  • Windows:ctrl+z
  • UNIX(包括 Mac OS X):ctrl+d

练习 1.17

如果输入的所有值都是相等的,本节的程序会输出什么?如果没有重复值,输出又会是怎样的?

  1. 输入全部相等的值:程序只会打印出一个数字及它出现的次数。
  2. 输入没有重复的值:程序会打印每个数值,次数都为 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 头文件,编译并运行本节给出的书店程序。

本文结束 感谢阅读
Adios!
许可注意: 若想对本作品进行转载、引用亦或是进行二次创作时,请详细阅读上述相关协议内容(若不理解,请点击链接跳转阅读)。为保障本人权利,对于违反者,本人将依法予以处理!同时会向搜索引擎提交 DMCA 的投诉申请。望周知!—— Mr. Kin
勘误声明: 虽本人写作时已尽力保证其内容的正确性,但因个人知识面和经验的局限性以及计算机技术等相关技术日新月异,本作品内容或存在一些错误之处。欢迎联系我以更正错误,不胜感激!—— Mr. Kin
侵权声明: 若本站采用的第三方内容侵犯了你的版权,请联系我进行处理,谢谢!—— Mr. Kin
免责声明: 根据中国《计算机软件保护条例》第十七条规定:“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。” 本站分享的任何逆向破解软件,版权所有者归原软件著作权人。仅供个人使用或学习研究,严禁商业或非法用途,严禁用于打包恶意软件推广,否则后果由用户承担责任,特此说明。—— Mr. Kin
靓仔 / 美女,不考虑支持一下我吗?谢谢鼓励!(๑・̀ㅂ・́)و✧
Mr. Kin 微信 微信
Mr. Kin 支付宝 支付宝
Mr. Kin 领取支付宝红包 领取支付宝红包