版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C++程序设计期末考试复习题及参考答案-高起本一、单项选择题(每题2分,共30分)1.按照C++标识符的命名规则,下列选项中属于合法用户标识符的是()A.2abcB.intC.a_123D.a-b2.32位操作系统环境下,若有定义inta=7;floatx=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值为()A.2.5B.2.75C.3.5D.0.03.下列代码段中,else子句的配对关系正确的是()if(a>b)if(c>d)x=1;elsex=2;A.与第一个if配对B.与第二个if配对C.与两个if都配对D.语法错误,无配对关系4.执行for(inti=0,s=0;i<10;i+=2)s+=i+1;语句后,变量s的值为()A.15B.25C.36D.455.下列选项中,可以作为C++函数重载依据的是()A.函数的返回值类型不同B.函数的形参名称不同C.函数的形参列表(类型、个数、顺序)不同D.函数的调用方式不同6.下列关于一维数组初始化的语句中,存在语法错误的是()A.inta[5]={0,1,2,3,4,5};B.inta[]={0,1,2,3,4};C.inta[5]={0};D.inta[5]={0,1,2};7.若有定义inta=10,*p=&a;则下列表达式的值等于10的是()A.pB.*pC.&aD.&p8.若有定义chars[]="C++Program";则表达式strlen(s)的值为()A.9B.10C.11D.129.C++中用class关键字定义类时,类成员的默认访问权限是()A.publicB.protectedC.privateD.static10.下列关于构造函数和析构函数的描述中,错误的是()A.构造函数名必须与类名完全相同B.构造函数可以重载,支持带默认参数C.析构函数没有参数,没有返回值D.析构函数可以重载,一个类可以定义多个析构函数11.当派生类采用public公有继承方式继承基类时,基类的public成员在派生类中的访问权限是()A.publicB.protectedC.privateD.不可访问12.C++中实现运行时多态的核心机制是()A.函数重载B.虚函数C.运算符重载D.模板13.下列关于类的常成员函数(形如voidfunc()const;)的说法,正确的是()A.const关键字用于修饰函数返回值为常量B.常成员函数内部不能修改调用该函数的对象的非静态成员数据C.常成员函数只能被常对象调用D.常成员函数内部可以调用同类的非const成员函数14.下列运算符中,允许C++程序员重载的是()A..(成员访问运算符)B.+(加法运算符)C.::(域解析运算符)D.?:(三目运算符)15.使用C++文件流打开文本文件进行读入操作时,应使用的打开模式是()A.ios::outB.ios::appC.ios::inD.ios::binary二、填空题(每题2分,共20分)1.C++中用于在堆区动态申请单个变量内存的运算符是____,用于释放动态申请内存的运算符是____。2.若有定义inta=3,b=4;执行表达式(a>b)?(a+=b):(a-=b)后,变量a的值为____。3.C++函数调用时,常见的参数传递方式包括值传递、____和引用传递三类。4.已知二维数组定义为inta[3][4]={{1,2},{3,4},{5,6}};则数组元素a[1][2]的值为____。5.若有定义constint*p;则p指向的内存单元存储的值____(填“可以”或“不可以”)通过解引用p来修改。6.面向对象程序设计的三大核心特性是封装、____和多态。7.若需要将类A的成员函数voidfun()声明为类B的友元函数,应在类B的定义中添加的声明语句是____。8.创建派生类对象时,构造函数的执行顺序为:首先调用____的构造函数,再调用派生类中成员对象的构造函数,最后执行派生类自身构造函数的函数体。9.包含至少____个纯虚函数的类称为抽象类,抽象类不能实例化创建对象。10.C++标准IO流库中,标准输入流对象cin默认关联的输入设备是键盘,标准输出流对象cout默认关联的输出设备是____。三、程序阅读题(每题6分,共30分)请写出下列程序运行后的屏幕输出结果。1.usingnamespacestd;intmain(){inti,s=0;for(i=1;i<=10;i++){if(i%3==0)continue;s+=i;}cout<<"s="<<s<<endl;return0;}2.usingnamespacestd;intfun(intn){if(n==1)return1;elsereturnn+fun(n-1);}intmain(){cout<<fun(5)<<endl;return0;}3.usingnamespacestd;intmain(){inta[]={2,4,6,8,10},*p=a,i;for(i=0;i<5;i++){(*p)++;p++;}for(i=0;i<5;i++){cout<<a[i]<<"";}cout<<endl;return0;}4.usingnamespacestd;classTest{intx;public:Test(intn){x=n;cout<<"构造函数,x="<<x<<endl;}~Test(){cout<<"析构函数,x="<<x<<endl;}};intmain(){Testt1(1);Testt2(2);return0;}5.usingnamespacestd;classBase{public:virtualvoidshow(){cout<<"Base::show()"<<endl;}};classDerived:publicBase{public:voidshow(){cout<<"Derived::show()"<<endl;}};intmain(){Baseb,*p;Derivedd;p=&b;p->show();p=&d;p->show();return0;}四、程序设计题(共20分)1.(6分)编写C++程序,计算1到100之间所有满足“能被7整除,但不能被3整除”的整数的累加和,将结果输出到屏幕。2.(6分)编写一个求整型数组最大值的函数,函数要求:接收两个参数,分别为整型数组的首地址(数组名)和数组的长度,返回值为数组中的最大元素值。在main函数中定义长度为10的整型数组,提示用户从键盘输入10个整数存入数组,调用上述函数求出数组最大值并输出。3.(8分)定义一个矩形类Rectangle,要求如下:(1)私有数据成员:length(双精度浮点型,记录矩形的长)、width(双精度浮点型,记录矩形的宽);(2)公有成员函数:带两个参数的构造函数,用于初始化长和宽,初始化时需验证参数合法性,若传入的长或宽小于等于0,则将对应的成员值设为1;成员函数getPerim(),无参数,返回值为双精度浮点型,功能是计算并返回矩形的周长;成员函数getArea(),无参数,返回值为双精度浮点型,功能是计算并返回矩形的面积。在main函数中创建一个Rectangle类的对象,初始化长为5.2、宽为3.5,调用成员函数分别计算并输出该矩形的周长和面积。参考答案一、单项选择题1.答案:C。解析:C++标识符由字母、数字、下划线组成,首字符不能为数字,不能与关键字重名,不能包含减号、@等特殊符号。A选项以数字开头,B选项是C++关键字int,D选项包含特殊符号'-',均不合法;C选项符合标识符命名规则。2.答案:A。解析:按照运算符优先级与结合性逐步计算:a%3=7%3=1;x+y=7.2,强制转换为int类型后值为7;1*7=7;7%2=1;1和4均为整型,整数除法1/4的结果为0;最终x+0=2.5。3.答案:B。解析:C++中else子句遵循“就近配对”原则,总是与它之前最近的、尚未配对的if语句配对,题目中else距离第二个if最近,因此与第二个if配对。4.答案:B。解析:for循环的循环变量i依次取0、2、4、6、8(i=10时不满足i<10的条件,退出循环),每次循环执行s+=i+1,即依次累加1、3、5、7、9,总和为25。5.答案:C。解析:函数重载要求同一作用域内函数名相同、形参列表存在差异(参数类型、个数、顺序至少有一项不同),编译器根据实参列表匹配对应的函数版本。函数返回值类型、形参名称、调用方式均不能作为重载的判定依据。6.答案:A。解析:定义长度为5的整型数组时,初始化列表中的元素个数不能超过数组长度,A选项初始化列表包含6个元素,会触发编译错误;B选项未显式指定数组长度,编译器根据初始化元素个数自动将数组长度设为5,合法;C选项初始化首个元素为0,剩余元素自动初始化为0,合法;D选项初始化前3个元素,剩余元素自动补0,合法。7.答案:B。解析:p是指针变量,存储的是变量a的内存地址;*p是对p进行解引用,访问p指向的内存单元的值,即a的值10;&a是取变量a的地址;&p是取指针变量p自身的存储地址。8.答案:B。解析:strlen函数统计字符串结束符'\0'之前的有效字符个数,不包含'\0'。字符串"C++Program"包含'C'、'+'、'+'、'P'、'r'、'o'、'g'、'r'、'a'、'm'共10个有效字符,因此strlen的返回值为10;存储该字符串的数组实际占用11字节,因为编译器会自动在字符串末尾添加'\0'结束符。9.答案:C。解析:使用class关键字定义类时,成员的默认访问权限为私有private;使用struct关键字定义结构体时,成员的默认访问权限为公有public。10.答案:D。解析:析构函数的名称为类名前加'~',没有参数、没有返回值,因此不支持重载,一个类只能定义一个析构函数。构造函数支持重载,可以定义多个参数不同的构造函数,也支持默认参数。11.答案:A。解析:公有继承(public)的权限规则为:基类的public成员在派生类中保持public访问权限,基类的protected成员在派生类中为protected访问权限,基类的private成员在派生类中不可直接访问。12.答案:B。解析:运行时多态是指程序运行阶段根据对象的实际类型确定调用的函数版本,核心实现机制是虚函数与动态绑定;函数重载、运算符重载、模板均属于编译时多态,编译阶段即可确定调用的函数版本。13.答案:B。解析:常成员函数中的const修饰的是隐藏的this指针,表明调用该函数的对象具有常属性,因此函数内部不能修改对象的非静态成员数据;常成员函数可以被普通对象和常对象调用,但常对象只能调用常成员函数;常成员函数内部只能调用其他常成员函数,不能调用非const成员函数。14.答案:B。解析:C++中大部分运算符支持重载,但有5个运算符不允许重载,分别是:成员访问运算符.、成员指针访问运算符.*、域解析运算符::、三目运算符?:、长度运算符sizeof。加法运算符+既可以作为普通函数重载,也可以作为类的成员函数重载。15.答案:C。解析:ios::in为读模式打开标记,用于从文件读取数据;ios::out为写模式标记,用于向文件写入数据;ios::app为追加写模式标记,写入内容自动追加到文件末尾;ios::binary为二进制模式标记,用于打开二进制文件。二、填空题1.答案:new、delete。解析:new和delete是C++提供的动态内存管理运算符,new在堆区申请内存时会自动调用类的构造函数,delete释放内存时会自动调用析构函数,适配面向对象编程需求,对应C语言的malloc/free库函数。2.答案:-1。解析:三目运算符先判断a>b是否成立,3>4为假,因此执行冒号后的表达式a-=b,即a=a-b=3-4=-1。3.答案:地址传递(或指针传递)。解析:值传递传递实参的副本,函数内修改形参不影响实参;地址传递将实参的内存地址传递给指针形参,函数内通过指针可以间接修改实参的值;引用传递是给实参设置别名,函数内对形参的操作直接作用于实参本身。4.答案:0。解析:二维数组按行初始化时,若某行的初始化元素个数少于数组列数,未显式初始化的元素自动赋值为0。行下标为1的第二行仅初始化了前两个元素3、4,因此a[1][2]、a[1][3]的值均为0。5.答案:不可以。解析:const位于*左侧时,修饰的是指针指向的内容,即不能通过解引用指针修改指向单元的值,但指针本身的指向可以修改;若const位于*右侧(int*constp),则指针本身为常量,指向不可修改,但指向单元的值可以修改。6.答案:继承。解析:面向对象的三大核心特性中,封装是将数据和操作方法绑定,对外隐藏实现细节;继承支持在已有类的基础上扩展新功能,实现代码复用;多态是同一接口在不同场景下呈现不同行为。7.答案:friendvoidA::fun();。解析:声明其他类的成员函数为友元时,需要使用friend关键字,同时通过类名加域解析符::标明函数所属的类,友元函数可以访问类的所有私有和保护成员。8.答案:基类。解析:派生类对象构造时,必须先完成基类成员的初始化,因此首先调用基类构造函数,再初始化成员对象,最后执行派生类自身的构造函数逻辑;析构顺序与构造顺序完全相反。9.答案:1(或一)。解析:纯虚函数的声明格式为virtual返回值类型函数名(参数列表)=0;,类中只要包含一个纯虚函数就是抽象类,抽象类无法实例化对象,其派生类必须实现所有纯虚函数才能创建实例。10.答案:显示器(或屏幕)。解析:C++预定义四个标准流对象:cin对应标准输入(默认设备为键盘),cout、cerr、clog对应标准输出、标准错误、标准日志(默认设备均为显示器)。三、程序阅读题1.答案:s=37。解析:循环遍历1-10的整数,当i为3的倍数(3、6、9)时,continue语句跳过后续累加逻辑,参与累加的数为1、2、4、5、7、8、10,总和为37。2.答案:15。解析:fun是递归函数,实现1到n的累加计算,递归展开为fun(5)=5+fun(4)=5+4+fun(3)=5+4+3+fun(2)=5+4+3+2+fun(1)=5+4+3+2+1=15。3.答案:357911。解析:指针p初始指向数组首元素,循环中每次将p指向的元素值自增1,再将指针后移一位,依次处理所有5个元素,因此每个元素都在原值基础上加1。需要注意区分(*p)++和*p++:后者是先读取p指向的值,再移动指针,不会修改元素本身的值。4.答案:构造函数,x=1构造函数,x=2析构函数,x=2析构函数,x=1解析:栈区的局部对象构造顺序与定义顺序一致,先定义的t1先构造,后定义的t2后构造;对象生命周期结束时,析构顺序与构造顺序相反,后构造的t2先析构,先构造的t1后析构。5.答案:Base::show()Derived::show()解析:基类的show函数声明为虚函数,通过基类指针调用成员函数时触发动态绑定,运行时根据指针实际指向的对象类型选择函数版本:p指向基类对象b时,调用基类的show函数;p指向派生类对象d时,调用派生类重写的show函数,体现运行时多态特性。若show未声明为虚函数,则两次调用都会执行基类版本。四、程序设计题1.评分标准:正确引入iostream头文件、声明std命名空间得1分;正确初始化累加变量得1分;循环范围设置为1到100得1分;条件判断逻辑正确(i%7==0且i%3!=0)得2分;正确输出结果得1分。参考代码:```cppusingnamespacestd;intmain(){intsum=0;for(inti=1;i<=100;++i){if(i%7==0&&i%3!=0){sum+=i;}}cout<<"1-100之间满足条件的整数和为:"<<sum<<endl;return0;}```程序运行结果:1-100之间满足条件的整数和为:525。2.评分标准:函数定义的返回值类型、参数列表正确得2分;函数内部遍历数组、比较求最大值的逻辑正确得2分;main函数中数组定义、输入提示、循环输入、函数调用、结果输出逻辑正确得2分。参考代码:```cppusingnamespacestd;intgetMax(intarr[],intlen){intmaxVal=arr[0];for(inti=1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026上海市虹口区江湾医院招聘人才考试参考题库及答案解析
- 2026年地下综合管廊工程建筑行业竞争格局研究报告及未来五至十年风险挑战与应对策略
- 2026年中国盐业集团有限公司人员招聘考试模拟试题及答案
- 疫苗应急预案工作要求(3篇)
- 石板厨房灶台施工方案(3篇)
- 社区节日活动安排方案策划(3篇)
- 立柱加固施工方案模板(3篇)
- 系列营销活动方案模板(3篇)
- 2026年互联网生活服务平台行业发展趋势及投资前景报告及未来五至十年新兴市场与增量突破
- 2026年水上运输辅助活动行业深度研究报告及未来五至十年市场规模与增长潜力评估
- 海绵城市建设专项汇报
- 中免集团面试题目及答案
- 【人教pep版】六年级英语阅读理解50题篇训练题(含答案解析)
- 化工液氨充装质量保证手册
- 教育部《2025年“校园餐”专项整治》专题培训
- 上课课件-《食品物流学》(和东芹)
- 《椭圆的几何性质》第1课时名师课件
- JBT 6434-2024 输油齿轮泵(正式版)
- 金工实训-车工
- 万历十五年读书报告
- 做出判断的分支复习课课件教科版高中信息技术必修1
评论
0/150
提交评论