您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > C++Primer中文版答案 (第四版) WORLD 版
习题1.1查看所用的编译器文档,了解它所用的文件命名规范。编译并运行本节的main程序。【解答】一般而言,C++编译器要求待编译的程序保存在文件中。C++程序中一般涉及两类文件:头文件和源文件。大多数系统中,文件的名字由文件名和文件后缀(又称扩展名)组成。文件后缀通常表明文件的类型,如头文件的后缀可以是.h或.hpp等;源文件的后缀可以是.cc或.cpp等,具体的后缀与使用的编译器有关。通常可以通过编译器所提供的联机帮助文档了解其文件命名规范。习题1.2修改程序使其返回-1。返回值-1通常作为程序运行失败的指示器。然而,系统不同,如何(甚至是否)报告main函数运行失败也不同。重新编译并再次运行程序,看看你的系统如何处理main函数的运行失败指示器。【解答】笔者所使用的Windows操作系统并不报告main函数的运行失败,因此,程序返回-1或返回0在运行效果上没有什么区别。但是,如果在DOS命令提示符方式下运行程序,然后再键入echo%ERRORLEVEL%命令,则系统会显示返回值-1。习题1.3编一个程序,在标准输出上打印“Hello,World”。#includeiostream#includewindows.husingnamespacestd;intmain(){system(CLS);coutHello,World!endl;return0;}习题1.4我们的程序利用内置的加法操作符“+”来产生两个数的和。编写程序,使用乘法操作符“*”产生两个数的积。#includeiostream#includewindows.husingnamespacestd;intmain(){system(CLS);coutEntertwonumbers:endl;intv1,v2;cinv1v2;coutTheproductofv1andv2isv1*v2endl;return0;}习题1.5我们的程序使用了一条较长的输出语句。重写程序,使用单独的语句打印每一个操作数。#includeiostream#includewindows.husingnamespacestd;intmain(){system(CLS);coutEntertwonumbers:endl;intv1,v2;cinv1v2;coutThesumof;coutv1;coutand;coutv2;coutis;coutv1+v2;coutendl;return0;}习题1.6解释下面的程序段:std::coutThesumofv1;andv2;isv1+v2std::endl;这段代码合法吗?如果合法,为什么?如果不合法,又为什么?【解答】这段代码不合法。注意,第1、2、4行的末尾有分号,表示这段代码包含三条语句,即第1、2行各为一个语句,第3、4行构成一个语句。“”为二元操作符,在第2、3两条语句中,第一个“”缺少左操作数,因此不合法。在第2、3行的开头加上“std::cout”,即可更正。习题1.7编译有不正确嵌套注释的程序。【解答】由注释对嵌套导致的编译器错误信息通常令人迷惑。例如,在笔者所用的编译器中编译1.3节中给出的带有不正确嵌套注释的程序:#includeiostream/**commentpairs/**/cannotnest.*cannotnestisconsideredsourcecode,*asistherestoftheprogram*/intmain(){return0;}编译器会给出如下错误信息:errorC2143:syntaxerror:missing';'before''errorC2501:'include':missingstorage-classortypespecifierswarningC4138:'*/'foundoutsideofcomment(第6行)errorC2143:syntaxerror:missing';'before'{'(第8行)errorC2447:'{':missingfunctionheader(old-styleformallist?)(第8行)习题1.8指出下列输出语句哪些(如果有)是合法的。std::cout/*;std::cout*/;std::cout/**/*/;预测结果,然后编译包含上述三条语句的程序,检查你的答案。纠正所遇到的错误。【解答】第一条和第二条语句合法。第三条语句中操作符之后至第二个双引号之前的部分被注释掉了,导致操作符的右操作数不是一个完整的字符串,所以不合法。在分号之前加上一个双引号即可更正。习题1.9下列循环做什么?sum的最终值是多少?intsum=0;for(inti=-100;i=100;++i)sum+=i;【解答】该循环求-100~100之间所有整数的和(包括-100和100)。sum的最终值是0。习题1.10用for循环编程,求从50~100的所有自然数的和。然后用while循环重写该程序。【解答】用for循环编写的程序如下:#includeiostream#includewindows.hintmain(){intsum=0;system(CLS);for(inti=50;i=100;++i)sum+=i;std::coutSumof50to100inclusiveissumstd::endl;return0;}用while循环编写的程序如下:#includeiostream#includewindows.husingnamespacestd;intmain(){intsum=0,i=50;system(CLS);while(i=100){sum+=i;i++;}coutSumof50to100inclusiveissumendl;return0;}习题1.11用while循环编程,输出10~0递减的自然数。然后用for循环重写该程序。【解答】用while循环编写的程序如下:#includeiostream#includewindows.husingnamespacestd;intmain(){inti=10;system(CLS);while(i=0){couti;i--;}coutendl;return0;}用for循环编写的程序如下:#includeiostream#includewindows.husingnamespacestd;intmain(){system(CLS);for(inti=10;i=0;i--){couti;}coutendl;return0;}习题1.12对比前面两个习题中所写的循环。两种形式各有何优缺点?【解答】在for循环中,循环控制变量的初始化和修改都放在语句头部分,形式较简洁,且特别适用于循环次数已知的情况。在while循环中,循环控制变量的初始化一般放在while语句之前,循环控制变量的修改一般放在循环体中,形式上不如for语句简洁,但它比较适用于循环次数不易预知的情况(用某一条件控制循环)。两种形式各有优点,但它们在功能上是等价的,可以相互转换。习题1.13编译器不同,理解其诊断内容的难易程度也不同。编写一些程序,包含本小节“再谈编译”部分讨论的那些常见错误。研究编译器产生的信息,这样你在编译更复杂的程序遇到这些信息时不会陌生。【解答】对于程序中出现的错误,编译器通常会给出简略的提示信息,包括错误出现的文件及代码行、错误代码、错误性质的描述。如果要获得关于该错误的详细信息,一般可以根据编译器给出的错误代码在其联机帮助文档中查找。习题1.14如果输入值相等,本节展示的程序将产生什么问题?【解答】sum的值即为输入值。因为输入的v1和v2值相等(假设为x),所以lower和upper相等,均为x。for循环中的循环变量val初始化为lower,从而val=upper为真,循环体执行一次,sum的值为val(即输入值x);然后val加1,val的值就大于upper,循环执行结束。习题1.15用两个相等的值作为输入编译并运行本节中的程序。将实际输出与你在习题1.14中所做的预测相比较,解释实际结果和你预计的结果间的不相符之处。【解答】运行1.4.3节中给出的程序,输入两个相等的值(例如3,3),则程序输出为:Sumof3to3inclusiveis3与习题1.14中给出的预测一致。习题1.16编写程序,输出用户输入的两个数中的较大者。#includeiostream#includewindows.husingnamespacestd;intmain(){system(CLS);coutEntertwonumbers:endl;intv1,v2;cinv1v2;if(v1=v2)coutThebiggernumberis:v1endl;elsecoutThebiggernumberis:v2endl;return0;}习题1.17编写程序,要求用户输入一组数。输出信息说明其中有多少个负数。#includeiostream#includewindows.husingnamespacestd;intmain(){intamount=0,value;system(CLS);//读入数据直到遇见文件结束符,计算所读入的负数的个数while(cinvalue)if(value=0)++amount;coutAmountofallnegativevaluesreadisamountstd::endl;return0;}习题1.18编写程序,提示用户输入两个数并将这两个数范围内的每个数写到标准输出。#includeiostream#includewindows.husingnamespacestd;intmain(){system(CLS);coutEntertwonumbers:endl;intv1,v2;cinv1v2;intlower,upper;lower=v1;upper=v2;if(v1=v2){upper=v1;lower=v2;}coutValuesoflowertoupperinclusiveare:endl;for(;lower=upper;lower++)coutlower;coutendl;return0;}习题1.19如果上题给定数1000和2000,程序将产生什么结果?修改程序,使每一行输出不超过10个数。【解答】所有数的输出连在一起,不便于阅读。程序修改如下:#includeiostream#includewindows.husingnamespacestd;intmain(){system(CLS);coutEntertwonumbers:endl;intv1,v2;cinv1v2;intlower,upper;lower=v1;upper=v2;if(v1=v2){upper=v1;lower=v2;}coutValuesoflowertoupperinclusiveare:endl;for(intcount=1;lower=upper;lower++,count++){coutlower;if(count%10==0)coutendl;}coutendl;return0;}习题1.20编写程序,求用户指定范围内的数的和,省略设置上界和下界的if测试。假定输入数是7和3,按照这个顺序,预测程序运行结果。然后按照给定的数是7和3运行程序,看结果是否与你预测的相符。如果不相符,反复研究关于for和while循环的讨论直到弄清楚其中的原因。#includeios
本文标题:C++Primer中文版答案 (第四版) WORLD 版
链接地址:https://www.777doc.com/doc-3391303 .html