1、C+期末考试题及答案11.关于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.在其之前未配对的ifc.在其之前未配对的最近的if d.同一行上的if4.在int a 3=1,3,2,4,5,6,0; 中,a22的值是(C)。a.1 b.0 c.6
2、 d.25.设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 )是正确的。 已知: int m=10;a.int &x=m; b.int &y=1
3、0;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)。a.函数的定义不能嵌套,但函数调用可以嵌套b.函数的定义可以嵌套,但函数调用不能嵌套c.函数的定义和调用都不能嵌套d .函数的定义和调用都可以嵌套10.在一个被调用函数中,关于 return 语句使用的描述, ( D) 是错误的。a.被调用函数中可以不用 return语句b.被调用函数中可以使用多个 return语句c.被调用函数中,如果有返回值,就一定要有
4、return语句d.被调用函数中,一个return语句可以返回多个值给调用函数11.在一个函数中,要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用( A )a.内联函数 b.重载函数c.递归调用 d.嵌套调用12.使用 fseek 函数可以实现的操作是( A)。a.改变文件指针的当前位置b.文件的顺序读写c.文件的随机读写d .以上都不对13.下列存储标识符中,(C)的可见性与存在性不一致a.外部类 b.自动类c.内部静态类 d.寄存器类14.在如下结构定义中,不正确的是( B)。a.struct studentint no;char name10;float score;b.
5、struct stud20int no;char name10;float score;c.struct studentint no;char name10;float score; stud20;d.structint no;char name10;float score;stud100 ;15. 将两个字符串连接起来组成一个字符串时,选用(C)函数。a.strlen( )b.strcpy( )c.strcat( )d.strcmp( )16. ( D)不是构造函数的特征a.构造函数的函数名与类名相同b.构造函数可以重载c.构造函数可以设置缺省参数d.构造函数必须指定类型说明17.已知:类
6、A 中一个成员函数说明如下: void Set(A&a);其中, A& 的含义是 (C )。a.指向类A的指针为ab.将a的地址值赋给变量 Setc.a是类A对象的引用,用来作函数 Set ()的参数d.变量A与a按位与作为函数Set()的参数18.已知: print( ) 函数是一个类的常成员函数,它无返回值,下 列表示中,(A)是正确的。a.void print( ) const; b.const void print( );c.void const print( ); d.void print(const);19.关于虚函数的描述中, (C )是正确的。a.虚函数是一个static类型的
7、成员函数b.虚函数是一个非成员函数c.基类中说明了虚函数后,派生类中将其对应的函数可不必说 明为虚函数d.派生类的虚函数与基类的虚函数具有不同的参数个数和类型20.关于new运算符的下列描述中,(D)是错的。a.它可以用来动态创建对象和对象数组b.使用它创建的对象和对象数组可以使用运算符 delete删除c.使用它创建对象时要调用构造函数d .使用它创建对象数组时必须指定初始值三、(6 分)分析下面程序的运行结果#include class Bpublic:B()B(int i)b=i;virtual void virfun()coutB:virfun() called.n;private:i
8、nt b;class D:public Bpublic:D()D(int i,int j):B(i)d=j;private:int d;void virfun()coutvirfun();void main()D *pd=new D; fun(pd);四、(9 分)下面的程序可以统计命令行第一个参数中出现的字 母个数,请填充下面空白,完成程序。#include #include void main(int argc, argv;)char *str; int count=0;if(argc2)exit(1);str=while(*str)if(isalpha( ) count+;printf(
9、n 字母个数: %dn,count);提示: int isalpha(int ch) 函数功能是检查 ch 是否是字母五、 (8分)定义一个字符栈类Stack (包括类的实现)。数据成 员包括一个存放字符的数组 stck和一个栈指针tos。栈数组的 尺寸由常量SIZE确定。栈的基本操作为 Push ()和Pop()o六、 (10分)完成下面的函数,对有 n个元素的数组a,使数组元 素按逆序排列。void inverse(int *a, int n)七、 (12 分)下面的函数统计子字符串 substr 在字符串 str 中出 现的次数,如果substr在str中不出现,则返回值 0。请完成该
10、函数。int str_count(char *substr, char *str)二、问答题1、 虚析构函数有什么作用?解答要点:对象销毁时, 需要调用析构函数。 在多态调用时, 是用基类 的指针访问派生类的对象。 如果析构函数是非虚函数, 则基类指 针只能访问基类的析构函数, 而不能访问派生类的析构函数, 导 致派生类对象销毁时, 没有调用派生类的析构函数, 只是调用了 基类的析构函数。 如果把析构函数定义成虚函数, 则可克服这个 问题。2、 拷贝构造函数在哪几种情况下调用?解答要点: 用一个对象初始化另一个对象时 当用对象作为函数参数传递时 当函数返回对象时3、 函数重载与函数覆盖有什么不
11、同, 它们与多态有什么关系? 解答要点:函数重载是指函数名相同,而函数的参数个数或类型不同; 覆盖是指在派生类中成员函数与基类成员函数的函数名、 参数个 数、类型与返回值均相同; C+ 中正是通过虚函数的覆盖,实现 多态的功能。4、 C+ 继承是如何工作的?答:继承使得派生类能够使用基类的公有和保护成员, 从而 实现代码的复用, 派生类可以增加成员, 也可以隐藏和覆盖基类 的成员。对于公有继承,基类成员的访问权限在派生类保持不变。5、 类与对象有什么区别?答:类是类型,是对象的抽象,对象是类的具体实例。一个 类可以有多个对象, 每个对象都有自己的存储单元, 而类不占存 储单元。三、运行结果为:
12、 D:virfun() called.四、填空 char * argv1 *str+五、(8分)定义一个字符栈类Stack (包括类的实现)。数据 成员包括一个存放字符的数组 stck和一个栈指针tos。栈数组 的尺寸由常量SIZE确定。栈的基本操作为Push()和Pop()。const int SIZE=27;class Stackpublic:Stack():tos(0);void Push(char ch);char Pop();private:char stckSIZE;int tos;void Stack:Push(char ch)if(tos=SIZE)coutnStack is
13、fulln; elsestcktos=ch;tos+;char Stack:Pop()if(tos=0)coutnStack is emptyn;return 0;tos-;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;七、 ( 1 2分)下面的函数统计子字符串 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+;/Match while(*pCh.) statementstr+;/Match while(*str.) statementreturn count;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1