ImageVerifierCode 换一换
格式:DOCX , 页数:36 ,大小:27.02KB ,
资源ID:29121289      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29121289.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C++Primer中文版习题及详细分析.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C++Primer中文版习题及详细分析.docx

1、C+Primer中文版习题及详细分析习题 查看所用的编译器文档,了解它所用的文件命名规范。编译并运行本节的main程序。【解答】一般而言,C+编译器要求待编译的程序保存在文件中。C+程序中一般涉及两类文件:头文件和源文件。大多数系统中,文件的名字由文件名和文件后缀(又称扩展名)组成。文件后缀通常表明文件的类型,如头文件的后缀可以是.h或.hpp 等;源文件的后缀可以是.cc 或.cpp 等,具体的后缀与使用的编译器有关。通常可以通过编译器所提供的联机帮助文档了解其文件命名规范。习题修改程序使其返回-1。返回值-1 通常作为程序运行失败的指示器。然而,系统不同,如何(甚至是否)报告main 函数

2、运行失败也不同。重新编译并再次运行程序,看看你的系统如何处理main 函数的运行失败指示器。【解答】笔者所使用的Windows操作系统并不报告main 函数的运行失败,因此,程序返回-1 或返回0 在运行效果上没有什么区别。但是,如果在DOS 命令提示符方式下运行程序,然后再键入echo %ERRORLEVEL%命令,则系统会显示返回值-1。习题编一个程序,在标准输出上打印“Hello, World”。#include #include using namespace std;int main() system(CLS); coutHello,World!endl; return 0;习题我们

3、的程序利用内置的加法操作符“+”来产生两个数的和。编写程序,使用乘法操作符“*”产生两个数的积。#include #include using namespace std;int main() system(CLS); coutEnter two numbers:v1v2; coutThe product of v1 and v2 is v1*v2endl; return 0;习题我们的程序使用了一条较长的输出语句。重写程序,使用单独的语句打印每一个操作数。#include #include using namespace std;int main()system(CLS);cout Ente

4、r two numbers: v1 v2;cout The sum of ;cout v1;cout and ;cout v2;cout is ;cout v1 + v2 ;cout endl;return 0;习题解释下面的程序段:std:cout The sum of v1; and v2; is v1 + v2 std:endl;这段代码合法吗?如果合法,为什么?如果不合法,又为什么?【解答】这段代码不合法。注意,第1、2、4 行的末尾有分号,表示这段代码包含三条语句,即第1、2 行各为一个语句,第3、4 行构成一个语句。“”为二元操作符,在第2、3 两条语句中,第一个“”缺少左操作数,

5、因此不合法。在第2、3 行的开头加上“std:cout”,即可更正。习题编译有不正确嵌套注释的程序。【解答】由注释对嵌套导致的编译器错误信息通常令人迷惑。例如,在笔者所用的编译器中编译 节中给出的带有不正确嵌套注释的程序:#include /* comment pairs /* */ cannot nest.* cannot nest is considered source code,* as is the rest of the program*/int main()return 0;编译器会给出如下错误信息:error C2143: syntax error : missing ; be

6、fore error C2501: include : missing storage-class or type specifierswarning C4138: */ found outside of comment (第6 行)error C2143: syntax error : missing ; before (第8 行)error C2447: : missing function header (old-style formal list?)(第8 行)习题指出下列输出语句哪些(如果有)是合法的。std:cout /*;std:cout */;std:cout /* */ */

7、;预测结果,然后编译包含上述三条语句的程序,检查你的答案。纠正所遇到的错误。【解答】第一条和第二条语句合法。第三条语句中操作符之后至第二个双引号之前的部分被注释掉了,导致操作符的右操作数不是一个完整的字符串,所以不合法。在分号之前加上一个双引号即可更正。习题下列循环做什么? sum 的最终值是多少?int sum = 0;for (int i = -100; i = 100; +i)sum += i;【解答】该循环求-100100 之间所有整数的和(包括-100 和100)。sum 的最终值是0。习题用for 循环编程,求从50100 的所有自然数的和。然后用while 循环重写该程序。【解答

8、】用for 循环编写的程序如下:#include #include int main()int sum = 0;system(CLS);for (int i = 50; i = 100; +i)sum += i;std:cout Sum of 50 to 100 inclusive is sum std:endl;return 0;用while 循环编写的程序如下:#include #include using namespace std;int main() int sum=0, i=50; system(CLS); while(i=100) sum+=i; i+; coutSum of 5

