C++Primer课后习题解答.docx
《C++Primer课后习题解答.docx》由会员分享,可在线阅读,更多相关《C++Primer课后习题解答.docx(137页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、目录第一章快速入门2第二章变量和基本类型7第三章标准库类型13第四 数组和指针21第五章表达式31第六章语句37第七章函数37第 1% 标准丨库37第九章顺序容器43第十章关联容器60第十一章泛型算法75第十一章类和数据抽象86第十三章复制控制94第十四章 重载操作符与转换102第 H向寸王 116第十六章 部分选做习题133第十七章用于大型程序的工具1385- 1 I*s . 138第一章快速入门习题!.1查看所用的编译器文档,了解它所用的文件命名规范.编译 并运行本节的main程序.【解答】一般而言,C+编译器要求待编译的程序保存在文件中. C+程序中一般涉及两类文件:头文件和源文件.大多
2、数系 统中,文件的名字由文件名和文件后缀(又称扩展名)组成. 文件后缀通常表明文件的类型,如头文件的后缀可以是上 或hpp等;源文件的后缀可以是.cc或cpp等,具体的后 缀与使用的编译器有关.通常可以通过编译器所提供的联机 帮助文档了解其文件命名规范.习题1.2修改程序使其返回1.返回值-1通常作为程序运行失败的 指示器.然而,系统不同,如何(甚至是否)报告main函 数运行失败不同.重新编译并再次运行 ,看看你的系 统如何处理main函数的运行失败指示器.【解答】笔者所使用的Windows操作系统并不报告main函数的 运行失败,因此,程序返回一1或返回在运行效果上没有 什么区别.但是,如
3、果在DOS命令提示符方式下运行程序. 然后再键入echo %ERRORLEVEL%命令,则系统会显示返 回值1.习题!.3编个程序,在标准输出上打印Hello, World.【解答】#includeint main()(std:cout Hello, World std:endl;return 0;)习题1.4我们的程序利用内置的加法操作符+来产生两个数的和.编写程序,使用乘法操作符*产生两个数的积.【解答】#include int main()(std:cout Enter two numbers: vl v2;std:cout The product of vl and v2 is vl
4、* v2 std:endl;return 0;)习题1. 5我们的程序使用了一条较长的输出语句.重写程序,使用单 独的语句打印每个操作数.【解答】#include int main()(std:cout Enter two numbers: vl v2;std:cout The sum of;std:cout vl;std:xout and ;std:cout v2;std:cout isstd:cout vl + v2;std:cout std:endl;return 0;习题!. 6解释下面的程序段:std:cout The sum of vl; and v2; is vl + v2 st
5、d:endl;这段代码合法吗?如果合法,为什么?如果不合法,又为什 么?【解答】这段代码不合法.注意,第1、2、4行的末尾有分号,表示这段代码包含三条语句,即第1, 2行各为一个语句,第3、4行构成一个 语句.为二元操作符,在第2、3两条语句中,第一 个缺少左操作数,因此不合法.在第2、3行的开 头加上std:cout,即可更正.习题1.7编译有不正确嵌套注释的程序.【解答】由注释对嵌套导致的変芭芨优惠券编译器错误信息通常令 人迷惑.例如,在笔者所用的编译器中编译L3节中给出的 带有不正确嵌套注释的程序:#include /* comment pairs /* */ cannot nest.*
6、 cannot nest is considered source code,* as is the rest of the programVint main()(return 0;)编译器会给出如下错误信息:error C2143: syntax error: missing before error C2501: include : missing storage-class or type specifierswarning C4138: */ found outside of comment (第 6 行)error C2143: syntax error: missing befor
7、e (第8 行)error C2447: : missing function header (old-style formal list?)(第8行)习题!.8指出下列输岀语句哪些(如果有)是合法的.std:cout std:cout */,;std:cout /* 7 7;预测结果,然后编译包含上述三条语句的程序,检查你的答 案.纠正所遇到的错误.【解答】第一条和第二条语句合法.第三条语句中 操作符之后至第二个双引号之前的部分被 注释掉了,导致操作符的右操作数不是一个完整的字符 串,所以不合法.在分号之前加上一个双引号即可更正.习题!. 9下列循环做什么? sum的最终值是多少?int s
8、um = 0;for (int i = -100; i = 100; +i)sum += i;【解答】该循环求-100100之间所有整数的和(包括-100和100 sum的最终值是.习题1. 10用for循环编程,求从50-100的所有自然数的和.然后用while循环重写该程序.【解答】用for循环编写的程序如下:#include int main()(int sum = 0;for (int i = 50; i = 100; +i)sum += i;std:cout Sum of 50 to 100 inclusive is sum std:endl;return 0;)用while循环编写
9、的程序如下:#include int main()(int sum = 0, int i = 50;while (i = 100) sum += i;+ +i;std:cout Sum of 50 to 100 inclusive is sum std:endl;return 0;)习题!. 11用while循环编程,输出10-0递减的自然数.然后用for 循环重写该程序.【解答】用while循环编写的程序如下:#include int main()int i = 10;while (i = 0) std:cout i -i;)return 0;用for循环编写的程序如下:#include i
10、nt main()for (int i = 10; i = 0; -i)std:cout i return 0;)习题1. 12对比前面两个习题中所写的循环.两种形式各有何优缺点?【解答】在for循环中,循环控制变量的初始化和修改都放在语句头 部分,形式较简洁,且特别适用于循环次数已知的情况.在 while循环中,循环控制变量的初始化一般放在while语句 之前,循环控制变量的修改一般放在循环体中,形式上不如 for语句简洁,但它比较适用于循环次数不易预知的情况用 某条件控制循环),两种形式各有优点,但它们在功能上 是等价的,可以相互转换.习题1.13编译器不同,理解其诊断内容的难易程度也不同
11、.编写些 程序,包含本小节再谈编译”部分讨论的那些常见错误。 研究编译器产生的信息,这样你在编译更复杂的程序遇到这 些信息时不会陌生。【解答】对于程序中出现的错误,编译器通常会给出简略的提示信 息,包括错误出现的文件及代码行、错误代码、错误性质的 描述。如果要获得关于该错误的详细信息,一般可以根据编 译器给出的错误代码在其联机帮助文档中查找。习题1. 14如果输入值相等,本节展示的程序将产生什么问题?【解答】sum的值即为输入值。因为输入的vl和v2值相等(假设 为x ),所以|ower和upper相等,均为x. for循环中的 循环变量val初始化为lower,从而val =upper为真,
12、循 环体执行一次,sum的值为val (即输入值x );緝val加 1, val的值就大于upper,循环执行结束。习题1. 15用两个相等的值作为输入编译并运行本节中的程序。将实际 输出与你在习题1.14中所做的预测相比较,解释实际结果 和你预计的结果间的不相符之处。【解答】运行1.4.3节中给出的程序,输入两个相等的值(例如3,3), 则程序输出为:Sum of 3 to 3 inclusive is 3与习题1.14中给出的预测一致。习题1. 16编写程序,输出用户输入的两个数中的较大者。【解答】#include int main()(std:cout Enter two numbers
13、: vl v2; 读入数据if (vl = v2)std:cout The bigger number is vl std:endl;elsestd:cout The bigger number is v2 std:endl;return 0;习题1. 17编写程序,要求用户输入组数。输出信息说明其中有多少 个负数。【解答】#include int main()(int amount = 0, value;读入数据直到遇见文件结束符,计算所读入的负数的个数while (std:cin value)if (value = 0) +amount;std:cout Amount of all neg
14、ative values read is amount std:endl;return 0;)习题1. 18编写程序,提示用户输入两个数并将这两个数范围内的每个 数写到标准输出。【解答】#include int main()std:cout Enter two numbers: vl v2;/Z 读入两个数/Z用较小的数作为下界lower、较大的数作为上界upper int lower, upper;if (vl = v2) lower = vl;upper = v2; else lower = v2;upper = vl;)/Z输出从lower到upper之间的值 std:cout Valu
15、es of lower to upper inclusiveare: std:endl;for (int val = lower; val = upper; +val) std:cout val ;return 0;)习题1. 19如果上题给定数1000和2000,程序将产生什么结果?修 改程序,使每一行输岀不超过10个数。【解答】所有数的输出连在起,不便于阅读。程序修改如下:#include int main()std:cout Enter two numbers: vl v2; /Z 读入两个数/Z用较小的数作为下界lower、较大的数作为上界upper int lower, upper;
16、if (vl = v2) lower = vl;upper = v2; else lower = v2;upper = vl;)/Z输出从lower到upper之间的值std:cout Values of lower nto upper inclusive are: std:endl;for (int val = lower, count=l; val = upper; +val, +count) std:cout val ;if (count % 10 = = 0) 每行输出10个值 std:cout std:endl;)return 0;)粗黑体部分为主要的修改:用变量count记录已输出
17、的数 的个数若count的值为!0的整数倍,则输出个换行符。习题1. 20编写程序,求用户指定范围内的数的和,省略设置上界和下 界的if测试。假定输入数是和3 ,按照这个顺序,预测程 序运行结果。然后按照给定的数是7和3运行程序,看结果 是否与你预测的相符。如果不相符,反复研究关于for和 while循环的讨论直到弄清楚其中的原因。【解答】可编写程序如下:/ l-20.cpp/省略设置上界和下界的if测试,求用户指定范围内的数 的和#include int main()(std:cout Enter two numbers: vl v2;/Z 读入/Z求和for (int val = vl;
18、val = v2; +val) sum + = val; sum = sum + val std:cout Sum of vl to v2 inclusive is sum std:endl;return 0;)如果输入数据为7和3 ,则vl值为7 , v2值为3. for语 句头中将val的初始值设为7 ,第一次测试表达式val = v2 时该表达式的值为false ,for语句的循环体次也不执行, 所以求和结果sum为0.习题1.21本 书 配 套 网 站 ( 1章的代码目录下有Salesjtem.h源文件。复制该文件到你 的工作目录。编写程序,循环遍历组书的销售交易,读入 每笔交易并将交
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Primer 课后 习题 解答
限制150内