欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    c++程序设计习题解答.pdf

    • 资源ID:88947577       资源大小:9.27MB        全文页数:103页
    • 资源格式: PDF        下载积分:12金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    c++程序设计习题解答.pdf

    程序设计教程用C+语言编程(第二版习题解答)目录第 1章 概 述.2第 2 章基本数据类型和表达式.4第 3 章 程序的流程控制一一语句.7第 4 章过程抽象一一函数.16第 5 章 构造数据类型.22第 6 章 数据抽象一一类.37第7章 操作符重载.53第 8 章 继承一一派生类.77第 9 章 类 属(泛型)机制一一模板.87第 10章输入/输出(I/O).93第 11章 异常处理.101第 12章 实例-面向对象的Windows应用程序框架.103第1章概述1、简述冯诺依曼计算机的工作模型。答:冯诺依曼计算机的工作模型是:待执行的程序从外存装入到内存中,CPU从内存中逐条地取程序中的指令执行;程序执行中所需要的数据从内存或从外设中获得,程序执行中产生的中间结果保存在内存中,程序的执行结果通过外设输出。2、简述寄存器、内存以及外存的区别。答:寄存器主要用于记录下一条指令的内存地址、当前指令的执行状态以及暂时保存指令的计算 结 果 供 下(几)条指令使用,其作用主要是减少访问内存的次数,提高指令的执行效率。内存用于存储计算机程序(指令和数据),内存由许多存储单元构成,每个存储单元都有一个地址,对存储单元的访问是通过其地址来进行的,与寄存器相比,内存的容量要大得多,但指令访问内存单元所花费的时间比访问寄存器要多得多。外存是大容量的低速存储部件,用于永久性地存储程序、数据以及各种文档等信息,存储在外存中的信息通常以文件形式进行组织和访问,外存储了在容量和速度上与内存不同,另一个区别在于内存中存储的是正在运行的程序和正在使用的数据,外存中存储的则是大量的、并非正在使用的程序和数据。3、CPU能执行哪些指令?答:CPU所能执行的指令通常有:算术指令:实现加、减、乘、除等运算。比较指令:比较两个操作数的大小。数据传输指令:实现CPU的寄存器、内存以及外设之间的数据传输。执行流程控制指令:用于确定下-条指令的内存地址,包括转移、循环以及子程序调用/返回等指令。4、什么是软件?软件是如何分类的?答:计算机软件是计算机系统中的程序以及有关的文档。程序是对计算任务的处理对象(数据)与处理规则(算法)的描述;文档是为了便于人理解程序所需的资料说明,供程序开发与维护使用。软件通常可以分为系统软件、支撑软件和应用软件。系统软件居于计算机系统中最靠近硬件的一级,它与具体的应用领域无关,其他软件一般要通过系统软件发挥作用,如操作系统属于系统软件。支撑软件是指支持软件开发与维护的软件,一般山软件开发人员使用,如软件开发环境就是典型的支撑软件。应用软件是指用于特定领域的专用软件,如人口普查软件、财务软件等。5、什么是虚拟机?答:在由硬件构成的计算机(称 为“裸机”)之上,加上一些软件就得到了一个比它功能更强的计算机,称 为“虚拟机”。6、十进制数0.1的二进制表示是什么?答:(0.1)1 0=(0.0 0 0 1 ioon.)2,它是无限循环小数。也就是说,十进制数0.1无法精确用二进制表示!7、简述程序设计范型。答:基于不同的计算模型来对计算进行描述就形成了不同的程序设计范型。典型的程序设计范型有:过程式、对象式、函数式以及逻辑式等。过程式程序设计是一种以功能为中心、基于功能分解和过程抽象的程序设计范型。一个过程式程序由一些子程序构成,每个子程序对应一个子功能,它实现了功能抽象。对象式程序设计是一种以数据为中心、基于数据抽象的程序设计范型。一个面向对象程序由一些对象构成,对象是由一些数据及可施于这些数据上的操作所组成的封装体。函数式程序设计是围绕函数来进行的,计算过程体现为一系列的函数应用。逻辑程序设计是把程序组织成一组事实和一组推理规则,在事实基础上运用推理规则来实施计算。8、简述程序设计的步骤。答:程序设计-般遵循以下步骤:明确问题;系统设计;用某种语言进行编程;测试与调试;运行与维护9、低级语言与高级语言的不同之处是什么?答:低级语言是指与特定计算机体系结构密切相关的程序语言,它是特定计算机能够直接理解的语言(或与之直接对应的语言),包括机器语言和汇编语言。低级语言的优点在于:写出的程序效率比较高,包括执行速度快和占用空间少。其缺点是:程序难以设计、理解与维护,难以保证程序的正确性。高级语言是指人容易理解和有利于人对解题过程进行描述的程序语言。高级语言的优点在于:程序容易设计、理解与维护,容易保证程序正确性。高级语言的缺点是:用其编写的程序相对于用低级语言编写的程序效率要低,翻译成的目标代码量较大。10、简述编译与解释的区别。答:编译是指把高级语言程序首先翻译成功能上等价的机器语言程序或汇编语言程序,然后执行目标代码程序,在目标代码程序的执行中不再需要源程序。解释则是指对源程序中的语句进行逐条翻译并执行,翻译完了程序也就执行完了,这种翻译方式不产生目标程序。一般来说,编译执行比解释执行效率要高。11、简 述 C+程序的编译执行过程。在你的C+开发环境中运行1.3.2节中给出的简单C+程序。答:首先可以利用某个编辑程序把C+源程序输入到计算机中,并作为文件保存到外存中,文件名为“*.cpp”和“*.h”。然后利用某个C+编译程序对保存在外存中的C+源程序进行编译,编译结果作为目标文件保存到外存,文件名为“*.obj。然后再通过一个联接程序把由源文件产生的目标文件以及程序中用到的一些系统功能所在的目标文件联接起来,作为一个可执行文件保存到外存,文件名为“*.exe。最后通过操作系统提供的应用程序运行机制,把可执行文件装入内存,运行其中的可执行程序。在 Visual C+6.0环境中,首先要建立一个project(项目);其次往该project中添加、编辑程序模块(源文件);然后选择菜单Build中的Build.或 Rebuild All;最后选择菜单Build中的 Execute 运行程序。12、C+的单词分成哪些种类?答:构成C H 的单词有:标识符、关键词、字面常量、操作符以及标点符号等。13、下面哪一些是合法的C+标识符?extern,_bookz Car,car_l,calr,lcar,friend,carl_Car,Car_Type,No.l,123答:合法的 C+标识符:book,Car,car l,calr,carl Car,Car Type第2章基本数据类型和表达式1、C+提供了哪些基本数据类型?检查你的计算机上各种类型数据所占内存空间的大小(字节数)。答:C+提供了以下5 种基本数据类型:整数类型、实数类型、字符类型、逻辑类型以及空值类型。一台计算机上各种数据类型的数据所占用的内存大小(字节数)可以通过“sizeof(类型名)”来计算。2、下面哪一些是合法的C+字面常量,它们的类型是什么?-5.23,le+50,-25,105,20.20,e5,le-5,-0.0e5,*n,-000,A,5,3.14,falsered,r,f Today is Monday.,答:字面常量是指在程序中直接写出常量值的常量。-5.2 3,le+5 0,-2 5,20,.20,le-5,-0.0e5,n,-000,A,5,r,f ,Today is M onday.,都是字面常量。其中:整数类型常量:-25,20,-000实数类型常量:-5.2 3,le +50,.20,le-5,-0.0 e5字符常量:n I A,5,r ,f 字符串常量:Today is Monday.,3、什么是符号常量?符号常量的优点是什么?答:符号常量是指有名字的常量,在程序中通过常量的名字来使用这些常量。程序中使用符号常量有以下优点:1)增加程序易读性2)提高程序对常量使用的一致性3)增强程序的易维护性4、如何理解变量?变量定义和声明的作用是什么?答:在程序中,其值可以改变的量称为变量。变量可以用来表示可变的数据。程序中使用到的每个变量都要有定义。变量定义指出变量的类型和变量名,另外还可以为变量提供一个初值。C+中使用变量之前,必须对使用的变量进行声明(变量定义属于一种声明,即:定义性声 明),变量声明指出了一个变量的类型,使得编译程序能对变量的操作进行类型检查并做相应的类型转换。整个程序中,某变量的定义只能由一个,但它的声明可以有多个。5、什么是表达式?其作用是什么?答:表达式是由操作符、操作数以及圆括号所组成的运算式。在程序设计语言中,对数据操作的具体实施是通过表达式来描述的。6、操作符的优先级和结合性分别是指的什么?答:运算符的优先级和结合性决定表达式中各个运算符的运算次序。操作符的优先级规定了相邻的两个操作符谁先运算:优先级高的先计算;如果相邻的两个操作符具有相同的优先级,则需根据操作符的结合性来决定先计算谁,操作符的结合性通常分为左结合和右结合:左结合表示从左到右计算,右结合表示从右到左计算。7、表达式中的类型转换规则是什么?下面的表达式计算时如何进行操作数类型转换?(1)3/5*12.3(2)9+10*5.2(3)12U+3.0F*24L答:表达式中类型转换规则是:基于单个操作符依次进行转换。1)3 与 5 同类型,不转换,结果为0,转换成double型后与12.3做乘法。2)10转换成double型与5.2做乘法,a,转换成double型后与前者结果做加法。3)3.0F与 24L均转换成double型后做乘法,12U转换成double型后与前者结果做加法。8、将下列公式表示成C+的表达式:(1)i +4ac(可利用C+标准库中的求平方根的函数:sqrt(x)2a(2)s(s-a)(s-b)(s-c)u 1+2.5+c答:1)(-l*b+sq rt(b*b-4*a*c)/(2*a)2)s q r t(s*(s-a)*(s-b)*(s-c)3)(a*b)/(c*d)*(3/(1+(b/(2.5+c)+(4*p i*r*r*r/3)9、写出下列条件的C+表达式(1)i 能被j 整除。(2)ch为字母字符。(3)m 为偶数。(4)n 是小于100的奇数。(5)a、b、c 构成三角形的三条边。答:1)i%j=02)(ch=a)&(ch=A)&(ch =Z)3)m%2=04)(n0)&(b0)&(c0)&(a+bc)&(b+ca)&(c+ab)或(a+b)c)&(abs(a-b)0)&(b0)&(c0)可以不用判断10、在你的计算机上运行下面的程序:#include using namespace std;int main()double a=3.3,b=l.1;int i=a/b;cout i endl;return 0;结果与你预期的是否相符?如果不符,请解释它的原因。答:运行结果为2。由于十进制小数3.3和 1.1无法用double型精确表示。通过查看结果内存内的内容,最终结果比3.0略小,所以强制转换成int型后结果为2。11、不引进第三个变量,如何交换两个整型变量的值?答:方法一:a=bAa;b=aAb;a=bAa;方法二:a=a+b;b=a-b;a=a-b;12、举例说明把int类型转成float类型可能会丢失精度。答:如果int型与float型都是4 个字节,山于在float型的数据表示中,有若干位用来表示指数,因此,尾数的位数不到4 个字节(根据IEEE标准,只有23个二进制位)。如果一个int型的数大于23位(二进制),则无法用float型精确表示。例如:int x=0 x01000001;float y=x;/x 的最后一位1不是被截掉就是被舍入!cout x endl setprecision(30)y endl;第3章 程序的流程控制一一语句1、编写一个程序,将华氏温度转换为摄氏温度。转换公式为:c=(f-3 2),其中,c 为摄氏温度,f 为华氏温度解:#include using namespace std;int main()double c,f;cout Please input an F-temperature:endl;cin f;c=(f-32)*5/9;cout The C-temperature is:n c endl;return 0;2、编写一个程序,将 用 2 4 小时制表示的时间转换为1 2 小时制表示的时间。例如,输 入 20和 16(2 0 点 16分),输出8:16pm;输入8 和 16(8 点 16分),输 出 8:16am。解:#include using namespace std;int main()int hour,minute;char noon;cout Please input a time in 24-hour format:endl;cout h o u r:c in hour;if(hour23)cout ”The input hour is wrong!M endl;return-1;if(hour12)hour=hour-12;noon=*pr;elsenoon=af;cout minute:;cin minute;if(minute59)cout ”The input minute is wrong!n endl;return-1;cout endl ”The time in 12-hour fbnnat is:hour minute;if(noon=p)cout Mpmn endl;elsecout am endl;return 0;)3、编写一个程序,分别按正向和逆向输出小写字母az。解:#include using namespace std;int main()char c;fbr(c=a*;c-af;c)cout c ;cout endl;return 0;4、编写一个程序,从键盘输入一个正整数,判断该正整数为几位数,并输出其位数。解:/include using namespace std;int main()unsigned int gzint;int count=0;while(1)cout ”Please input an integer(greater than zero):”endl;cin gzint;if(gzint=0)cout nYour input is wrong!Please input again./1 endl;elsebreak;while(gzint!=0)gzint=gzint/10;count-H-;)cout The number of digits in the interger is:count endl;return 0;5、编写一个程序,对输入的一个算术表达式(以字符#结束),检查圆括号配对情况。输出:配对、多左括号或多右括号。解:/include using namespace std;int main()int count=0;char ch;cout Please input an expression:endl;for(cin ch;ch!=#*;cin ch)if(ch=V)count+;else if(ch=7)count;if(count=0)cout ”配对!”w endl;else if(count 0)cout ”多左括号!”v=”进行计数。解:#include using namespace std;int main()int count=0;char chl=、0;ch2;cout Please input a string(terminated with#):endl;for(cinch2;ch2!=#;cinch2)if(ch2=,=,&ch 1 =)count+;chi=ch2;)cout Number of=:count endl;return 0;|7、假定邮寄包裹的计费标准如下(重量在档次之间时往上一挡靠):重量(克)收费(元)15 530 945 1260 14(每 满 1000公里加收1 元)6 0 以上 15(每 满 1000公里加收2 元)编写一个程序,输入包裹重量和邮寄距离,计算并输出收费数额。解:#include using namespace std;int main()int charge;double weight;cout Please input the weight of the package:endl;cin weight;if(weight=0)cout ”The input weight is wrong!endl;else if(weight=15)charge=5;else if(weight=30)charge=9;else if(weight=45)charge=12;else double distance;cout ”Please input the distance:endl;cin distance;if(distance=0)cout The inputed distance is wrong!n endl;elsedistance/=1000;if(weight=60)charge=14+(int)distance;elsecharge=15+(int)distance*2;)cout charge endl;return 0;)8、编写一个程序,计算圆周率。可利用公式:直到最后一项的绝对值小于IO-%解:#include#include using namespace std;int main()double item=1.0,sum=0.0;int i=l,sign=l;while(fabs(item)=le-8)sum+=item;sign*=-1;i+=2;item=sign/(double)i;cout setprecision(8)sum*4 endl;return 0;9、编写一个程序,求所有这样的三位数,它们等于它们的各位数字的立方和。例如:153=I3 4-33+53解:#include using namespace std;int main()for(int n=100;n=999;n-H-)int ij,k;i=n/100;百位数字j=n%100/10;/十位数字k=n%10;个位数字if(n=i*i*i+j*j*j+k*k*k)cout n endl;return 0;|或#include using namespace std;int main()for(int i=1;i=9;i+)int n=i*100,m=i*i*i;for(intj=0;j=9;j+)int nl=n+j*10,ml=m+j*j*j;for(int k=0;k=9;k+)if(nl+k=ml+k*k*k)cout nl+k endl;)Ireturn 0;10、编写一个程序,求 a 和 b 的最大公约数。解:#include using namespace std;int main()int a,b;cout Please input a,b:endl;cin a b;int c=(ab)?b:a;while(c 0)if(a%c=0&b%c=0)break;c-;)cout c endl;return 0;或#include using namespace std;int main()int a,b;cout Please input a,b:endl;cin a b;int c;do c=a-b*(a/b);a=b;b=c;while(c!=0);cout a endl;return 0;11、编写一个程序,输 出 卜 进制乘法表。12391123922461833692799IS27SI解:#include using namespace std;int main()for(int i=0;i 10;i+)if(i!=0)couti;cout t”;for(intj=l;j 10;j+)if(i*j!=0)couti*j HtH;elsecout j cout endl;return 0;12、将下面的for循环重写为等价的while循环。for(i=0;imax_length;i+)if(input_linei=?1)quest_count+;解:i=0;while(i max length)if(input_linei=?)quest_count-H-;i f13、说明下面的三个程序可以用图3-6中的三种控制结构来表示。第4章过程抽象一一函数1、简述子程序的作用。答:子程序是有名字的一段程序代码,它通常完成一个独立的(子)功能。在程序的其他地方通过子程序的名字来使用它们。除了能减少程序代码外,采用子程序的主要作用是实现过程抽象,使用者只需知道子程序的功能,而不需要知道它是如何实现的,这有利于大型、复杂程序的设计和理解。2、简述局部变量的作用。答:1、实现信息隐藏,使得函数外无法访问该函数内部使用的数据。2、减少名冲突,一个函数可以为局部变量定义任何合法名字,而不用担心与其他函数的局部变量同名。2、局部变量的内存空间在栈中分配,函数调用完之后释放,因此,使用局部变量能节省程序的内存空间。3、简述变量的生存期和标识符的作用域。答:变量的生存期指程序运行时一个变量占有内存空间的时间段。C+把变量的生存期分为静态、自动和动态三种。标识符的作用域是指:一个定义了的标识符的有效范围,即该标识符所标识的程序实体能被访问的程序段。在 C+中,根据标识符的性质和定义位置规定了标识符的作用域。作用域分为:全局作用域、文件作用域、局部作用域、函数作用域、函数原型作用域、类作用域、名空间作用域。4、全局标识符与局部标识符在哪些方面存在不同?答:1、作用域不同2、生存期不同3、用途不同,全局标识符用于标识共享的实体,而局部标识符用于标识专用的实体。5、下面的声明中哪一些是定义性声明?这些定义性声明的非定义性声明是什么?(1)const int i=l;(2)static double square(double dbl)return dbl*dbl;(3)char*str;(4)struct Point;(5)char*(*pFn)(int(*)(char*,int),char*);答:1)是。非定义性声明:extern const int i;2)是。非定义性声明:extern double square(double);3)是。非定义性声明:extern char*str;4)不是。5)是。非定义性声明:extern char*(*pFn)(int(*)(char*,int),char*);6、下面的宏cubel和函数cube2相比,各有什么优缺点?#define cubel(x)(x)*(x)*(x)double cube2(double x)return x*x*x;答:小型函数的频繁调用会带来程序执行效率的严重下降,宏的出现解决了函数调用效率不高的问题,但宏本身也存在很多问题:(1)宏会出现重复计算,(2)不进行参数类型检查和转换,(3)不利于一些工具对程序的处理。而函数可以很好的处理这些问题。另外,对于:in ta;当 a 的值很大时,cubel(a)得不到正确结果!(因为结果类型为in t,而如果a*a*a的结果超出了血型的范围,则结果将会截断!)7、编写一个函数d ig its,k),它计算整数n 的从右向左的第k 个数字。例如:digit(123456,3)=4digit(1234,5)=0答:int digit(int n,int k)for(int i=l;ik;i+)n=n/10;return n%10;8、分别用函数实现习题3.8中的第1、4、7 和 10题的程序功能。答:第 1题:double Fahrenheit_To_Celsius(double x)(return(x-32)*5/9;)第 4 题:int num_ofdigits(int gzint)int count=0;if(gzint0)gzint=-gzint;while(gzint!=0)gzint=gzint/10;count-H-;return count;第 7 题:double charge(double weight,double distance)double money=0;if(weight=15)money=5;elseelseelseelseif(weight=30)if(weight=45)if(weightb?a:b;for(int i=max;i0;i)if(a%i=0)&(b%i=0)return i;)9、写出下面程序的执行结果:#include using namespace std;int count=0;int fib(int n)count+;if(n=l|n=2)return 1;elsereturn fib(n-1)+fib(n-2);)int main()cout fib(8);cout ,*count l)答:#include using namespace std;double Hermit_Iterative(int,double);/迭代方法double Hermit_Recursion(int,double);/递归方法void main()const int n=3;/n与x可自行指定double x=3.14;coutHermit_Iterative(n,x)endlHermit_Recursion(n,x)endl;double Hermit_Iterative(int n,double x)if(n=0)return 1;else if(n=l)return 2*x;else double resl=l,res2=2*x;double Result=0;for(int i=2;i0,n0)答:int Ack(int m,int n)if(m=0)return n+1;else if(n=0)return Ack(m-1,1);elsereturn Ack(m-1,Ack(m,n-1);)12、根据下图写一个函数:int path(int n);用于计算从结点1到结点n(n 大 于 1)共有多少条不同的路径。答:int path(int n)if(n=l)return 1;if(n=2)return 1;if(n=3)return 2;if(n%2=0)return path(n-l)+path(n-2)+path(n-3);elsereturn path(n-l)+path(n-2);)13、编程解决下面的问题:若一头小母牛,从出生起第四个年头开始每年生一头母牛,按此规律,第 n 年有多少头母牛?答:除了第一年到第三年外,每一年的母牛数应该是L一年的母牛数加I二三年前的母牛数(现在它们是第四年T,要生小牛了!)int f(int n)if(n=l|n=2|n=3)return 1;return f(n-3)+f(n-1);14、假设有三个重载的函数:void func(int,double);void func(long,double);void func(intz char);对下面的函数调用,指出它们分别调用了哪一个重载函数;如果有歧义,指出导致歧义的重载函数定义。func(*c*,3.0);func(3L,3);func(three,3.0);func(3LZ c*);func(true,3);答:func(*c*,3.0);与 void func(int,double);匹 国 已func(3L,3);与 void func(long,double);匹配func(“three”,3.0);没有与之匹配的函数func(3L,c*);与 void func(long,double);和 void func(int,char);均能匹配func(true,3);与 void func(int,double);和 void func(int,char);均能匹配15、下面的函数定义为什么是正确的?在函数f 中如何区分(使用)它们?void f()int f;答:两个f 的作用域不一样,void f()中的f 为全局作用域,in tf;中的f 为局部作用域。在函数f 中如果使用局部变量,则用f;如果使用函数f,则用:f。16、为什么一般把内联函数的定义放在个头文件中?答:为了防止同一个内联函数的各个定义之间的不一致,往往把内联函数的定义放在某个头文件中,在需要使用该内联函数的源文件中用文件包含命令#include把该头文件包含进来。由于内联函数名具有文件作用域,因此,不会出现重复定义问题。17、用循环实现错误!未找到引用源。中的辗转相除法计算最大公约数。_ 22答:int gcd(int xz int y)while(y!=0)int t=y;y=x%y;x=t;)return x;)第5章构造数据类型1、枚举类型有什么好处?C+对枚举类型的操作有何规定?答:使用枚举类型有利于提高程序的易读性;使用枚举类型也有利于保证程序的正确性。首先,可以对枚举类型实施赋值操作,但不同枚举类型之间不能相互赋值,而且不能把一 个整型数直接赋值给枚举类型的变量。还可以对枚举类型实施比较运算。还可以对枚举类型实施算术运算,对枚举类型的运算前要转换成对应的整型值,且运算结果类型为算术类型,而且不能对枚举类型的值直接进行输入/输出。2、指针类型主要用于什么场合?引用类型与指针类型相比,其优势在哪里?答:指针类型主要用于参数传递和对动态变量的访问。在C+中,指针类型还用于访问数组元素,以提高访问效率。引用类型与指针类型都可以实现通过一个变量访问另一个变量,但访问的语法形式不同:引用是采用直接访问形式,指针则采用间接访问形式。在作为函数参数类型时,引用类型参数的实参是一个变量,而指针类型参数的实参是一个变量的地址。除了在定义时指定的被引用变量外,引用类型变量不能再引用其他变量;而指针变量定义后可以指向其他同类型的变量。因此,引用类型比指针类型要安全。引用类型的间接访问对使用者而言是透明的。3、写出下面程序的运行结果:#include using namespace std;void f(int&xz int y)y=x+y;x=y%3;cout x 、t y endl;int main()int x=10,y=19;cout x tz y endl;f(X,x);cout x t y endl;return 0;答:2 2910 22 202 24、从键盘输入某个星期每一天的最高和最低温度,然后计算该星期的平均最低和平均最高温度并输出之。解:#include using namespace std;enum Day SUN,MON,TUE,WED,THU,FR1,SAT;int main()double max,min,maxsum=0,minsum=0;for(Day d=SUN;d=SAT;d=(Day)(d+l)cout Please input n;switch(d)caseSUN:cout“Sunday”;break;caseMON:coutMonday;break;caseTUE:coutTuesdayn;break;caseWED:coutWednesdayn;break;caseTHU:cout“Thursday”;break;caseFRI:coutFridayH;break;caseSAT:cout“Saturday”;break;)cout n*s temperature(max min):“max min;maxsum+=max;minsum+=min;)cout The average temperature of maxism is:maxsum/7.0 endl;cout The average temperature of minism is:“minsum/7.0 endl;return 0;5、编写一个函数,判 断 其 in t型参数值是否是回文数。一样,例如,9783879就是一个回文数。回文数是指从正向和反向两个方向读数字都解:bool is_huiwen(int num)char wei100,i=0;while(num!=0)weii =num%10;num/=10;_ 24i+;)for(int j =0;j =i/2;j+)if(weij !=weii-j-1)return false;)return true;6、编写一个函数int_to_str(intn,charstr),把一个int型 数(由参数n 表示)转换成一个字符串(放在 str中)。解:void int_to_str(int num,char*str)char c;int i=0;while(num!=0)stri=num310+*0*;num/=10;i+;)stri =10*;for(int j =0;j =0)xl=(sqrt(i)-b)/(2*a);x2=(0-sqrt(i)-b)/(2*a);return 1;)else xl=(0-b)/(2*a);x2=sqrt(0-i)/(2*a);return 0;)8、编写一个程序,从键盘输入一个字符串,分别统计其中的大写字母、小写字母以及数字的个数。_ 25解:#include using namespace std;int main()char str100;cout str;int count_lower=0,count_upper=0,count_num=0;for(int i=0;stri!=*0;i+)if(str i =&str i=*a*&stri=*0*&stri=*9*)count_num+;)cout count_upper 1t*count_lower t*count_num endl;return 0;0 2 19、设有一个矩阵:1 0 2,现把它放在一个二维数组a中。写出执行下面的语句之后a的值:1 2 0for(int i-Q;i=2;i+)for(int j=0;j=2;j+)aij=aaijaji;解:0 2 02 0 02 2 010、实现下面的数组元素交换位置函数:void swap(int a z int m,int n);该函数能够把数组a的前m个元素与后n个元素交换位置,即,交换刖:a,亚,aM,a M+i,而+2,一,M+N交换后:M+l,孙+2,r 3-M+NZ HI,42,要求:除数组a外,不得引入其它数组。解:void swap(int a,int m,int n);for(int i=0;im;i+)int t=a 0;for(int j=l;jm+n;j+)_ 26aj-1=ajl;Am+n-1 =t;)11、编写一个程序,计算一个矩阵的鞍点。矩阵的鞍点是指矩阵中的一个位置,该位置上的元素在其所在的行上最大、列上最小。(一个矩阵也可能没有鞍点。)#include using namespace std;#define M 3#define N 3int main()int aM N;存放矩阵int i,j;/输入矩阵元素for(i=0;iM;i+)for(j=0;jN;j +)cin aij;int lin_maxM,/存放各行的最大元素col_minN;/存放各列的最小元素/计算每行的最大元素for(i=0;iM;i+)int max=ai0;for(j =l;jmax)max=aij;lin_maxi =max;)/计算每列的最小元素for(j=0;jN;j+)int min=a0j;for(i=l;iM;i+)if aijmin)min=aij;col_minj =min;)/求鞍点for(i=0;iM;i+)for(j=0;jN;j+)if(ai j=lin_maxi&ai j=col_minj)cout 鞍点是:*i *,*j endl;return 0;)cout 没有鞍点n”;return 0;12、编程实现:在一个由NXN(N为 大 于1的奇数)个方格组成的方阵中,填 入1、2、3.N2

    注意事项

    本文(c++程序设计习题解答.pdf)为本站会员(文***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开