2022年C++期末考试题及答案_第1页
2022年C++期末考试题及答案_第2页
2022年C++期末考试题及答案_第3页
2022年C++期末考试题及答案_第4页
2022年C++期末考试题及答案_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

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 b.在其之前未配对的if c.在其之前未配对的最近的if d.同一行上的if 4. 在int a 3=1,3,

2、2,4,5,6,0;中, a22 的值是( c ) 。a.1 b.0 c.6 d.2 5. 设char *s ;,以下正确的表达式是(b) 。a.s=computer; b.*s=computer; c.*s=computer; d.*s=c; 6. 对于 int *pa5 ;的描述中,(d )是正确的。a.pa是一个指向数组的指针,所指向的数组是5 个 int 型元素b.pa 是一个指向某数组中第5 个元素的指针,该元素是int 型变量c.pa 5表示某个元素的第5 个元素的值d.pa 是一个具有5 个元素的指针数组,每个元素是一个int 型指针7. 在下列表示引用的方法中,(a )是正确的

3、。已知: int m=10; &x=m; &y=10; &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) 。精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 1 页,共 8 页 - - - - - - - - -精品学习资料 可选择p d f - - - - - - - - - - - - - - 第

4、1 页,共 8 页 - - - - - - - - -a.函数的定义不能嵌套,但函数调用可以嵌套b.函数的定义可以嵌套,但函数调用不能嵌套c.函数的定义和调用都不能嵌套d.函数的定义和调用都可以嵌套10. 在一个被调用函数中,关于return 语句使用的描述, (d )是错误的。a.被调用函数中可以不用return 语句b.被调用函数中可以使用多个return 语句c.被调用函数中,如果有返回值,就一定要有return 语句d.被调用函数中,一个return 语句可以返回多个值给调用函数11. 在一个函数中,要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用( a ) 。a.内联

5、函数b.重载函数c.递归调用d.嵌套调用12. 使用 fseek 函数可以实现的操作是(a) 。a.改变文件指针的当前位置b.文件的顺序读写c.文件的随机读写d.以上都不对13. 下列存储标识符中, (c )的可见性与存在性不一致。a.外部类b.自动类c.内部静态类d.寄存器类14. 在如下结构定义中,不正确的是(b ) 。a.struct student int no; char name10; float score; ; b.struct stud20 int no; char name10; float score; ; c.struct student int no; char na

6、me10; float score; stud20; d.struct 精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 2 页,共 8 页 - - - - - - - - -精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 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 set(a&a); 其中, a& 的含义是 ( c)。a.指向类 a 的指针为 a b.将 a 的地址值赋给变量set c.a是类 a 对象的引用,用来作函数set()的参数d.变量 a 与 a 按位与作为函数set( )的参数18. 已知: print( ) 函数是一个类的常成员函数,它无返回值,下列表示中,(a )是正确的。a.void print( ) const;

8、b.const void print( ); c.void const print( ); d.void print(const); 19. 关于虚函数的描述中, (c )是正确的。a.虚函数是一个static 类型的成员函数b.虚函数是一个非成员函数c.基类中说明了虚函数后,派生类中将其对应的函数可不必说明为虚函数d.派生类的虚函数与基类的虚函数具有不同的参数个数和类型20. 关于 new 运算符的下列描述中, (d )是错的。a.它可以用来动态创建对象和对象数组b.使用它创建的对象和对象数组可以使用运算符delete 删除c.使用它创建对象时要调用构造函数d.使用它创建对象数组时必须指定初

9、始值二、问答题( 15 分)1、 (3 分)虚析构函数有什么作用?对象销毁时要调用析构函数,如果不是定义的虚析构函数, 基类指针只能访问基类析构,不能访问派生类析构,若定义的虚析构则可以解决这问题2、 (3 分)拷贝构造函数在哪几种情况下调用?用一个对象初始化另一个对象;当函数返回对象;当对象作为函数参数传递。精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 3 页,共 8 页 - - - - - - - - -精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 3 页,共 8 页 - - - - - - - -

