《C++面向对象程序设计》习题答案_第1页
《C++面向对象程序设计》习题答案_第2页
《C++面向对象程序设计》习题答案_第3页
《C++面向对象程序设计》习题答案_第4页
《C++面向对象程序设计》习题答案_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C+程序设计习题解答II目录TOC o 1-5 h z HYPERLINK l bookmark0第2部分习题解答2 HYPERLINK l bookmark2第1章面向对象程序设计概述2 HYPERLINK l bookmark4第2章面向过程程序设计12 HYPERLINK l bookmark6第3章类和对象18 HYPERLINK l bookmark16第4章继承与派生24 HYPERLINK l bookmark20第5章多态性与虚函数33 HYPERLINK l bookmark26第6章友元与静态成员37 HYPERLINK l bookmark28第7章运算符重载41 HYP

2、ERLINK l bookmark30第8章泛型编程50 HYPERLINK l bookmark32第9章输入/输出55 HYPERLINK l bookmark34第10章异常处理61 第 #页 第 页第2部分习题解答第1章面向对象程序设计概述一.简答题简述面向过程程序设计和面向对彖程序设计的编程思想,体会面向对彖程序设计的优点。【答案要点】面向过程程序设计的编程思想:功能分解、逐步求精、模块化、结构化。当要设计一个目标系统时,首先从整体上概括出整个系统需要实现的功能,然后对系统的每项功能进行逐层分解,直到每项子功能都足够简单,不需要再分解为止。具体实现系统时,每项子功能对应一个模块,模块

3、间尽量相对独立,通过模块间的调用关系或全局变量而有机地联系起来。面向对彖程序设计的编程思想:(1)客观世界中的事物都是对象(object),对彖之间存在一定的关系。(2)用对彖的属性(attribute)描述事物的静态特征,用对彖的操作(op亡latum)描述爭物的行为(动态特征)。(3)对象的属性和操作结合为一体,形成一个相对独立、不可分的实体。对象对外屏蔽其内部细节,只留下少量接口,以便与外界联系。(4)通过抽象对对彖进行分类,把具有相同属性和相同操作的对象归为一类,类是这些对彖的抽彖描述,每个对彖是其所属类的一个实例。(5)复杂的对彖可以用简单的对象作为其构成部分。(6)通过在不同程度上

4、运用抽彖的原则,可以得到一般类和特殊类。特殊类继承一般类的属性与操作,从而简化系统的构造过程。(7)对象之间通过传递消息进行通信,以实现对彖之间的动态联系。(8)通过关联表达类之间的静态关系。与传统的面向过程程序设计相比,面向对彖程序设计的优点如下:(1)从认识论的角度看,面向对彖程序设计改变了软件开发的方式。软件开发人员能够利用人类认识事物所采用的一般思维方式来进行软件开发。(2)面向对象程序中的数据的安全性高。外界只能通过对象提供的对外接II操作对象中的数据,这可以有效保护数据的安全。(3)面向对象程序设计有助于软件的维护与复用。某类对象数据结构的改变只会引起该类对彖操作代码的改变,只要其

5、对外提供的接II不发生变化,程序的其余部分就不需要做任何改动。面向对象程序设计中类的继承机制有效解决了代码复用的问题。人们可以像使用集成电路(IC)构造计算机硕件那样,比较方便地重用对彖类来构造软件系统。二、编程题【程序参考代码】严学生信息管理系统C语言源代码student.c*/includeincludeinclude#defiiieMAXSIZE100typedefstmctmtyear;mtmonth:mtday;Date;typedefstructStudchaiNum12;cliarNamell;cliaiSex2;/*包含输入/输出头文件可/*包含字符串处理头文件*/*能够处理的

6、学生总人数,可以随意修改*/严用于存放生口信息的结构体引用于存放学生信息的结构体引严学号为11位引严姓名,最多5个汉字*/严性别,男记为m,女记为/严出生口期可严三门课成绩引/*总成绩、平均成绩*/DateButhday;floatEnglish.DataStructuie.CPlusPlus;floatSum,Av-erage;Student;charCurFile40;mtIsOpen=0;mtfbund=O;StudentstudMAXSIZE;mtlndex=0;各自定义函数原型声明*/voidCreateQ;voidOpen();voidDisplayQ;voidSearch0;mt

