《2022年C++期末考试题及答案.docx》由会员分享,可在线阅读,更多相关《2022年C++期末考试题及答案.docx(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -一、 挑选填空题(共20 小题,每道题2 分,共 40 分);1. 关于 C+与 C 语言关系的描述中, (D )是错误的;a.C 语言是 C+语言的一个子集 b.C 语言与 C+语言是兼容的 c.C+ 语言对 C 语言进行了一些改进 d.C+ 语言和 C 语言都是面对对象的 2根据标识符的要求, (A )符号不能组成标识符;a.连接符 b.下划线 c.大小写字母 d.数字字符 3. 为了防止嵌套的 if-else 语句的二义性,C 语言规定 else 总是与( C )组成配对关系;a.缩排位置相同的 if
2、if b.在其之前未配对的 c.在其之前未配对的最近的 if d.同一行上的 if 4. 在int a 3=1,3,2,4,5,6,0; a.1 b.0 c.6 d.2 中, a22 的值是( C );5. 设char *s ;,以下正确的表达式是(B);a.s=computer; b.*s=computer; c.*s=computer; d.*s=c; 6. 对于 int *pa5 ;的描述中,(D )是正确的;5 个 int 型元素 a.pa 是一个指向数组的指针,所指向的数组是 b.pa 是一个指向某数组中第 5 个元素的指针,该元素是 int 型变量 c.pa 5 表示某个元素的第
3、5 个元素的值 int 型指针 d.pa 是一个具有 5 个元素的指针数组,每个元素是一个 7. 在以下表示引用的方法中,(A )是正确的;已知: int m=10; a.int &x=m; b.int &y=10; c.int &z; d.float &t=&m; 8. 以下 for 循环的次数为(B);for (i=0, x=0; .x&i=5; i+)a.5 b.6 c.1 d.无限9. 对于 C/C+ 语言的函数,以下表达中正确选项(A); 第 1 页,共 8 页 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - - - - - - - - - -
4、 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -a.函数的定义不能嵌套,但函数调用可以嵌套 b.函数的定义可以嵌套,但函数调用不能嵌套 c.函数的定义和调用都不能嵌套 d.函数的定义和调用都可以嵌套10. 在一个被调用函数中,关于return 语句使用的描述, (D )是错误的;a.被调用函数中可以不用 return 语句 b.被调用函数中可以使用多个 return 语句 c.被调用函数中,假如有返回值,就肯定要有 return 语句 d.被调用函数中,一个 return 语句可以返回多个值给调用函数 11. 在一个函数中,要求通过函数来实现一种不太复杂
5、的功能,并且要求加快执行速度,选 用( A );a.内联函数 b.重载函数 c.递归调用 d.嵌套调用 12. 使用 fseek 函数可以实现的操作是(A);a.转变文件指针的当前位置 b.文件的次序读写 c.文件的随机读写 d.以上都不对 13. 以下储备标识符中, (C )的可见性与存在性不一样;a.外部类 b.自动类 c.内部静态类 d.寄存器类 B );14. 在如下结构定义中,不正确选项(a.struct student int no; char name10; float score; ; b.struct stud20 int no; char name10; float sco
6、re; ; c.struct student int no; char name10; float score; stud20; d.struct 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 2 页,共 8 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - - int no; char name10; float score; stud100 ; 15. 将两个字符串连接起来组成一个字符串时,选用(C )函数;a.strlen b.strcpy c.strcat d.str
7、cmp 16. D 不是构造函数的特点 a.构造函数的函数名与类名相同 b.构造函数可以重载 c.构造函数可以设置缺省参数 d.构造函数必需指定类型说明 17. 已知:类 A 中一个成员函数说明如下:void SetA&a; 其中, A& 的含义是 C;a.指向类 A 的指针为 a b.将 a 的地址值赋给变量 Set c.a 是类 A 对象的引用,用来作函数 Set()的参数 d.变量 A 与 a 按位与作为函数 Set 的参数(A )是正确的;18. 已知: print 函数是一个类的常成员函数,它无返回值,以下表示中,a.void print const; b.const void pr
8、int ; c.void const print ; d.void printconst; 19. 关于虚函数的描述中, (C )是正确的;a.虚函数是一个 static 类型的成员函数 b.虚函数是一个非成员函数 c.基类中说明白虚函数后,派生类中将其对应的函数可不必说明为虚函数 d.派生类的虚函数与基类的虚函数具有不同的参数个数和类型 20. 关于 new 运算符的以下描述中, (D )是错的;a.它可以用来动态创建对象和对象数组 b.使用它创建的对象和对象数组可以使用运算符 delete 删除 c.使用它创建对象时要调用构造函数 d.使用它创建对象数组时必需指定初始值二、问答题( 15
9、分)1、 (3 分)虚析构函数有什么作用?对象销毁时要调用析构函数,假如不是定义的虚析构函数, 基类指针只能拜访基类析构,不能拜访派生类析构,如定义的虚析构就可以解决这问题2、 (3 分)拷贝构造函数在哪几种情形下调用?用一个对象初始化另一个对象;当函数返 回对象;当对象作为函数参数传递;细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 3 页,共 8 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -3、 (4 分)函数重载与函数掩盖有什么不同,它们与多态有什么关系?函数重载
10、函数名相 同,而函数参数个数,函数类型不同;掩盖是指函数名,函数个数,函数类型都相同;C+ 是通过虚函数的掩盖,实现多态的功能;4、 (3 分) C+ 继承是如何工作的?5、 (2 分)类与对象有什么区分?三、(6 分)分析下面程序的运行结果 #include class B public: B Bint ib=i; virtual void virfun coutB:virfun called.n; private: int b; ; class D:public B public: D Dint i,int j:Bid=j; private: int d; void virfun cout
11、virfun; void main D *pd=new D; funpd; 四、(9 分)下面的程序可以统计命令行第一个参数中显现的字母个数,请填充下面空白,完成程序;#include #include 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 4 页,共 8 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -void mainint argc, argv; char *str; int count=0; ifargc2exit1; str= argv1 ; while
12、*str ifisalpha*str+ count+; printfn 字母个数: %dn,count; 提示: int isalphaint ch 函数功能是检查 ch 是否是字母 五、(8 分) 定义一个字符栈类 Stack(包括类的实现 ;数据成员包括一个存放字符的数组stck 和一个栈指针 tos;栈数组的尺寸由常量 SIZE 确定;栈的基本操作为 Push()和 Pop();六、 10 分 完成下面的函数,对有n 个元素的数组a,使数组元素按逆序排列;void inverseint *a, int n 七、(12 分)下面的函数统计子字符串substr 在字符串 str 中显现的次数
13、,假如substr 在 str中不显现,就返回值0;请完成该函数;int str_countchar *substr, char *str 一、挑选填空题1、 D 2、A 3、 C 4、 C 5、B 6、 D 7、A 8、 B 9、A 10、 D 11、A 12、 A 13、C 14、B 15、 C 16、D 17、C 18、 A 19、C 20、D 二、问答题1、 虚析构函数有什么作用?解答要点:对象销毁时,需要调用析构函数;在多态调用时,是用基类的指针拜访派生类的对象;假如析构函数是非虚函数,就基类指针只能拜访基类的析构函数,而不能拜访派生类的析构函数,导致派生类对象销毁时,没有调用派生类
14、的析构函数,只是调用了基类的析构函数;假如把析构函数定义成虚函数,就可克服这个问题;2、 拷贝构造函数在哪几种情形下调用?解答要点:用一个对象初始化另一个对象时当用对象作为函数参数传递时当函数返回对象时细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 5 页,共 8 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -3、 函数重载与函数掩盖有什么不同,它们与多态有什么关系?解答要点:函数重载是指函数名相同,而函数的参数个数或类型不同;掩盖是指在派生类中成员函数与基类成员函数的函
15、数名、参数个数、类型与返回值均相同;4、 C+继承是如何工作的?解答要点:C+中正是通过虚函数的掩盖,实现多态的功能;继承使得派生类能够使用基类的公有和爱护成员,从而实现代码的复用,派生类可以增加成员,也可 以隐匿和掩盖基类的成员;对于公有继承,基类成员的拜访权限在派生类保持不变;5、 类与对象有什么区分?解答要点:类是类型,是对象的抽象,对象是类的详细实例;一个类可以有多个对象,每个对象都有自己的储备 单元,而类不占储备单元;三、运行结果为:D:virfun called. 四、填空 char * argv1 *str+ 五、( 8 分) 定义一个字符栈类 Stack(包括类的实现 ;数据成
16、员包括一个存放字符的数组 stck 和一个 栈指针 tos;栈数组的尺寸由常量 SIZE 确定;栈的基本操作为 Push ()和 Pop();const int SIZE=27; class Stack public: Stack:tos0; void Pushchar ch; char Pop; private: char stckSIZE; int tos; ; void Stack:Pushchar ch iftos=SIZE coutnStack is fulln; else stcktos=ch;tos+; 细心整理归纳 精选学习资料 - - - - - - - - - - - -
17、- - - 第 6 页,共 8 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -char Stack:Pop iftos=0 coutnStack is emptyn; return 0; tos-; return stcktos; 六、 10 分 完成下面的函数,对有n 个元素的数组a,使数组元素按逆序排列;void inverseint *a, int n int i,*p; p=new intn; fori=0;i=n-1;i+ pi=ai; fori=0;i=n-1;i+ ai=pn-i-1; delete
18、p; 七、( 12 分)下面的函数统计子字符串substr 在字符串str 中显现的次数,假如substr 在 str 中不显现,就返回值 0;请完成该函数;int str_countchar *substr, char *str int count=0; char *pChar; ifsubstr=NULL|str=NULL return count; while*str.=0 pChar=substr; while*pChar=*str pChar+; if*pChar=0 count+;break; else str+; 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 7 页,共 8 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -/Match while*pCh. statement str+; /Match while*str. statement return count; 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 8 页,共 8 页 - - - - - - - - -