9、0 to 100 inclusive is sum endl; return 0;习题用while 循环编程,输出100 递减的自然数。然后用for 循环重写该程序。【解答】用while 循环编写的程序如下:#include #include using namespace std;int main() int i=10; system(CLS); while(i=0) couti ; i-; coutendl; return 0;用for 循环编写的程序如下:#include #include using namespace std;int main() system(CLS); for (

10、int i=10;i=0;i-) couti ; coutendl; return 0;习题对比前面两个习题中所写的循环。两种形式各有何优缺点?【解答】在for 循环中,循环控制变量的初始化和修改都放在语句头部分,形式较简洁,且特别适用于循环次数已知的情况。在while 循环中,循环控制变量的初始化一般放在while 语句之前,循环控制变量的修改一般放在循环体中,形式上不如for 语句简洁,但它比较适用于循环次数不易预知的情况(用某一条件控制循环)。两种形式各有优点,但它们在功能上是等价的,可以相互转换。习题编译器不同,理解其诊断内容的难易程度也不同。编写一些程序,包含本小节“再谈编译”部分讨

11、论的那些常见错误。研究编译器产生的信息,这样你在编译更复杂的程序遇到这些信息时不会陌生。【解答】对于程序中出现的错误,编译器通常会给出简略的提示信息,包括错误出现的文件及代码行、错误代码、错误性质的描述。如果要获得关于该错误的详细信息,一般可以根据编译器给出的错误代码在其联机帮助文档中查找。习题如果输入值相等,本节展示的程序将产生什么问题?【解答】sum 的值即为输入值。因为输入的v1 和v2 值相等(假设为x),所以lower 和upper 相等,均为x。for 循环中的循环变量val 初始化为lower,从而val=upper为真,循环体执行一次,sum 的值为val(即输入值x);然后v

12、al 加1,val 的值就大于upper,循环执行结束。习题用两个相等的值作为输入编译并运行本节中的程序。将实际输出与你在习题 中所做的预测相比较,解释实际结果和你预计的结果间的不相符之处。【解答】运行 节中给出的程序,输入两个相等的值(例如3,3),则程序输出为:Sum of 3 to 3 inclusive is 3与习题 中给出的预测一致。习题编写程序,输出用户输入的两个数中的较大者。#include #include using namespace std;int main() system(CLS); coutEnter two numbers: v1v2; if(v1=v2) co

13、utThe bigger number is :v1endl; else coutThe bigger number is :v2endl; return 0;习题编写程序,要求用户输入一组数。输出信息说明其中有多少个负数。#include #include using namespace std;int main() int amount = 0, value; system(CLS); endl; return 0;习题编写程序,读入几个具有相同ISBN 的交易,输出所有读入交易的和。#include #include #include using namespace std;int ma

14、in() Sales_item total, trans; system(CLS); cout Enter transactions: total) while (cin trans) if (trans) endl; return -1; (d) -10e-2【解答】(a) int 型(b) unsigned int 型(c) double 型(d) double 型习题下列哪些(如果有)是非法的?(a) Who goes with F145rgus?012(b) (c) two Lsome(d) 1024f (e) (f) multiple linecomment【解答】(c) 非法。因为

15、字符串字面值与宽字符串字面值的连接是未定义的。(d) 非法。因为整数1024 后面不能带后缀f。(e) 非法。因为浮点字面值不能带后缀U。(f) 非法。因为分两行书写的字符串字面值必须在第一行的末尾加上反斜线。习题使用转义字符编写一段程序,输出2M,然后换行。修改程序,输出2,跟着一个制表符,然后是M,最后是换行符。【解答】输出2M、然后换行的程序段:.return 0;【解答】global_str 和local_str 的初始值均为空字符串,global_int 的初始值为0,local_int 没有初始值。习题解释下列例子中name 的意义:extern std:string name;s

16、td:string name(exercise );extern std:string name(exercise );【解答】第一条语句是一个声明,说明std:string 变量name 在程序的其他地方定义。第二条语句是一个定义,定义了std:string 变量name,并将name 初始化为exercise 。第三条语句也是一个定义,定义了std:string 变量name,并将name 初始化为exercise ,但这个语句只能出现在函数外部(即,name 是一个全局变量)。习题下列程序中j 的值是多少?int i = 42;int main()int i = 100;int j =