7、SeaicliNum(char*Num);/*存放当前正在操作的磁盘文件的文件名*/严当前是否有磁盘文件被打开标志可严在查找学生信息时是否找到标志可/*用于存放读入内存中的所有学生信息的全局数组引严存放实际学生人数的全局变量可严新建学生信息文件勺/*打开学生信息文件,并读取学生信息到全局数组stud中*/严显示学生信息引严查询学生信息引严按学号查询学生信息引严添加学生信息引严修改学生信息引/*删除学生信息可/*统计所有学生某一科目总成绩引严学生信息排序可/*备份学生信息引严系统功能菜单可mtSeaicliName(chai*Name);/*按姓名查询学生信息*7voidAppend();voi

8、dModify():voidDeleteQ;voidTotalQ;voidSort();voidBackupQ;voidmenuQmtchoice;严用于保存用户对功能菜单的选择结果*7fo】(;)/*显示系统功能菜单*/prmtfC*1新建学生信息文件prmtfC*2.打开学生信息文件prmtfC*3显示学生信息prmtfC*4.查询学生信息prmtfC*5添加学生信息prmtf(H*6.修改学生信息prmtf(H*7.删除学生信息prmtf(H*8统计学生信息prmtf(H*9.学生信息排序prmtfC*10.,备份学生信息prmtfC*0.退岀系统“*nn)pruitfC*学生信息管理系

9、统*5“);priiitf(n*nM)*4:*4:*-*4:*-*4:*-*4:*-*4:*-*4:*-*4:*-*4:*-*4:*-priiitf(n*nM)pimtfC请选择要执行的操作(08):_”);scaiif(H%d,&choice);switch(choice)case1:CreateQ;break;case2:Open();break;case3:DisplayQ;break;case4:Search();break;case5:Append();break;case6:ModifyQ;break;case7:DeleteQ;break;case8:TotalQ;break;c

10、ase9:Sort。;break;case10:BackupQ;break;case0:return;default:printf(H选择错误!请重新选择。iiH);/*switch结棗*7/*for结束可voidReOrExQ/*在用户执行完一项系统功能后,可以选择:是继续运行系统,还是退出系统可mtn;“*”*priiitf(nii*nH)prrntf(H*1.返回上级菜单和*。;pi-rntfC*0.退出系统*nM);prmtf(n请选择(1/0)?J1);scanf(”d”、&n);if(n=0)*)prrntfC*谢谢使用本系统!*nH);priiitf(n*qh)exit(l);v

11、oidmain()priiitf(n*n)1pimtf(*欢迎使用学生信息管理系统!*11)-priiitf(n*11)system(Mpausen);menu();/*系统功能以菜单的形式提供给用户*/priiitf(nii*nH)prrntfC*谢谢使用本系统!*;?priiitf(n*11)/*main函数结束*/严各自定义函数实现代码*/mtNew(char*FileName)/*创建磁盘文件*/FILE*fp:if(fp=fopen(FileName/vH)=NULL)return0;elsefclose(fp);Iiidex=0;return1;voidCreateQ/*新建学生信

12、息文件*/chaiFileName40;pnnrff请输入新建文件的名称:”);scaiif(H%sH,&FileName);if(strcmp(FileName,MstudentbackupM)strcat(FileName?H.datM);if(?New(FileNaine)pnntfC%s文加创建失败!E,FileName);elsesticpv(CuiFile,FileName);pnntfC%s文件创建成功!n”,FileName);jelseprmtf(n%s是备份文件,禁止创建与此文件同名的文ftJWJileName);ReOrEx();voidOpen()/*打开学生信息文件*

13、7chaiFileName40;pnnrff请输入要打开的数据文件的名称:scaiif(H%sH,&FileName);if(strcmp(FileName,MstudentbackupM)strcat(FileName,n.datH);if(IsOpen=0)FILE*fp;if(fp=fbpen(FileName,Hrbn)=NULL)prmtf(H%s文件打开失败!n-FileName);elseIsOpen=l;Iiidex=O;wliile(!feof(fp)fiead(&studIndex,sizeofstmctStud),I,fp);Iiidex-H-;Index;printf(

14、M学生总人数为:diT,Index);fclose(fp);printf(H%s文件打开成功!nfFileName);sticpv(CurFile,FileName);jelsepnntf(H%s文件已经打开!n”,FileNaine);elseprmtf(H%s是备份文件,禁止打开此文件!iin,FileName);ReOrEx();voidDisplayQ/*显刀全部学生信息*7mti;if(!strcmp(CurFUe,”)prmtf(n当前并未打开或新建文件,无法显示!iin);elsepnntfCXn显示所有学生成绩信息55”);prmtf(H%-12s%-lls%-5s%-14s%

15、-12s%-15s%-12s%-12s%-12sir,rNumn,nNaineM,“Sex”,birthday”,Tnglish1;HDataStmcUireM,XPlusPlus1;HSunrneragen);fdr(i=O;iIiidex;i+)pnntfC%12s%11s%5s%4d/%2d/%2d%102f%152f%122f%122f%122fuir,smdi.Nuni.studi.Name,studi.Sex,smdi.Butliday.year,studi.Butliday.month.studi.Buthdav.day,studi.English.snidi.DataStnic

16、ture,stiidi.CPlusPlus,studi.Sum,studi.Average);ReOrEx();mtSeaicliNum(char*Num)/*按学号查询学生信息*/mti;fbr(i=O;Index;i+)if(?strcmp(studi.Num,Num)pnntfC对应此学号的学生信息存在!n“);found=l;returni;jpnnrff没有此学生的信息!E);fbund=0;return0;mtSeaicliName(chai*Name)/*按姓名查询学生信息mti;fbr(i=O;i=MAXSIZE)pnntfC错误!学生信息己满,不能添加!n”);elsepmi

17、tff执行添加学生信息操作!1T);prmtfCXii请输入学生学号:”);scaufC%s”,Num);location=SeaicliNum(Num);if(!found)prmtf(H可以进行添加操作!n“);pnntfOn请输入学生姓名:J;scanf(”s”,Name);prmtfC*n请输入学生性别:J;scanfp%s”,&Sex);pnntfCS请输入学生出生年份:scaufC%d”,&Year);pnntfCS请输入学生出生月份:scaufp%d,&Month);pnntfCS请输入学生出生口:-);scaufC%d”,&Day);pnntfCS请输入学生英语成绩:scauf

18、p%f;&English);pnntfCn请输入学生数据结构成绩:-);scanf(n%f&DataStructure);pnntfCS请输入学生C卄成绩:”);scanfC%f;&CPP);pdntfVW);strcpy(studIiidex.Num,Num);strcpy(studIndex.Name,Name);strcpy(studIiidex.Sex,Sex);studIndex.Bmhday.year=Year;studIndexButhday.month=Month:studhidex.BHthday.day=Day;studIndex.English=English;studI

19、ndex.DataSti-ucture=DataSti-ucture;studhidex.CPlusPlus=CPP;studIndex.Sum=English+DataStmcture+CPP:studIndex.Aveiage=studIndex.Sum/3;Iiidex+;pnntfC插入一条学生信息操作成功!n“);jelsepiintf(”不能进行添加学生信息操作!n);voidSave(char*FileName)/*学生信息存盘*7FILE*fp:iiiti;if(fp=fbpen(FileName,MwbH)=NULL)prmtf(H文件打开失败!”);return;fbr(i

20、=O;IIiidex;i+)fviite(&studi,sizeofstmctStud),1,fp);fclose(fp);voidAppendQ/*添加学生信息*7破!strcmp(CuiFile,”)pnntf(”当前并未打开或新建文件,无法添加!nn);elseAddDataQ;Save(CuiFile);ReOrEx();voidModifyDataQ严修改一条学生信息*/chaiNum12;chaiName10;chaiSex2;floatEnglish.DataStructuie,CPP;iiitYear.Month.Day;iiitlocation;prmtfC*ii执行修改学生

