• 268.00 KB
  • 2022-04-22 11:21:41 发布

谭浩强C++课后习题答案[1].doc

  • 15页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'17第1章C++ 的初步知识谭浩强C++课后习题答案1.请根据你的了解,叙述C++ 的特点。C++ 对C有哪些发展?【解】略。2.一个C++的程序是由哪几部分构成的?其中的每一部分起什么作用?【解】略。3.从拿到一个任务到得到最终结果,一般要经过几个步骤?【解】略。4.请说明编辑、编译、连接的作用。在编译后得到的目标文件为什么不能直接运行?【解】编译是以源程序文件为单位进行的,而一个完整的程序可能包含若干个程序文件,在分别对它们编译之后,得到若干个目标文件(后缀一般为.obj),然后要将它们连接为一个整体。此外,还需要与编译系统提供的标准库相连接,才能生成一个可执行文件(后缀为.exe)。不能直接运行后缀为.obj的目标文件,只能运行后缀为.exe的可执行文件。5.分析下面程序运行的结果。#includeusingnamespacestd;intmain(){cout<<"This"<<"is";cout<<"a"<<"C++";cout<<"program."<usingnamespacestd;intmain(){inta,b,c;a=10;b=23;c=a+b;cout<<"a+b=";cout<usingnamespacestd;intmain(){inta,b,c;intf(intx,inty,intz);cin>>a>>b>>c;c=f(a,b,c);cout<>"a+b=">>a+b;}【解】上机编译出错,编译出错信息告知在第2行出错,经检查,发现第1行的末尾多了一个分号,编译系统无法理解第2行的花括号,导致报告第2行出错。将第1行的末尾的分号去掉,重新编译,编译出错信息告知在第5行和第6行出错。第5行出错原因是cout未经声明,因为cout不是C++语言提供的系统的关键字,而是输出流的对象,必须使用头文件iostream。第6行出错原因是main是int型函数,应返回一个整型值。将程序改为#includeintmain(){inta,b;c=a+b;cout>>"a+b=">>a+b;return0;}重新编译。编译出错信息告知在第5行和第6行出错。第5行出错原因是变量c未定义,第6行出错原因是cout未经声明,说明#include命令行未能起作用,原因是未指明命名空间。将程序改为#includeusingnamespacestd;intmain(){inta,b,c;c=a+b;cout>>"a+b=">>a+b;return0;} 17第1章C++ 的初步知识重新编译。编译出错信息告知在第7行出错,经检查,是“>>”用得不当,“>>”是提取运算符,应与cin联合使用,用来从输入流中提取数据,输出时应该用插入运算符“<<”。把两处“>>”都改为“<<”,再重新编译,发现没有error错误,但有两个警告(warning),原因是定义了a和b,但未对它们赋值。应增加赋值语句或输入语句,使a和b获得值,将程序改为#includeusingnamespacestd;intmain(){inta,b,c;cin>>a>>b;c=a+b;cout>>"a+b=">>a+b;return0;}重新编译,没有编译错误,能通过编译和连接,可以正常运行,在VisualC++6.0环境下运行时屏幕显示如下:59↙a+b=14Pressanykeytocontinue显然这样的输出不理想,“Pressanykeytocontinue”是VisualC++系统在输出了运行结果后自动显示的一个信息,告诉用户“如果想继续工作,请按任何一个键”。当用户按任何一个键后,显示运行结果的窗口消失,屏幕显示回到VisualC++的主窗口,显示出源程序和编译信息。为了解决以上输出不理想的情况,可以在最后一个输出语句中增加输出一个换行符。最后的程序如下:#includeusingnamespacestd;intmain(){inta,b,c;cin>>a>>b;c=a+b;cout<<"a+b="<usingnamespacestd;intmain(){inta,b;c=add(a,b)cout<<"a+b="<usingnamespacestd;intmain(){intadd(intx,inty);inta,b,c;cin>>a>>b;c=add(a,b);cout<<"a+b="<usingnamespacestd;intmain(){voidsort(intx,inty,intz);intx,y,z;cin>>x>>y>>z;sort(x,y,z);return0;}voidsort(intx,inty,intz){inttemp;if(x>y){temp=x;x=y;y=temp;}//{}内3个语句的作用是将x和y的值互换if(zusingnamespacestd;intmain(){intmax(inta,intb,intc=0);inta,b,c;cin>>a>>b>>c;cout<<"max(a,b,c)="<a)a=b;if(c>a)a=c;returna;}运行情况如下:13576↙max(a,b,c)=76(从3个数中找最大者)max(a,b)=13(从前2个数中找最大者)如果想从3个数中找大者,可以在调用时写成“max(a,b,c)”形式,如果只想从2个数中找大者,则在调用时写成“max(a,b)”形式,此时c自动取默认值0,由于0比任何正整数都小,因此从14,5,0中选最大者和从14,5中选大者的结果是一样的。12.输入两个整数,将它们按由大到小的顺序输出。要求使用变量的引用。【解】可以编写出以下程序:#includeusingnamespacestd;intmain(){voidchange(int&,int&);inta,b;cin>>a>>b;if(a>a>>b>>c;a1=a;b1=b;c1=c;sort(a1,b1,c1);cout<j)change(i,j);if(i>k)change(i,k);if(j>k)change(j,k);}voidchange(int&x,int&y){inttemp;temp=x;x=y;y=temp;}运行情况如下:Pleaseenter3integers:2367-55↙2367–55insortedorderis–552367这个程序很容易理解,不易出错。由于在调用sort函数时虚实结合使形参i,j,k成为实参a1,b1,c1的引用(别名),因此通过调用函数sort(a1,b1,c1)既实现了对i,j,k排序,也就同时实现了对a1,b1,c1排序。同样,执行change(i,j)函数,可以实现对实参i和j的互换。14.编一程序,将两个字符串连接起来,结果取代第一个字符串。要求用string方法。【解】可以编写出以下程序:#include#include//程序中若使用字符串变量,必须包含头文件stringusingnamespacestd;intmain(){strings1="week",s2="end";cout<<"s1="<#includeusingnamespacestd;intmain(){stringstr;   //定义字符串变量strinti,n;chartemp;//定义字符变量tempcout<<"pleaseinputastring:";cin>>str;//输入一个字符串赋给字符串变量strn=str.size();//测量str的长度nfor(i=0;i#includeusingnamespacestd;intmain(){inti; 17第1章C++ 的初步知识stringstr[5]={"BASIC","C","FORTRAN","C++","PASCAL"};voidsort(string[]);sort(str);//对字符串排序cout<<"thesortedstrings:"<s[i+1]){t=s[i];s[i]=s[i+1];s[i+1]=t;}}运行结果如下:thesortedstrings:BASICCC++FORTRANPASCAL17.编一个程序,用同一个函数名对n个数据进行从小到大排序,数据类型可以是整型、单精度型、双精度型。用重载函数实现。【解】可以编写出以下两个程序:(1)建立3个函数,分别用于处理整型、单精度型、双精度型数据的排序,在3个函数中都采用选择法排序方法。#include#includeusingnamespacestd;intmain(){longa[5]={10100,-123567,1198783,-165654,3456};intb[5]={1,9,0,23,-45};floatc[5]={2.4,7.6,5.5,6.6,-2.3};voidsort(long[]);voidsort(int[]);voidsort(float[]);sort(a);sort(b);sort(c);return0; 17第1章C++ 的初步知识}voidsort(longa[]){inti,j;longt;for(j=0;j<5;j++)for(i=0;i<5-j;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}cout<<"thesortednumbers:"<a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}cout<<"thesortednumbers:"<a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}cout<<"thesortednumbers:"<#includeusingnamespacestd;intmain(){longa[5]={10100,-123567,1198783,-165654,3456};intb[5]={1,9,0,23,-45};floatc[5]={2.4,7.6,5.5,6.6,-2.3};voidsort(int[]);voidsort(float[]);voidsort(long[]);sort(a);//对长整型数据排序sort(b);//对整型数据排序sort(c);//对单精度型数据排序return0;}voidsort(longa[])//对长整型数据用选择法排序的函数{inti,j,min;longt;for(i=0;i<5;i++){min=i;for(j=i+1;j<5;j++)if(a[min]>a[j])min=j;{t=a[i];a[i]=a[min];a[min]=t;}cout<<"thesortednumbers:"<a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}cout<<"thesortednumbers:"<a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}cout<<"thesortednumbers:"<#includeusingnamespacestd;templatevoidsort(Ta[])//函数模板,采用选择法排序{inti,j,min; 17第1章C++ 的初步知识Tt;for(i=0;i<5;i++){min=i;for(j=i+1;j<5;j++)if(a[min]>a[j])min=j;t=a[i];a[i]=a[min];a[min]=t;}cout<<"thesortednumbers:"<