17、i;.【解答】j 的值是100。j 的赋值所使用到的i 应该是main 函数中定义的局部变量i,因为局部变量的定义会屏蔽全局变量的定义。习题下列程序段将会输出什么?int i = 100, sum = 0;for (int i = 0; i != 10; +i)sum += i;std:cout i sum std:endl;【解答】输出为:100 45for 语句中定义的变量i,其作用域仅限于for 语句内部。输出的i 值是for 语句之前所定义的变量i 的值。习题下列程序合法吗?int sum = 0;for (int i = 0; i != 10; +i)sum += i;std:cou

18、t Sum from 0 to i is sum std:endl;【解答】不合法。因为变量i 具有语句作用域,只能在for 语句中使用,输出语句中使用i 属非法。习题下列程序段虽然合法,但是风格很糟糕。有什么问题呢?怎样改善?for (int i = 0; i 100; +i).对象上的操作private:std:string country_number;std:string city_number;std:string phone_number;(b) 地址class Address public:对象上的操作private:std:string country;std:string c

19、ity;std:string street;std:string number;(c) 员工或公司class Employee public:.对象上的操作private:std:string ID;std:string name;char sex;Address addr;Tel_number tel;class Company public:.对象上的操作private:std:string name;Address addr;Tel_number tel;(d) 某大学的学生class Student public:.对象上的操作private:std:string ID;std:str

20、ing name;char sex;std:string dept; ET 2003)中,在Project 菜单中选择Properties 菜单项,在ConfigurationPropertiesC/C+GeneralWarning Level 中可以选择警告级别。习题用适当的using 声明,而不用std:前缀,访问标准库中的名字,重新编写节的程序,计算一给定数的给定次幂的结果。#include #include using namespace std;int main() int base,exponent; long result=1; system(CLS); coutEnter ba

21、se and exponent :baseexponent; if(exponent0) coutExponent cant be smaller than 00) for(int cnt=1;cnt=exponent;cnt+) result*=base; coutbase raised to the power of exponent: resultendl; return 0;习题什么是默认构造函数?【解答】默认构造函数(default constructor)就是在没有显式提供初始化式时调用的构造函数。它由不带参数的构造函数,或者为所有形参提供默认实参的构造函数定义。如果定义某个类的变

22、量时没有提供初始化式,就会使用默认构造函数。如果用户定义的类中没有显式定义任何构造函数,编译器就会自动为该类生成默认构造函数,称为合成的默认构造函数(synthesized default constructor)。习题列举出三种初始化string 对象的方法。【解答】(1) 不带初始化式,使用默认构造函数初始化string 对象。(2) 使用一个已存在的string 对象作为初始化式,将新创建的string 对象初始化为已存在对象的副本。(3) 使用字符串字面值作为初始化式,将新创建的string 对象初始化为字符串字面值的副本。习题s 和s2 的值分别是什么?string s;int ma

23、in() string s2;【解答】s 和s2 的值均为空字符串。习题编写程序实现从标准输入每次读入一行文本。然后改写程序,每次读入一个单词。#include #include #include using namespace std;int main()string line;system(CLS);while (getline(cin, line)cout line endl; return 0;修改后程序如下: s2)cout s1 is bigger than s2 endl;elsecout s2 is bigger than s1 endl;return 0;测试两个string

24、 对象的长度是否相等的程序:#include #include using namespace std;int main()string s1, s2;cout Enter two strings: s1 s2;string:size_type len1, len2;len1 = ();len2 = ();if (len1 = len2)cout They have same length. len2)cout s1 is longer than s2 endl;elsecout s2 is longer than s1 endl;return 0;习题编一个程序,从标准输入读取多个strin

25、g 对象,把它们连接起来存放到一个更大的string 对象中,并输出连接后的string 对象。接着,改写程序,将连接后相邻string 对象以空格隔开。【解答】#include #include using namespace std;int main()string result_str, str;cout Enter strings(Ctrl+Z to end): str)result_str = result_str + str;cout String equal to the concatenation of these strings is: endl result_str end

26、l;return 0;改写后的程序:#include #include using namespace std;int main()string result_str, str;cout Enter strings(Ctrl+Z to end): result_str;while (cinstr)result_str = result_str + + str;cout String equal to the concatenation of these strings is: endl result_str endl;return 0;习题下列程序实现什么功能?实现合法吗?如果不合法,说明理由。stri

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1