北航《C++程序设计》复习题
北航《C++程序设计》复习题一 本模拟题页码标注所用教材为:C++语言程序设计(第4版)郑莉、董渊、何江舟2010年7月第4版清华大学出版社书
如学员使用其他版本教材,请参考相关知识点 一、 客观题(总分30分)单项选择题(本大题共30分,共20小题,每小题1.5分)1、for(int x=0,y=0;!x&&y<=5;y++)语句执行循环的次数是()
A、0
B、5
C、6
D、无数次
2、假定AB为一个类,则执行“AB a(4), b , * p ;”语句时,自动调用该类构造函数的次数为( )。
A、3
B、4
C、6
D、9
3、下面的哪个保留字不能作为函数的返回类型? ( )
A、void
B、int
C、new
D、long
4、在C++中,用于实现运行时多态性的是( )
A、内联函数
B、重载函数
C、模板函数
D、虚函数
5、在C++语言的if语句中,用作判断的表达式为( )
A、关系表达式
B、逻辑表达式
C、算术表达式
D、任意表达式
6、关于虚函数的描述中,正确的是()
A、虚函数是一个static类型的成员函数
B、虚函数是一个非成员函数
C、基类中说明了虚函数后,派生类中将其对应的函数可不必说明为虚函数
D、派生类的虚函数与基类的虚函数具有不同的参数个数和类型
7、有如下类声明: class MyBASE{ int k; public: void set(int n){k=n;} int get( )const{ return k; } }; class MyDERIVED: protected MyBASE{protected: int j; public: void set(int m, int n){ MyBASE::set(m); j=n;} intget( )const{ return MyBASE::get( )+j; } }; 则类MyDERIVED中保护的数据成员和成员函数的个数是( )
A、4
B、3
C、2
D、1
8、下列关于运算符重载的叙述中,正确的是( )
A、通过运算符重载,可以定义新的运算符
B、有的运算符只能作为成员函数重载
C、若重载运算符+,则相应的运算符函数名是+
D、重载一个二元运算符时,必须声明两个形参
9、下面函数的功能是( )。 voidfun(char s1[ ], char s2[ ]) { while(s2++=s1++); }
A、字符串比较
B、字符串复制
C、字符串连接
D、字符串反向
10、下列关于C++函数的说明中,正确的是( )
A、内联函数就是定义在另一个函数体内部的函数
B、函数体的最后一条语句必须是return语句
C、标准C++要求在调用一个函数之前,必须先声明其原型
D、编译器会根据函数的返回值类型和参数表来区分函数的不同重载形式
11、在每个C++程序中都必须包含有这样一个函数,该函数的函数名为()。
A、main
B、MAIN
C、name
D、function
12、有如下程序: #include “iostream.h”using namespace std; class BASE{ public: ~BASE( ){cout<<"BASE";} }; class DERIVED: public BASE { public:~DERIVED( ){ cout<<"DERIVED";} }; int main( ){DERIVED x; return0 ;} 执行后的输出结果是( )
A、BASE
B、DERIVED
C、BASEDERIVED
D、DERIVEDBASE
13、下面关于C++流的叙述中,正确的是( )
A、cin是一个输入流对象
B、可以用ifstream定义一个输出流对象
C、执行语句序列 char *y="PQMN";cout<<y; 将输出字符串 "PQMN"的地址
D、执行语句序列char x; cin.getline(x,80); 时,若键入 Happy new year 则x中的字符串是"Happy"
14、关于delete运算符的描述中,错误的是( )
A、它必须用于new返回的指针
B、它也适用于空指针
C、对于一个指针可以多次使用该运算符
D、指针名前只用一对方括号符,不管删除数组的维数
15、不可重载的函数的是( ):A、普通的成员函数 B、析构函数C、友元函数D、外部函数16、面向对象的多态性不正确的是( )。A、不同名字的函数定义相同功能B、同一种运算符定义不同的操作C、函数允许同名 D、派生类中可出现与基类同名的函数17、可定义作运算符重载函数的是( ) A、类以外的函数 B、构造函数 C、析构函数 D、主函数。18、对虚基类的论述,正确的是( ) A、基类中没有数据成员才考虑虚基类 B、基类中没有成员函数才考虑虚基类C、基类没有类名才考虑虚基类D、一个派生类有多个父类,而这多个父类又有一个共同基类,才考虑设置虚基类。19、关于抽象类的下列描述中,错误的是( ) A、如果一个类至少有一个纯虚函数,那么该类为抽象类。B、抽象类只能用作其他类的基类,不能建立抽象类对象。C、抽象类可以用来定义指针。 D、抽象类可以作为函数的参数类型。20、C++用cout 和 cin 进行输出/输入操作时需要包含文件是( )A、fstream.h B、iostream.h C、stdio.h D、math.h二、 主观题(总分70分)程序分析题(本大题共3小题,每小题15分,共45分)21、请解释面向对象中“类”的含义。22、阅读下列程序,写出运行结果。#include <iostream.h> voidfun1(int i) { i += 15;} voidfun2(int&i) { i += 10;} void main( ) {int k=5; fun1(k);cout<<"k="<<k; fun2(k);cout<<" k="<<k<<endl;}23、阅读下列程序,写出运行结果。#include <iostream.h> class Base {public:Base(int n){ cout << "现在进入 Base 基类的构造函数\n";i=n;}~Base( ) { cout <<"现在进入 Base 基类的析构函数\n"; }void showi( ) { cout << i << endl; }private:int i;};classDerive:publicBase {public :Derive(int n, int m):Base(m) { cout << "现在进入 Derive 派生类的构造函数\n";j=n; }~Derive( ) { cout <<"现在进入 Derive 派生类的析构函数“<<endl; }void showj( ) { cout << j << endl; }private:int j;};void main( ){ Derive obj(0,40); obj.showi( );}编程题(本题共1小题,每小题25分,共25分)24、编写程序求1!+2!+…+10! 复习题答案单项选择题(本大题共20小题,每小题1.5分,共30分)
12345678910
CBCDDCBBBC
11121314151617181920
ADACBAADDB
程序分析题(本大题共3小题,每小题15分,共45分)21、考核知识点:类的定义,参见P10122、考核知识点:函数的定义与使用,参见P6423、考核知识点:派生类的构造和析构函数,参见P264编程题(本题共1小题,每小题25分,共25分)24、考核知识点:for语句,参见P47 北航《C++程序设计》复习题二 本模拟题页码标注所用教材为:
C++语言程序设计(第4版)郑莉、董渊、何江舟2010年7月第4版清华大学出版社书
如学员使用其他版本教材,请参考相关知识点 三、 客观题(总分30分)单项选择题(本大题共30分,共20小题,每小题1.5分)1、下列静态数据成员的特性中,错误的是( )
A、说明静态数据成员前边加static
B、静态数据成员要在类体外初始化
C、引用静态数据成员时,要在静态数据成员前加和作用域运算符
D、静态数据成员不是一个类所有对象共享的2、在以下说明中,标识符ptr( )。 int (*ptr);
A、说明不合法
B、是一个指针数组名,每个元素是一个指向整数变量的指针
C、是一个指针数组名,每个元素是一个指向整数变量的指针
D、是一个指向整型变量的指针 3、若用数组名作为函数调用时的实参,则实际上传递给形参的是( )
A、数组首地址
B、数组的第一个元素值
C、数组中全部元素的值
D、数组元素的个数4、下列关于模板的叙述中,错误的是( )
A、模板声明中的第一个符号总是关键字template
B、在模板声明中用 < 和 > 括起来的部分是模板的形参表
C、类模板不能有数据成员
D、在一定条件下函数模板的实参可以省略
5、结构化程序设计所规定的三种基本控制结构是 ( )
A、输入、处理、输出
B、树形、网形、环形
C、顺序、选择、循环
D、主程序、子程序、函数
6、在以下关于C++语言的注释的叙述中,不正确的是( )
A、C++程序中,注释可用“/*”、“*/”形式表示,也可用“//”形式表示
B、C++编译器在编译一个程序时,将跳过注释,不对其进行处理
C、C++编译器在编译一个程序时,可发现注释中的单词拼写错误
D、程序中注释的多少不会影响所生成的可执行文件的长度
7、C++语言的跳转语句中,对于break和continue说法正确的是( )
A、break语句只应用于循环体中
B、continue语句只应用于循环体中
C、break是无条件跳转语句,continue不是
D、break和continue的跳转范围不够明确,容易产生问题8、执行语句序列 inti=0; while(i < 25) i+=3; cout<<i;输出结果是( )
A、24
B、25
C、27
D、28
9、下列关于C++函数的叙述中,正确的是()
A、每个函数至少要具有一个参数
B、每个函数都必须返回一个值
C、函数在被调用之前必须先声明
D、函数不能自己调用自己
10、假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为: ( )。
A、AB operator+(AB & a , AB &b)
B、AB operator+(AB & a)
C、operator+(AB a)
D、AB & operator+( )
11、面向对象系统不具有( )特性
A、继承性
B、封装性
C、过程性
D、多态性
12、通常拷贝构造函数的参数是()
A、某个对象名
B、某个对象的成员名
C、某个对象的引用名
D、某个对象的指针名
13、已知在一个类体中包含如下函数原型: VOLUME operator-(VOLUME)const;,下列关于这个函数的叙述中,错误的是( )
A、这是运算符-的重载运算符函数
B、这个函数所重载的运算符是一个一元运算符
C、这是一个成员函数
D、这个函数不改变类的任何数据成员的值
14、有如下类声明: classFoo { int bar; }; 则Foo类的成员bar是( )
A、公有数据成员
B、公有成员函数
C、私有数据成员
D、私有成员函数15、析构函数的特征是( ) A、析构函数可以有多个参数B、析构函数只能在类体内定义C、一个类中只能定义一个析构函数 D、一个类中能定义多个析构函数。16、类的友元可以访问该类的( ) A、只能是数据成员 B、所有成员 C、只能是成员函数 D、只能是公有成员17、基类和派生类的相互关系正确的是( ) A、从基类到派生类称为派生 B、从基类到派生类称为继承 C、从派生类到基类称为派生 D、派生类包含了基类18、一个基类可以派生出二个派生类,这种继承关系还是称为() A、多继承 B、多重继承 C、单继承 D、双重继承19、基类成员在派生类中的访问属性描述中,错误的是( ) A、无论哪种派生,基类的公有成员允许派生类的成员函数访问。B、无论哪种派生,基类的保护成员允许派生类的成员函数访问。C、无论哪种派生,基类的私有成员不允许派生类的成员函数访问。D、无论哪种派生,基类的保护成员不允许派生类的成员函数访问。20、派生类构造函数的执行顺序正确的是()。A、先执行基类的构造函数,再执行派生类的构造函数。B、先执行派生类的构造函数,再执行基类的构造函数。C、先执行派生类构造函数的函数体,再执行基类构造函数的函数体。D、以上都不是。四、 主观题(总分70分)程序分析题(本大题共3小题,每小题15分,共45分)21、请解释面向对象中“继承”的含义。22、编C++程序,从键盘输入二个任意大小的数,在屏幕上从小到大输出这二个数。23、阅读下列程序,写出运行结果#include <iostream.h>class Point {public:Point( int x1=0, int y1=0) {x=x1; y=y1; d=x*x+y*y;}void print(){cout<<"x="<<x<<"y="<<y<<” dist=”<<d<<endl;}private:int x, y, d;};void main(){Point p1(5),p2(6,7),*p;p=&p1; p->print();p2.print();}编程题(本题共1小题,每小题25分,共25分)24、编写程序实现输入一个整数,输出相应的五分制成绩。设90分以上为“A”,80分至89分为“B”,70至79分为“C”,60到69分为“D”,60分以下为“E”。复习题答案单项选择题(本大题共30分,共20小题,每小题1.5分)
12345678910
DCACCCBCCB
11121314151617181920
CCBCCBACDA
程序分析题(本大题共3小题,每小题15分,共45分)21、考核知识点:面向对象程序设计的基本特点-继承,参见P10022、考核知识点:用if语句实现选择结构,参见P3923、考核知识点:对象指针,参见P213编程题(本题共1小题,每小题25分,共25分)24、考核知识点:用if语句实现多重选择结构,参见P41
页:
[1]