C++程序设计 (A)
一、选择题(每小题2分,共20分)
1、关于对象概念的描述中,( )是错误的。
A. 对象就是C语言中的结构变量
B. 对象代表着正在创建的系统中的一个实体 C. 对象是一个状态和操作(或方法)的封装体 D. 对象之间的信息传递是通过消息进行的 2、对于int *pa[5];的描述,( )是正确的。
A. pa是一个指向数组的指针,所指向的数组是5个int型元素 B. pa是一个指向某个数组中第5个元素的指针,该元素是int型变量 C. pa[5]表示某个数组的第5个元素的值
D. pa是一个具有5个元素的指针数组,每个元素是一个int型指针 3、下列for循环的循环体执行次数为( )。 for(int i=0,j=10;i=j=4;i++,j- -)
A. 0 B. 无限 C. 4 D. 1 4、下述静态数据成员的特征中,( )是错误的。
A. 说明静态数据成员时前边要加修饰符static B. 静态数据成员要在类体外进行初始化
C. 引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符 D. 静态数据成员不是所有对象所共用的 5、( )是析构函数的特征。
A. 一个类中只能定义一个析构函数 B. 析构函数与类名不同
C. 析构函数的定义只能在类体内 D. 析构函数可以有各个或多个参数。 6、已知:p是一个指向类A数据成员m的指针,A1是类A的一个对象, 如果要给m赋值
为5,下列表达式( )是正确的。
A. A1.p=5 B. A1->p=5 C. A1.*p=5 D. *A1.p=5 7、关于new运算符的下列描述中,( )是错误的。
A. 它可以用来动态创建对象和对象数组
B. 使用它创建的对象或对象数组可以使用运算符delete删除 C. 使用它创建对象时要调用构造函数 D. 使用它创建对象数组时必须指定初始值
8、派生类的对象对它的基类成员中( )是可以访问的。
A. 公有继承的公有成员 B. 公有继承的私有成员 C. 公有继承的保护成员
1 / 13
传播优秀Word版文档 ,希望对您有帮助,可双击去除!
D. 私有继承的公有成员 9、下列( )是引用调用。
A.形参是指针,实参是地址值 B.形参和实参都是变量 C.形参是引用,实参是变量 D.形参是变量,实参是引用 10、下述关于开关语句的描述中,( )是正确的。
A.开关语句中default子句可以没有,也可以有一个; B.开关语句中每个语句序列中必须有break语句; C.开关语句中default子句只能放在最后;
D.开关语句中case子句后面的表达式可以是整形表达式。 二、填空题(共60分)
(一)、基本概念题(每题2分,共10分)
1、____(1)____类型转换专门针对有虚函数的继承结构,它将基类指针转换成其派生类指针,以做好派生类操作的准备。
2、函数重载是指函数的____(2)_____不同。 3、设有说明语句:
int a[ ][4]={{1,2}, {2,3,4,5}}, *p=(int *)a; 则*(p+5)的值为____(3)_____。 4、设有宏定义和变量说明: #define T(x,y) x+y int a= T(3,4) * T(3,5);
则变量a的初值为____(4)______。
5、编程质量的衡量标准包括可读性、易编程性、安全性、可扩充性、效率和____(5)____。 (二)、完善程序题(每空2分,共20分)
1、单链表中结点按元素值递增链接,DeleteAb实现删除结点值在a至b之间的结点(a≤b)的功能。
#include node *DeleteAb(int a,int b,node *first) { node *p=first; node *q=____(6)______; while( p && p->xlink; } 传播优秀Word版文档 ,希望对您有帮助,可双击去除! else if(q==first) { q=___(8)______; p=first=q; } else { q->link=____(9)______; p=q->link; } } return ____(10)______; } void main( ) { node a[10]={ {1},{2},{3},{4},{5},{6},{7},{8},{9},{10} },*hd=a,*p; int x,y; for( int i=0;i<9;i++ ) a[i].link=&a[i+1]; a[9].link=NULL; p=DeleteAb(x,y,hd); while(p) { cout< 2、程序构造了一个集合类,其中以整形数组存放集合中的元素。通过重载运算符“*”,实现求两个集合交集的运算,即两个集合的共有元素。例如,设集合a,b分别为: 集合a={1,2,3,4,15,6,7,8,9,10}; 集合b={1,2,3,4,5,16,17,18,19,20}; 求交集a*b的结果为{1,2,3,4}。通过重载运算符“=”,实现两个集合的赋值运算。 #include set( ) { for(int i=0;i<10;i++) x[i]=0; len=0; } set(int *p, int n) { for (int i=0;i set operator* (set a,set b) { set t; int k=0; for (int i=0;i 传播优秀Word版文档 ,希望对您有帮助,可双击去除! break; } _____(12)_____=k; return t; } set & _____(13)______(set b) { for (int i=0;i { int a[10]={ 1,2,3,4,5,6,7,8}; int b[10]={1,12,3,5,8,6,7,14,29}; set set1(a,8),set2(b,9),c; c=set1*set2; c.show(____(15)____); } (三)、阅读程序题(每题5分,共30分) 1、以下程序的执行结果是___(16)_____ 。 #include { case 1: switch (y) { case 0: cout<<\"first\\"; case 1: cout<<\"second\\"; break; default: cout<<\"hellow\\"; } case 2: cout<<\"third\\n\"; } } 2、 以下程序的执行结果是___(17)_____ 。 传播优秀Word版文档 ,希望对您有帮助,可双击去除! #include cout< 3、以下程序的执行结果是___(18)_____ 。 #include void main(void) { int x=3,y=2; f(x,y); cout< AA(int i,int j) {A=i; B=j; cout<<\"Constructor\\n\";} AA(AA &obj) {A=obj.A+10; B=obj.B+20; cout<<\"Copy_Constructor\\n\";} ~AA() {cout<<\"Destructor\\n\";} 传播优秀Word版文档 ,希望对您有帮助,可双击去除! void print()
Copyright © 2019- xiaozhentang.com 版权所有 湘ICP备2023022495号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务