10、 -3、 (4 分)函数重载与函数覆盖有什么不同,它们与多态有什么关系?函数重载函数名相同,而函数参数个数,函数类型不同;覆盖是指函数名,函数个数,函数类型都相同。c+是通过虚函数的覆盖,实现多态的功能。4、 (3 分) c+继承是如何工作的?5、 (2 分)类与对象有什么区别?三、 (6 分)分析下面程序的运行结果#include class b public: b() b(int i)b=i; virtual void virfun() coutb:virfun() called.n; private: int b; ; class d:public b public: d() d(int

11、 i,int j):b(i)d=j; private: int d; void virfun() coutvirfun(); void main() d *pd=new d; fun(pd); 四、 (9 分)下面的程序可以统计命令行第一个参数中出现的字母个数,请填充下面空白,完成程序。#include #include 精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 4 页,共 8 页 - - - - - - - - -精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 4 页,共 8 页 - - - - -

12、 - - - -void main(int argc, argv;) char *str; int count=0; if(argc2)exit(1); str= argv1 ; while(*str) if(isalpha(*str+ ) count+; printf(n 字母个数: %dn,count); 提示: int isalpha(int ch) 函数功能是检查ch 是否是字母五、 (8 分)定义一个字符栈类stack(包括类的实现)。数据成员包括一个存放字符的数组stck 和一个栈指针tos。栈数组的尺寸由常量size 确定。栈的基本操作为push()和 pop() 。六、 (10

13、 分 )完成下面的函数,对有n 个元素的数组a,使数组元素按逆序排列。void inverse(int *a, int n) 七、 (12 分)下面的函数统计子字符串substr 在字符串str 中出现的次数,如果substr 在 str中不出现,则返回值0。请完成该函数。int str_count(char *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、 拷贝构造函数在哪几种情况下调用?解答要点:用一个对象初始化另一个对象时当用对象作为函数参数传递时当函数返回对象时精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 5 页,共 8 页 - - - - - - - - -精品学习资料 可选择p d f - - - - - - -

15、 - - - - - - - 第 5 页,共 8 页 - - - - - - - - -3、 函数重载与函数覆盖有什么不同,它们与多态有什么关系?解答要点:函数重载是指函数名相同,而函数的参数个数或类型不同;覆盖是指在派生类中成员函数与基类成员函数的函数名、参数个数、类型与返回值均相同;c+中正是通过虚函数的覆盖,实现多态的功能。4、 c+继承是如何工作的?解答要点:继承使得派生类能够使用基类的公有和保护成员,从而实现代码的复用,派生类可以增加成员,也可以隐藏和覆盖基类的成员。对于公有继承,基类成员的访问权限在派生类保持不变。5、 类与对象有什么区别?解答要点:类是类型,是对象的抽象,对象是类

16、的具体实例。一个类可以有多个对象,每个对象都有自己的存储单元,而类不占存储单元。三、运行结果为:d:virfun() called. 四、填空 char * argv1 *str+ 五、( 8 分) 定义一个字符栈类stack(包括类的实现)。数据成员包括一个存放字符的数组stck 和一个栈指针 tos。栈数组的尺寸由常量size 确定。栈的基本操作为push()和 pop()。const int size=27; class stack public: stack():tos(0); void push(char ch); char pop(); private: char stcksize

17、; int tos; ; void stack:push(char ch) if(tos=size) coutnstack is fulln; else stcktos=ch;tos+; 精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 6 页,共 8 页 - - - - - - - - -精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 6 页,共 8 页 - - - - - - - - -char stack:pop() if(tos=0) coutnstack is emptyn; return 0; t

18、os-; return stcktos; 六、 (10 分)完成下面的函数,对有n 个元素的数组a,使数组元素按逆序排列。void inverse(int *a, int n) int i,*p; p=new intn; for(i=0;i=n-1;i+) pi=ai; for(i=0;i=n-1;i+) ai=pn-i-1; delete p; 七、( 12 分)下面的函数统计子字符串substr 在字符串str 中出现的次数,如果substr 在 str 中不出现,则返回值 0。请完成该函数。int str_count(char *substr, char *str) int count=0; char *pchar; if(substr=null|str=null) return count; while(*str!=0) pchar=substr; while(*pchar=*str) pchar+; if(*pchar=0) count+;break; else str+; 精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 7 页,共 8 页 - - - - - - - - -精品学

温馨提示

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

评论

0/150

提交评论