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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(c面向对象程序设计课后习题解答谭浩强.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

c面向对象程序设计课后习题解答谭浩强.docx

1、c面向对象程序设计课后习题解答谭浩强第1章C+的初步知识1 请根据你的了解,叙述 C+的特点。C+对C有哪些发展?【解】略。2个C+的程序是由哪几部分构成的?其中的每一部分起什么作用?【解】略。3从拿到一个任务到得到最终结果,一般要经过几个步骤?【解】略。4请说明编辑、编译、连接的作用。在编译后得到的目标文件为什么不能直接运行?【解】编译是以源程序文件为单位进行的,而一个完整的程序可能包含若干个程序文件,在分别对它 们编译之后,得到若干个目标文件(后缀一般为 .obj ),然后要将它们连接为一个整体。此外,还需要与编译系统提供的标准库相连接,才能生成一个可执 行文件(后缀为 .exe )。不能

2、直接运行后缀为 .obi的目标文件,只能运行后缀为 .exe的可执行 文件。5.分析下面程序运行的结果。#i ncludeusing n amespacestd;int main(cout This is ;cout a C+;cout program. endl;return 0;【解】输出的结果为ThisisaC+program.6 分析下面程序运行的结果。#i ncludeusing n amespacestd;int main(int a,b,c;a=10;b=23;c=a+b;cout a+b=;coutcout abc;c=f(a,b,c;cout a+b= a+b;解】上机编译出

3、错,编译出错信息告知在第2行出错,经检查,发现第1行的末尾多了一个分号,编译系 统无法理解第2行的花括号,导致报告第2行出错。将第行的末尾的分号去掉,重新編译,编 译出 错信息告知在第5行和第6行出错。第5行出错原因是cout未经声明,因为cout不是C+语言提供的 系统的关键字,而是输出流的对象,必须使用头文件iostream。第行出错原因是main是i nt型函 数,应返回一个整型值。将程序改为#i ncludeint main(int a,b;c=a+b;cout a+b= a+b;return 0;重新编译。编译出错信息告知在第5行和第6行出错。第5行出错原因是变量c未定义,第6行出错

4、 原因是cout未经声明,说明#include命令行未能起作用,原因是未指明命名空 间。将程序改为#includeusing namespacestd;int main(int a,b,c;c=a+b;cout a+b= a+b;return 0;重新编译。编译出错信息告知在第 7行出错,经检查 ,是“”用得不当, “”是提取运算符, 应与 cin联合使用,用来从 输入流中提取数据, 输出时应该 用插入运算符 把两处“都改为ab;c=a+b;cout a+b= a+b;return 0;C+重新编译,没有编译错误,能通过编译和连接,可以正常运行,在Visual6.0环境下运行 时屏幕显示如下:

5、5 9/a+b=14Press any key to continue显然这样的输出不理想,“ Press any key to continue 是VisualC+系统在输出了运行 结果后自动显示的一个信息,告 诉用户 如果想继续工作,请按任何一个 键”当用户按任何一个键后,显示运行结果的窗口消失,屏幕显示回到VisualC+的主窗口,显示出源程序和 编译信息。为了解决以上 输出不理想的情况,可以在最后一个 输出语句中增加 输出一个换行符。最后的程序如下:#i ncludeusing n amespacestd;int main(int a,b,c;cin ab;c=a+b;couta+b=

6、return 0;运行时屏幕显示如下:5 9/a+b=14Press any key to continue这就完成了程序的调试。这里对本题的调试过程作了比 较详细的分析,以便使 读者对如何调试程序有比较具体而清 晰的了解。需要说明:1 )编译系统给出的编译出错信息,只是提示性的,引 导用户去检查错误,用户必须根据程 序的上下文和 编译出错信息,全面考 虑,找出真正出 错之处。例如编译出错信息通知第2行出 错,其实可能是第1行出错。2)有寸,有的错误开始时未被检查出来并告知用 户(例如未定义变量c),由于其他错误未 解决,掩盖了 这个错误。当解决了其他 错误后,这个错误会被检查出来。有时在调试