21、信息操作!nnj;pnnrff请输入将要修改的学生的学号:-);scnnf(%s舄Num);location=SeaicliNum(Num);if(found)pnntff可以进行修改学生信息操作!E);pnntffn请输入学生姓名:scanf(”s”,Name);pnntffn请输入学生性别:scanf(%s冷&Sex);prmtf(nii请输入学生出生年份:scanf(”cf;&Yeai);prmtfC*ii请输入学生出生月份:scanf(%(f;&Montli);prmtf(nii请输入学生出生口:scanf(%d,&Day);pnmfCVn请输入学生英语成绩:scanf(”f;&Eng

22、lish);prmtffMi请输入学生数据结构成绩:scanf(n%f&DataStiuctuie);prmtf(nii请输入学生C卄成绩:”);scanf(”f;&CPP);prmtf(HnH);strcpy(studlocation.Num.Num);strcpy(studlocation.Name,Name);strcpy(stiidlocation.Sex,Sex);studlocation.Birthday,veai-Year;studlocation.Bnthday.montli=Month;studlocation.Bnthday.day=Day;studlocation.Eng

23、lish=English;studlocation.DataStnictiue=DataStnictiue;studlocation.CPlusPlus=CPP;studlocationSum=English+DataStmcture+CPP;studlocation.Arerage=studIndexSum/3;pnntff执行修改学生信息操作成功!n”);elsepmitfC不能进行修改学生信息操作!n”);voidModifyQ严修改学生信息*/if(!strcmp(CurFUe,mr)priiitf(当前升未和开或新建文件,无法修改!n);elseModifvData();Save(C

24、urFile);ReOrEx();mtDeleteDataQ/*删除一条学生信息*/chaiNum12;mtlocations;执行删除学生信息操作!nE);pnntf(噌告!学生信息一旦删除,将不可恢复。请小心使用该操作!nn”);pnnrff请输入将要删除的学生的学号:n”);scanfC%1;Num);location=SeaicliNuni(Num);if(fbund)if(location!=MAXSIZE)for(i=location;iMAXSIZE;i+)sticpy(studi.Num,studi+1.Num);sticpy(snidi.Name,studi+1.Name);

