《面向对象程序设计》期末考核试题样例及解答
一、单项选择(每小题1分,12小题,共12分) 1. C++源程序文件的缺省扩展名为( )。
A. cpp B. exe C. obj D. lik 2. x>0 || y==5的相反表达式为( )。
A. x<=0 || y!=5 B. x<=0 && y!=5 C. x>0 || y!=5 D. x>0 && y==5
3. 在下面的字符数组定义中,有语法错误的是( )。
A. char a[20]=“abcdefg”; B. char a[]=“x+y=55.”; C. char a[15]; D. char a[10]=’5’; 4. 以下正确的函数原型语句是( )。 A. double fun(int x,int y) B. double fun(int x;int y) C. double fun(int,int); D. double fun(int x,y); 5. 在下面存储类中,( )的对象不是局部变量。
A. 外部静态类 B. 自动类 C. 函数形参 D. 寄存器类
6. 假定有“struct BOOK{char title[40]; float price;}; BOOK *book=new BOOK;”,则正确的语句是( )。
A. strcpy(book->title,”Wang Tao”); B. strcpy(book.title,”Wang Tao”); C. strcpy(*book.title,”Wang Tao”); D. strcpy((*book)->title,”Wang Tao”); 7. 软件产品所具有的全部或部分地再用于新的应用的能力称为该软件的( )。 A. 可维护性 B. 可复用性 C. 兼容性 D. 正确性 8. 在多文件结构的程序中,通常把含有main()函数的文件称为( )。 A. 主文件 B. 实现文件 C. 程序文件 D. 头文件 9. 在一个用链表实现的队列类中,假定每个结点包含的值域用elem表示,包含的指针域用next表示,链队的队首指针用elemHead表示,队尾指针用elemTail表示,若链队为空,则进行插入时必须把新结点的地址赋给( )。 A. elemHead B. elemTail
C. elemHead和elemTail D. elemHead或elemTail
10. 假定AB为一个类,则执行 “AB a, b(2), c[3], *p=&a;”语句时共调用该类无参构造函数的次数为( )。
A. 5 B. 6 C. 3 D. 4 11. 引入友元的主要目的是为了( )。
A. 增强数据安全性 B. 提高程序的可靠性 C. 提高程序的效率和灵活性 D. 保证类的封装性 12. 如果是类B在类A的基础上构造,那么,就称( )。 A. 类A为基类或父类,类B为超类或子类
B. 类A为基类、父类或超类,类B为派生类或子类 C. 类A为派生类,类B为基类
D. 类A为派生类或子类,类B为基类、父类或超类
二、填空(每空1分,15小题,共18分)
1
1. C++语言是在_________语言的基础上发展起来的。
2. 假定x=5,y=6,则执行表达式y*=x++计算后,x和y的值分别为__________和__________。
3. 假定x是一个逻辑量,则x && false的值为__________。
4. 在if语句中,每个else关键字与它前面同层次并且最接近的________关键字相配套。
5. 一个二维字符数组a[10][20]能够存储________个字符串,每个字符串的长度至多为________。
6. 局部变量具有局部生存期,存放在内存的____________区中。
7.假定p所指对象的值为25,p+1所指对象的值为42,则执行*(p++)或*p++运算后,p所指对象的值为________。
8. 已知语句“cout<
9. 面向对象软件开发的生命周期分为三个阶段,即分析、__________和__________。 10. 若采用p->abc(y)表达式调用一个成员函数,在成员函数中使用的________就代表了类外的p指针。 11.当用户为一个类定义有____________时,则系统不会为该类再自动生成一个默认构造函数。
12.假定用户为类AB定义了一个构造函数\,则定义该类的对象时,有________种定义格式。
13.假定用户只为类AB定义了一个构造函数\,则定义该类的对象时,其实参表中至少带有_________个实参。
14. 在重载一个单目运算符时,参数表中没有参数,说明该运算符函数只能是类的_____________。
15. 若要保证一个公共的基类在派生类中只产生一个基类子对象,则必须都以____________的方式继承它。
三、程序填充。对程序、函数或类中划有横线的位置,根据题意按标号把合适的内容填写到程序下面相应标号的后面(每小题6分,3小题,共18分)
1. 把从键盘上输入的一个大于等于3的整数分解为质因子的乘积。如输入24时得到的输出结果为“2 2 2 3”,输入50时得到的输出结果为“2 5 5”,输入37时得到的输出结果为“37”。
#include
int x;
cout<<\请输入一个整数,若小于3则重输:\ do cin>>x; while(___(1)___); int i=2; do{
while(___(2)___) { cout<
2
___(3)___; }while(i if(x!=1) cout< 2. 假定有定义为“struct NODE{int data; NODE* next;};”,下面算法根据table数组中的n个元素建立一个表头指针为L的链表,链表中结点值的顺序与数组元素值的顺序正好相反。 void f6(NODE*& L, int table[], int n) { L=NULL; if(n<=0) return; int i=0; NODE* p; while(___(1)___) { p=new NODE; p->data=___(2)___; p->next=L; ___(3)___; i++; } } (1) (2) (3) 3. 已知一个利用数组实现栈的类定义如下: const int ARRAY_SIZE=10; class Stack { public: void Init() {top=-1;} //初始化栈为空 void Push(int newElem); //向栈中压入一个元素 int Pop(); //从栈顶弹出一个元素 bool Empty() { //判栈空 return top==-1; } int Depth() {return top+1;} //返回栈的深度 void Print(); //按照后进先出原则依次输出栈中每个元素, //直到栈空为止 private: 3