第1章 开始
练习1.1
查阅你使用的编译器的文档,确定它所使用的命名约定。编译并运行第2页的main程序。
略
练习1.2
改写程序,让它返回-1。返回值-1通常被当作程序错误的标识。重新编译并运行你的程序,观察你的系统如何处理main返回的错误标识。
练习1.3
编写程序,在标准输出上打印Hello, World。
复制代码
1
2
3
4
5
6
7#include <iostream> int main (void) { std::cout << "Hello, World" << std::endl; return 0; }
练习1.4
我们的程序使用加法运算符+来将两个数相加。编写程序使用惩罚运算符*,来打印两个数的积。
复制代码
1
2
3
4
5
6
7
8
9#include <iostream> int main (void) { std::cout << "请输入两个数: " << std::endl; int v1, v2; std::cin >> v1 >> v2; std::cout << v1 << "和" << v2 << "的积为: " << v1*v2 << std::endl; return 0; }
练习1.5
我们将所有输出放在一条很长的语句中。重写程序,将每个运算对象的打印操作放在一条独立的语句中。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15#include <iostream> int main (void) { std::cout << "请输入两个数: "; std::cout << std::endl; int v1, v2; std::cin >> v1 >> v2; std::cout << v1; std::cout << "和"; std::cout << v2; std::cout << "的积为: "; std::cout << v1*v2; std::cout << std::endl; return 0; }
练习1.6
解释下面的程序片段是否合法。
复制代码
不合法。前两行的末尾有分号,代表语句结束,第2、3两行为两条新的语句。而这两条语句在“<<”之前缺少了输出流,应在“<<”之前加上"std::cout"。
1
2
3std::cout << "The sum of " << v1; << "and " << v2; << " is " << v1+v2 << std::endl;
练习1.7
编译一个包含不正确的嵌套注释的程序,观察编译器返回的错误信息。
复制代码
1
2
3
4
5
6
7
8
9#include <iostream> /* * 注释对/* */不能嵌套 * “不能嵌套”几个字会被认为是源码,像剩余程序一样处理 */ int main (void) { return 0; }
练习1.8
指出下列哪些输出语句是合法的(如果有的话)。
std::cout << "/*";
std::cout << "*/";
std::cout << /* "*/" */;
std::cout << /* "*/" /* "/*" */;
预测编译这些语句会产生什么样的结果,实际编译这些语句来验证你的答案(编写一个小程序,每次将上述一条语句作为其主体),改正每个编译错误。
第一条和第二条语句是合法的,第三条语句的第一个双引号和第四个双引号被注释掉了,第二个双引号和第三个双引号之间的“*/”被认为是字符串的文字内容。
练习1.9
编写程序,使用while循环将50到100的整数相加。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12#include <iostream> int main (void) { int sum = 0, i = 50; while (i <= 100) { sum += i; ++i; } std::cout << "50到100的整数和为 " << sum << std::endl; return 0; }
练习1.10
除了++运算符将运算对象的值增加1以外,还有一个递减运算符(--)实现将值减少1。编写程序,使用递减运算符在循环中按递减序打印出10到0之间的整数。
复制代码
1
2
3
4
5
6
7
8#include <iostream> int main (void) { int i = 11; while (i > 0) std::cout << --i << std::endl; return 0; }
练习1.11
编写程序,提示用户输入两个整数,打印出这两个整数所指定的范围内的所有整数。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27#include <iostream> int main (void) { std::cout << "请输入两个整数以表示范围:" << std::endl; int v1, v2; std::cin >> v1 >> v2; if (v1 < v2) { while (v1 <= v2) { std::cout << v1 << " "; ++v1; } } else if (v1 > v2) { while (v2 >= v1) { std::cout << v2 << " "; --v2; } } else std::cout << std::cout << v1; std::cout << std::endl; return 0; }
练习1.12
下面的for循环完成了什么功能?sum的终值是多少?
复制代码
1
2
3int sum = 0; for (int i = -100; i <= 100; ++i) sum += i;
此循环将-100到100之间(包含-100和100)的整数相加,sum的终值为0。
练习1.13
使用for循环重做1.4.1节中的所有练习(第11页)。
练习1.9中,将while循环改为
for (i; i <= 100; ++i)
sum += i;
练习1.10中,将while循环改为
for (i = 10; i >= 0; ++i)
std::cout << i << std::endl;
练习1.11同理
练习1.14
对比for循环和while循环,两种形式的优缺点各是什么?
在循环次数已知的情况下,for循环更为简洁;无法预知循环次数是,while循环更合适。
练习1.15
编写程序,包含第14页“再探编译”中讨论的常见错误。熟悉编译器生成的错误信息。
练习1.16
编写程序,从cin读取一组数,输出其和。
复制代码
1
2
3
4
5
6
7
8
9#include <iostream> int main (void) { int sum = 0, val; while (cin >> val) sum += val; std::cout << sum << std::endl; return 0; }
练习1.17
如果输入的所有值都是相等的,本节的程序会输出什么?如果没有重复值,输出又会是怎样的?
如果输入的所有值都相等,则while循环中的else分支永远不会执行,直到输入结束,while循环退出,循环后的输出语句打印这唯一的一个值和它出现的次数。若没有重复值,则while循环中的if语句的真值分支永远不会执行,每读入一个值会打印它的值和出现的次数1
练习1.18
编译并运行本节的程序,给它输入全都相等的值。再次运行程序,输入没有重复的值。
练习1.19
修改你为1.4.1节练习1.10(第11页)所编写的程序(打印一个范围内的数),使其能处理用户输入的第一个数比第二个数小的情况。
练习1.20
在网站http://www.informit.com/title/0321714113 上,第1章的代码目录汇总包含了头文件Sales_item.h。将它拷贝到你自己的工作目录中。用它编写一个程序,读取一组书籍销售记录,将每条记录打印到标准输出上。
复制代码
1
2
3
4
5
6
7
8
9
10#include <iostream> #include "Sales_item.h" int main (void) { Sales_item book; std::cout << "请输入销售记录:" << std::endl; while (std::cin >> book) std::cout << "ISBN、销售额和平均售价为 " << book << std::endl; return 0; }
练习1.21
编写程序,读取两个ISBN相同的Sales_item对象,输出它们的和。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13#include <iostream> #include "Sales_item.h" int main (void) { Sales_item trans1, tran2; std::cout << "请输入两条ISBN相同的销售记录:" << std::endl; std::cin >> trans1 >> trans2; if (compareIsbn(trans1, trans2)) std::cout << "汇总信息:ISBN、售出本数、销售额和平均售价为 " << trans1+trans2 << std::endl; else std::cout << "两条销售记录的ISBN不同" << std::endl; return 0; }
练习1.22
编写程序,读取多个具有相同ISBN的销售记录,输出所有记录的和。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#include <iostream> #include "Sales_item.h" int main (void) { Sales_item total, trans; std::cout << "请输入几条ISBN相同的销售记录:" << std::endl; if (std::cin >> total) { while (std::cin >> trans) if (compareIsbn(total, trans)) total += trans; else { std::cout << "ISBN不同"; return -1; } std::cout << "汇总信息:ISBN、售出本数、销售额和平均售价为 " << total << std::endl; } else { std::cout << "没有数据" << std::endl; return -1; } return 0; }
练习1.23
编写程序,读取多条销售记录,并统计每个ISBN(每本书)有几条销售记录。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24#include <iostream> #include "Sales_item.h" int main (void) { Sales_item trans1, trans2; int num = 1; std::cout << "请输入若干销售记录:" << std::endl; if (std::cin >> trans1) { while (std::cin >> trans2) { if (compareIsbn(trans1, trans2)) num++; else { std::cout << trans1.isbn() << "共有" << num << "条销售记录" << std::endl; trans1 = trans2; num = 1; } std::cout << trans1.isbn() << "共有" << num << "条销售记录" << std::endl; } } return 0; }
练习1.24
输入表示多个ISBN的多条销售记录来测试上一个程序,每个ISBN的记录应该聚在一起。
从网站http://www.informit.com/title/0321714113上下载数据文件,用文件重定向来读取文件中的数据作为输入进行测试。代码略。
练习1.25
借助网站上的Sales_item.h头文件,编译并运行本节给出的书店程序。
大作业,留着以后写。
最后
以上就是孝顺金毛最近收集整理的关于《C++ Primer(第5版)》习题答案的全部内容,更多相关《C++内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复