25、sticpy(studi.Sex、studi+l.Sex);studi.Bmhday.vear=studi+1.Eirthday.y亡ar;studi.Bmhday.month=studi+1.Buthday.month;studi.Bmhday.day=studi+l.Buthday.day;studi.English=smdi+l.English;studi.DataStiucture=studi+l.DataStnictuie;studi.CPlusPlus=studi+l.CPlusPlus;studi.Sum=studi+1.Sum;第 #页第 页studi.Average=stud

26、i+1Average;jIndex-;leturn1;return0;voidDelete()严删除学生信息*/if(!strcmp(CurFile,”)pnntf(”当前并未打开或新建文件,无法删除!iT);elseif(DeleteDataQ)Save(CurFile);pnntfC删除一条学生信息操作成功!nj;jelsepnntfC不能进行删除操作!n”);pnntfC删除一条学生信息操作失败!nj;jReOrEx();floatGetOneCourseSunXiiitn)/*计算所有学生某一科目的总成绩*/floatN=0;mti;switch(n)case算英语总成绩for(i=0

27、;iIndex;i+)N+=studi.English;break;case2:/计算数据结构总成绩for(i=0;iIndex;i+)N+=studi.DataStnicniie;break;case3:/计算C+总成绩fbr(i=O;i=l&change;一i)change=0;for(j=0;jstudj+1.English)strcpy(temp.Num,studj.Num);strcpy(tempName,studj.Name);strcpy(temp.Sex,studj.Sex);temp.Birthday.year=studj.Birthdayeyear;temp.Birthda