7、过 程中会不 断检查 出新的 错误 ,这是不奇怪的。一一 处理,问题 会迎刃而解。(3)为了说明调试过 程,这里全部依靠 计算机系 统来检查错误 ,其实有些明 显的错误,完全 可以由人 工查出,这样可以提高调试效率。由人工在纸面或屏幕上检查错误,称为静态查错, 用计算机编译系统检查错误,称为动态查错。建议尽量先用静态查错的方法排除错误,只有人 工检查不出来的错误才让计算机检查。9输入以下程序, 进行编译,观察编译情况,如果有错误,请修改程序,再 进行编译,直到 没有错误,然后进行连接和运行,分析运行 结果。#includeusing namespacestd;int main(int a,b;

8、c=add(a,bcouta+b= a b;c=add(a,b;cout a+b= c x y z;sort(x,y,z;return 0;void sort(int x, int y, int zint temp;if (xy temp=x;x=y;y=temp; / 内3个语句的作用是将x和y的值互换if (z , x , y endl;else if (z , z , y endl;else cout x , y , z a b c;cout max(a,b,c= max(a,b,c endl;cout max(a,b= a a=b;if(ca a=c;return a;运行情况如下:1

9、3 5 76 /max(a, b, c=76 (从3个数中找最大者)max(a,b=13 (从前2个数中找最大者)如果想从3个数中找大者,可以在调用时写成max(a,b,c ”形式,如果只想从2个数中找大 者,则在调用时写成max(a,b ”形式,此时c自动取默认值0,由于0比任何正整数都小,因此从1 4,5, 0中选最大者和从14,5中选大者的结果是一样的。12.输入两个整数,将它们按由大到小的顺序输出。要求使用变量的引用。解】可以编写出以下程序:#i ncludeusing n amespacestd;int main( void change(int &,int &;int a,b;ci

10、n ab;if(a如果a,使a和b的值互换cout max= min= return 0;void change(int &r1,int &r2 / 函数的作用是使r1与r2互换 int temp;temp=r1;r1=r2;r2=temp;运行情况如下:12_67/max=67 min=1213.对3个变量按由小到大顺序排序,要求使用变量的引用。解】可以编写出以下程序:#in cludeusing namespace std;int main(void sort(int &,int &,int &;int a,b,c,a1,b1,c1;cout abc;a1=a;b1=b;c1=c;sort

11、(a1,b1,c1;cout in sorted order is;cout j chan ge(i, j;if (ik change(i, k;if (jk change(j, k;void change(int &x,int &y int temp;temp=x;x=y;y=temp;运行情况如下:Please enter 3 integers:2367-55/23 67 -55 in sorted order is -55 23 67这个程序 很容易理解,不易 出错。由于在调用sort函数时虚实 结合使形参i,j,k成为实参a1,b1,c1的引用(别名),因此 通过调用函数sort (a

12、1,b1,c1)既实现了对i,j,k排序,也就同 时实现了对a1,b1,c1排序。同样,执行cha nge ( i,j)函数,可以实现 对实参i利的互换。14.编一程序,将两个字符串连接起来,结果取代第一个字符串。要求用string方法。【解】可以编写出以 下程序:#include#include / 程 序中若 使 用字符串变量,必须包 含头文件 stringusing namespace std;int main( string s1= week ,s2= end ;cout s1= s1 endl;cout s2= s2 endl;s1=s1+s2;cout The new string

13、 is: str; /输入一个字 符串赋给字符串变量strn=str.size( ; /测量 str 的长度nfor(i=0;i /使str中的字符 对称互换temp=stri;stri=strn -i-1;strn -i-1=temp;cout str endl;return 0;运行情况如下:please in put a stri ng:LIGHT /THGIL注意:输入的字符串中不能含有空格。16.有5个字符串,要求将它们按由小到大的顺序排列,用string方法。 【解】可以编写出以下程序:#i nclude#i ncludeusing namespace std;int main(

14、int i;string str5= BASIC ,” C,” FORTRAN ,” C+ ,” PASCAL ;void sort(string ;sort(str; /对字符串排序cout the sorted strings : for(i=0;i5;i+cout ” ; /按已排好 的顺序输出字符串coutreturn 0;void sort(string s int i, j;string t;for (j=0; j5; j+for(i=0; isi+1t=si;si=si+1;si+1=t;运行结果 如 下:the sorted strings :BASIC C C+ FORTRA

15、N PASCAL17.编一个程序,用同一个函数名对n个数据进行从小到大排序,数据类型可以是整型、单 精度型、双精度型。用重载函数实现。【解】可以编写出以 下两个程序:(1)建立3个函数,分别用于处理整型 、单精度型 、双精度型数据的排序,在3个函数中都采 用选择 法排序方法。#include#includeusing namespace std;int main(long a5=10100, -123567, 1198783,-165654, 3456;int b5=1,9,0,23, -45;float c5=2.4, 7.6, 5.5, 6.6, - 2.3 ;void sort(long

16、 ;void sort(int ;void sort(float ;sort(a;sort(b;sort(c;return 0;void sort(long a int i, j;long t;for (j=0; j5; j+for(i=0;iai+1 t=ai;ai=ai+1;ai+1=t; cout the sorted numbers : for(i=0;i5;i+cout ;coutvoid sort(int a int i, j, t;for (j=0; j5; j+ for(i=0;iai+1 t=ai;ai=ai+1;ai+1=t; cout the sorted numbers

17、 : for(i=0;i5;i+cout ;coutvoid sort(float a int i, j;float t;for (j=0;j5;j+for(i=0;iai+1 t=ai;ai=ai+1;ai+1=t; cout the sorted numbers : for(i=0;i5;i+ cout ;cout运行结果如下:the sorted numbers :- 123567 - 165654 10100 3456 1198783 (长 整型数据排序)the sorted numbers : (整型数据排序)-45 0 1 9 23the sorted numbers :-2.3

18、2.4 5.5 6.6 7.6 (单 精度型数据排序)选择 法排序,在下面的程个函数采用起泡法排序(2)在第1种方法中, 3个函数的函数体基本上是相同的,都是采用 序中,3个函数的函数体不全相同,前两个函数采用 选择 法排序,最后#include#includeusing namespacestd;int main( long a5= 10100, - 123567, 1198783,- 165654, 3456;int b5=1,9,0,23, - 45;float c5=2.4, 7.6, 5.5, 6.6, - 2.3 ; void sort(int ;void sort(float ;

19、void sort(long ;sort(a; /对长 整型数据排序sort(b; /对 整型数据排序 sort(c; /对单 精度型数据排序 return 0;void sort(long a /对长整型数据用 选择 法排序的函数 int i,j,min;long t; for(i=0;i5;i+min=i;for (j=i+1;jaj min=j;t=ai; ai=amin; amin=t; cout the sorted numbers : for(i=0;i5;i+ cout ;coutvoid sort(int a /对整型数据用 选择 法排序的函数 int i, j, t;for

20、(j=0; j5; j+ for(i=0;iai+1t=ai;ai=ai+1;ai+1=t; cout the sorted numbers : for(i=0;i5;i+cout ;coutvoid sort(float a /对单 精度型数据用起泡法排序的函数int i, j;float t;for (j=0;j5;j+for(i=0;iai+1t=ai;ai=ai+1;ai+1=t;cout the sorted numbers : for(i=0;i5;i+cout ;cout运行结果如下:the sorted numbers :-123567 -165654 10100 3456 1198783 (长 整型数据排序 结 果)the sorted numbers : (整型数据排序

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

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