28、y.inonth=studj.Birthday.month;temp.Birthday.day=studjeBirthday.day;temp.English=studj.English;temp.DataStructure=studj.DataStructure;temp.CPlusPlus=studj.CPlusPlus;temp.Sum=studj.Suni;temp.Average=studj.Average;strcpv(studj.Niini,studj+l.Num);strcpy(studj.Name,tudj+l.Name);strcpy(studj.Sex,studj+l.S

29、ex);studj.Birthdayyear=studj+l-BirthdayBirthday.day=studj+l.Birthday.day;studjyear;studj+l.Birthday.month=teinp.Birthday.month;stud(j+l.Birthday.day=ten)p.Birthday.day;stud(j+l.English=temp.English;studj+l.DataStructure=tenip.DataStructure;studj+l.CPIusPlus=tenip.CPlusPlus;stud(j+l.Sum=temp.Sum;stud

30、j+l.Average=temp.Average;change=l;break;case2:严按数据结构成绩排序引fbi(i=Iiidex-l;i=l&change;一i)change=O;for(j=0;jstudj+l.DataStnicture)(此处容給的代码鸟按英语嚴债排潯彳的扣粗代码老金一稈)jbreak;case3:C+成绩排序*7fbi(i=Iiidex-l;i=l&change;一i)change=O;for(j=0;jstudIj+l.CPlusPlus)(此处容給的代码月按英语嚴债排潯彳的扣粗代码老金一稈丿jbreak;case4:/*磁总成绩排序*7fbi(i=Iiid

31、ex-l;i=l&change;一i)change=O;for(j=0;jsnidj+l.Sum)(此处容給的代码鸟按英语嚴债排潯彳的扣粗代码老金一稈)jbreak;pnnrffXn显示所有学生成绩信息niT);nBHthdaystiidi.NunLstudi.English.prmtf(H%-12s%-lls%-5s%-14s%-12s%-15s%-12s%-12s%-12sir,rNumn,Naine,HSeEnglish11,HDataStmcUireM,HCPlusPlus,“Sum役”AveiagM);for(i=0;ilndex;i+)pnntff%12s%11s%5s%4d/%2

32、d/%2d%I02f%152f%122f%122f%122fmM;studi.Name,stud1.Sex,smdi.Butliday.year,studi.Butliday.month.studi.Buthdav.day,studi.DataStructure,studi.CPlusPlus,studi.Sum,studi.Average);voidSort()/*按某一科目成绩升序显不学生成绩*/iiitx;if(!strcnip(CurFile,”)pnntf(”当前并未打开或新建文件,无法显示!nH);else按某一科目成绩升序显示学生成绩5”);prmtf(Hnprmtf(Hnn);

33、.按英语成绩升序显示学生成绩按数据结构成绩升序显示学生成绩按C卄成绩升序显示学生成绩按总成绩成绩升序显示学生成绩priiitf(H*nn)*nM);*nH);*nM);printf(H*iiH)prmtf(n请选择scanff%d;&x);pnntffn”);Bubble(x);ReOrEx();voidBackupO/*创建备份文件,备份学生信息勺if(!strcmp(CurFUe,MI)pnntf(”当前并未打开或新建文件,无法备份!iin);elseFILE*fp;iiiti;if(fp=fbpen(nstudentbackup.dat,HwbM)=NULL)pnntf(吨

34、ij建备份文件失败!”);return;for(i=0;iIiidex;i+)fvviite(&studi,siz亡obstructStud),1,fp);pnntfC备份学生信息成功!nM);fclose(fp);ReOrEx();第2章面向过程程序设计一、简答题【答案要点】直接常量也称字面值常量,在程序中直接按其书写形式对待,如数字12、字符h、字符串“Hello”等,而常变量是变量,系统会在静态存储区为常变量分配内存空间,如下语句定义的变量PI就是常变量。constfloatPI=3.14.159;常变量在声明时必须进行初始化,可以用值对其初始化,也可以使用表达式,使用表达式时,系统会先

35、计算出表达式的值,然后再将值赋给常变量。在程序运行的过程中,其值不能发生变化。使用常变量的好处,主要表现在以下几个方面:(1)常变量更直观,常变量名可以表示一定的意义;(2)在后期维护过程中如杲需要改变常变量的值,只要在定义该常变量的语句中修改就可以了,即使在程序中多处用到它也只需要修改这一处。(3)系统可以对常变量进行类型检查,这样进一步降低了程序出错的概率。【答案要点】main函数中的第3行代码有误,该行代码直接使用void指针。注释掉此行,程序运行结果如下:*p=d*p=100*p=1.4013e-043*p=-9.25596亡+061【答案要点】所谓名字空间就是一个由程序设计者命名的内

36、存区域。程序设计者可以根据需要指定一些有名字的空间域,把一些全局标识符分别放在各个名字空间中,从而与其他全局标识符分隔开。名字空间的作用:解决程序中名字冲突的问题。即在程序运行过程中遇到相同名字的变量,系统能不能正确地区分它们。使用名字空间时,语法如下:namespace名字空间名定义成员访问名字空间的成员时,可以使用如下3种方式之一。(1)使用名字空间的别名可以为名字空间起一个别名来代替较长的名字空间名。如:namespaceIiifoimation可以用一个较短的缩写作为别名来代替它。女口:namespaceInfo=Iiifonnation;通过这样一个语句使得别名Info与原名Info

37、nnadon等价,在原来可以使用Information的位置都可以无条件的换成IllfOo(2)使用using名字空间的成员名可以在程序中使用using名字空间中的成员名;”来简化名字空间的成员访问,using后面必须是由名字空间限定的成员。如: 第 页usingnsl:Tax;后面访问Tax()时就相当于nsl:Tax(),这样可以避免在每一次访问名字空间的成员时都用名字空间限定,简化名字空间的使用。但是要注意不能在同一作用域中用using声明的不同名字空间的成员名字相同,如果这样就会编译出错。(3)使用uusingnamespace名字空间名;”第二种方式“usmg名字空间的成员名,一次只

38、能声明一个名字空间的成员,如果在一段程序中经常访问一个名字空间中的多个成员,就要多次使用using名字空间的成员名;”,同样带来不便。C卄提供了usingnamespace语句,一次就能声明一个名字空间中的全部成员。一般的格式为:usingnamespace名字空间名;如:usingnamespacensl;这样在usmgnamespace声明的作用域中,名字空间iisl中的成员就好像在全局域声明一样,可以直接使用而不必加名字空间名限定。注意:如果同时使用usingnamespace引入多个名字空间,要保证在这些引入的名字空间中不能有同名的成员,否则同样会引起同名冲突。【答案要点】C+程序的编

39、写与实现过程要经历以下步骤。用C+语言编写g/y用C卄语言编写的程序称为“源程序”,源程序文件的后缀是“.cpp”。C卄源程序文件是纯文本的文件,町以使用任何的文本编辑器进行编辑。但是为了提高编写程序的效率和降低出错的机率,还是建议使用较好的源程序编辑软件或集成开发环境。对源程序进行编译编译是以源程序文件为单位进行的,如果一个人型的系统有多个源程序文件,则编译后生成多个目标程序。目标程序的后缀是“obj”o编译过程主要是对源程序进行词法检查和语法检查,词法检查主要是检查源程序中单词的拼写是否有错,语法检查主要是根据源程序的上下文检查程序的语法是否有错。编译结束后如果有错误编译就不成功,并给出出

40、错信息。出错信息有两种,一种是警告,另一种是错误。警告是不影响程序运行的轻微错误或违反某些惯例的用法,系统在编译时给指出警告的代码位置,同时生成目标文件。错误则导致不能生成目标程序,必须改正错误后再重新编译。对目标程序进行连接编译通过后,得到一个或多个目标程序,此时再用系统提供的连接程序(linked)将程序的所有目标程序和系统用到的库文件及系统的其他信息连接起来,最终形成可执行的二进制文件,它的后缀是“exeJ在Wmdows下是可以直接执行的。运行调试程序生成可执行文件后可以执行它,得到运行结果。这个时候需要对结果的正确性进行分析、验证,来保证程序的正确性。虽然程序经过了词法检查和语法检查,

41、但是并不能检查出程序的逻辑错误,即程序的语义错误。通过运行程序输入一些数据检查输出结果是否正确。如果输出结果与预期不同,则需要调试程序,调试的手段有设置断点、单步执行、观察内存单元的值等手段。发现错误并修改源程序后,重复对源程序进行编译、连接与执行的过程。二.编程题【程序参考代码】(1)include包含头文件命令usingnamespacestd;/使用名字空间stdmtniainQchaic;scanf(%c役&c);prmtf(H%cn,c);ciiic;coutcendl;return0;(2)include包含头文件命令usingnamespacestd;/使用名字空间stdmtni

42、ainQmtc;scanf(”c役&c);pnntfC%ciT,c);ciiic;cout(char)cendl;return0;(3)include包含头文件命令usingnamespacestd;/使用名字空间stdmtniainQchaic;scanf(%c役&c);prmtf(H%durc);ciiic;cout(int)cendl;return0;【程序参考代码】include包含头文件命令usingnamespacestd;/使用名字空间stdmtniainQcoutHsizeofiiitis:Hsizeof(int)endl;coutMsizeoffloatis:nsizeof(

43、float)endl;coutHsizeofchaiis:Hsizeof(char)endl;coutHsizeofdoubleis:,rsizeof(double)endl;return0;3【程序参考代码】(1)include包含头文件命令#defiiien8usingnamespacestd;/使用名字空间stdvoidfiiidmaxiiun(int*p)iiitiaiiiiijnax;niiii=max=p0;fbr(i=1;imax)max=pi;min=pi;coutnthemaxofallnumbersis:Hinaxendl;coutntheniiiiofallnumbers

44、is:Hininendl:mtniainQintan=36194,5,2,8;i=0;in;-H-i)coutaiM”;coutendl;findniaxiiun(a);return0;(2)include包含头文件命令#defiiien8usingnamespacestd;/使用名字空间stdtypedefiiitann;voidfiiidmaxiiun(an-&p)iiitiaiiiiijnax;niiii=max=p0;fbr(i=1;imax)max=pi;min=pi;coutnthemaxofallnumbersis:Hinaxendl;coutntheniiiiofallnumb

45、ersis:Hinuiendl;mtniainQintan=36194,5,2,8;fbr(mti=0;in;+i)coutaiM”;coutendl;findniaxiiun(a);return0;4.【程序参考代码】include包含头文件命令usingnamespacestd;includeconstmtN=8;voidbubble_sort(iiita.iiitn)/将a中整数序列按升序排序(冒泡排序)intij,t;fbr(i=n一)for(j=Oja|j+l)叩=叩+1;aj+l=t;Jvoidbubble_sort(floata,iiitn)将a中单精度浮点数序列按升序排序(冒泡

46、排序)mtij;floatt;fbr(i=n一)for(j=Oja|j+l)叩=叩+1;aj+l=t;Jvoidbubble_sort(chaia,iiitn)将a中字符序列按升序排序(冒泡排序)mtij;chait;fbr(i=n一)for(j=Oja|j+l)叩=叩+1;aj+l=t;Jvoidbubble_sort(striiiga,intn)将a中字符串序列按升序排序(冒泡排序)mtij;stringt;fbr(i=n一)for(j=Ojaj+l)叩=叩+1;aj+l=t;jJvoidprint(mtr.mtn)mti;fbr(i=O;in;i+)coutriH”;coutendl;v

47、oidprint(floatrjntn)mti;fbr(i=O;in;i+)coutriH”;coutendl;voidpruit(charr4ntn)mti;fbr(i=O;in;i+)coutriH”;coutendl;voidprint(strmgn)mti;fbr(i=O;in;i+)coutriH”;coutendl;mtniainQintarrlN=49,38,65,97,76,13,27,49;coutH序前:1T;piiiit(arrl,N);bubble_sort(anl,N);couKV”排常后:iT;piiiit(arrl,N);floataiT2N=12.3,4.5,7

48、.6,30.5,2.7,4.9;coutH排浄諒1T;prmt(arr2.N);bubble_sort(an-2,N);couKV”排岸后:iT;prmt(arr2.N);clwan3N=V,GJE;A;T、W,Q;C;coutH排庙記1T;priiit(arr3,N);bubble_sort(an3,N);coutvv”排序后:iT;piiiit(arr3,N);stringarr4N=MHelloH/,Good,7,MoniiiigM/,Aftenioonn,HStudentM,nTeacher,HSchoorHCompaiiyH;coutH排序前:1T;piiiit(arr4,N);bu

49、bble_sort(an4,N);coutv”排淨后:iT;piiiit(arr4,N);return0;【程序参考代码】include包含头文件命令usingnamespacestd;/使用名字空间stdincludemtniainQstrings,sl;chai*ps,*pe,t;iiiti,j,len;coutnPleaseinputastiiiig:,eiidl;cins;si=s;len=sl.length();fbr(i=0;ilen1;i+)ps=pe=&sli;for(j=i+l;jslj)pe=&slj;if(ps!=pe)t=*ps;*ps=*pe;*pe=t;coutsl

50、endl;return0;6【程序参考代码】include包含头文件命令usingnamespacestd;/使用名字空间stdincludevoidtotal(striiigs);mtniainQsuings=nfas212322dfs3%H;total(s);return0;voidtotal(striiigs)iiitchaiacters=0,digits=0,other=0;for(iiiti=0:i64&si96&si47&si58)digits+;elseotlier+;cout,r字母个数Hcharactersendl;coutM数字个数ndigitsendl;cout,r其他字

51、符个数Hotherendl;第3章类和对象简答题【答案要点】对彖就是封装了数据及在这些数据之上的操作的封装体,这个封装体有一个名字标识它,而且可以向外界提供一组操作(或服务)。类是对具有相同属性和操作的一组对彖的抽彖描述。类和对彖的关系:类代表了一组对彖的共性和特征,是对象的抽象,即类忽略对象中具体的属性值而只保留属性。而对象是对类的实例化,即将类中的属性赋以具体的属性值得到一个具体的对彖。类和对彖的关系就像图纸和房屋的关系,类就像图纸,而对彖就好比按照图纸建造的房屋。在c卄中,类是一种自定义的数据类型,而对彖是“类”类型的变量。答案要点类中的成员有两种:数据成员和成员函数。它们的访问属性有三

52、种:私有的(private)、受保护的(protected).公用的(public)访问属性为私有的成员只能被本类的成员函数访问而不能被类外访问(友元例外)。访问属性为公用的成员既可以被本类的成员函数访问,也町以在类的作用域内被其他函数访问。访问属性为受保护的成员可以被本类及本类的派生类的成员函数访问,但不能被类外访问。【答案要点】构造函数是类的一个特殊的成员函数,构造函数的作用是在创建对彖时对对象的数据成员进行初始化。析构函数是和构造函数相对的另一个类的特殊成员函数,它的作用与构造函数正好相反。析构函数的作用是在系统释放对彖占用的内存之前进行一些清理工作。当创建对彖时调用构造函数,当释放对象

53、时调用析构函数。创建对彖是当程序执行到了非静态对彖的定义语句或第一次执行到静态对彖的定义语句。释放对象则是对象到了生命周期的最后时系统释放对彖或通过dehte运算符动态释放new运算符动态申请的对彖。最终确定何时调用构造函数和析构函数要综合考虑对彖的作用域、存储类别等等因素,系统对对象这些因素的处理和普通变量是一样的。【答案要点】对彖的赋石是把一个对彖的数据成员的值赋给另外一个同类对彖的对应数据成员,这两个对彖必须是已经存在的同类对彖。对彖的复制是在创建一个新对象时使用一个已有对象快速复制出完全相同的对象。对彖的赋值和对象的复制的不同点主要有:(1)对象的赋值是在两个对象都己经创建的基础上进行

54、的;而对彖的复制则在用一个已有对象复制一个新对彖时进行的。(2)它们两个所对应调用的函数不同,对彖的赋值系统调用的是赋值运算符重载函数;而对象的复制系统调用的是复制构造函数。写出程序的运行结果Rect(1,1)isconstnicted!Rect(1,1)isconstnicted!Rect(1,1)isconstnicted!DestnictorofRect(1,1)iscalled!DestnictorofRect(1,1)iscalled!DestnictorofRect(1,1)iscalled!三、编程题【程序参考代码】include包含头文件命令usingnamespacestd;

55、/使用名字空间stdclassBox获取长方体的长度获取长方体的宽度获取长方体的高度修改长方体的长度修改长方体的宽度修改长方体的高度public:iiitGetLength()retuinlength;iiitGetWidthQreminwidth;iiitGetHeight()returnheight;计算长方体的表面积voidSetLength(intlength)this-length=length;voidSetWidtli(iiitwidth)this-width=width;voidSetHeight(intheight)this-height=height;iiitGetAiea

56、()return2*(length*width+length*height+width*height);iiitGetVolumeQreturnlength*widtli*height;计算长方体的体枳private:iiitlengtli,width,height;/长方体的长、宽、高mtniainQBoxbox;box.SetLength(5);box.SetWidth(3);box.SetHeight(4);coutHTheareaofboxis:nbox.GetAiea()endl;coutHThevolumeofboxis:Hbox.GetVblume()endl;return0;【

57、程序参考代码】include包含头文件命令usingnamespacestd;使用名字空间stdclassBoxpublic:Box()length=1;width=1;height=1;/默认构造函数Box(iiitlengtli,mtwidth,mtheight):length(length),width(width),height(height)/普通构造函数iiitGetLength()retuinlength;获取长力体的长度iiitGetWidtliQreturnwidth;获取长方体的宽度mtGetHeight()returnheight;获取长方体的高度voidSetLengt

58、h(intlength)this-length=length;修改长方体的长度voidSetWidtli(intwidth)this-width=width;修改长方体的宽度voidSetHeight(intheight)this-height=height;修改长方体的高度iiitGetAiea()return2*(length*width+length*height+width*height);计算长方体的表面积iiitGetVolume()returnlength*widtli*height;计算长方体的体积private:iiitlengtli,width,height;/长方体的长、

59、宽、高;mtniainQBoxboxl,box2(2、1,3);boxl.SetLengtli(5);boxl.SetWidth(3);boxl.SetHeight(4);coutHTheareaofboxlis:Hboxl.GetAiea()endl;coutHThevolumeofboxlis:box1.GetVolume()endl;coutHTheareaofbox2is:Hbox2.GetAiea()endl;coutHThevolumeofbox2is:box2.GetVolume()endl;return0;【程序参考代码】include包含头文件命令usingnamespace

60、std;使用名字空间stdclassBoxpublic:Box()length=l;width=l;height=l;默认构造函数Box(iiitlengtli,mtwidth,mtheight):length(length),width(width),height(height)/普通构造函数iiitGetLength()retuinlength;获取长力体的长度iiitGetWidtliQreturnwidth;获取长方体的宽度mtGetHeight()returnheight;获取长方体的高度voidSetLength(intlength)this-length=length;修改长方体

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论