2011-2012学年第二学期C++程序设计复习提纲

更新时间:2024-06-24 19:03:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一、选择题

1.下列关于对象的描述中,错误的是___________。 A.对象是类的别名 B.对象是类的实例 C.一个类可以定义多个对象 D.对象之间通过消息进行通信 2.在对字符数组进行初始化时,___________是正确的。 A.char s1[]=”abcd”; B.char s2[3]=”xyz”;

C.char s3[][3]={‘a’,‘x’,‘y’}; D.char s4[2][3]={”xyz”,”mnp”}; 3.联合成员的地址值和所占的字节数___________。 A.都相同 B.都不同 C.前者相同,后者不同 D.前者不同,后者相同 4.文件包含命令中被包含的文件的扩展名___________。 A.必须为.h B.不能用.h C.必须是.c D.不一定是.h 5.下列while循环的次数是___________。 while(int i=0) i--; A.0 B.1 C.5 D.无限 6.在函数说明中,下列___________项是不必要的。 A.函数的类型 B.函数参数类型和名字 C.函数名字 D.返回值表达式 7.在传值调用中,要求___________。

A.形参和实参类型类型任意,个数相等 B.实参和形参类型都完全一致,个数相等 C.实参和形参对应的类型一致,个数相等 D.实参和形参对应的类型一致,个数相等

8.在一个函数中,要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用_____比较合适。 A.内联函数 B.重载函数 C.递归调用 D.嵌套调用 9.下列有关对函数模板参数的描述,错误的是___________。 A.函数模板是一组函数的样板 B.函数模板是定义重载函数的一种工具 C.模板函数是函数模板的一个实例 D.模板函数在编译时不生成可执行代码 10.下列各种函数中,___________不是类的成员函数。 A.构造函数 B.析构函数 C.友元函数 D.复制构造函数 11.___________不是构造函数的特征。 A.构造函数的函数名与类名相同 B.构造函数可以重载 C.构造函数可以设置默认参数 D.构造函数必须指定类型说明 12.下述静态数据成员的特性中,___________是错误的。 A.说明静态数据成员时前边要加修饰符static B.静态数据成员要在类体外进行初始化 C.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符 D.静态数据成员不有所有对象所共用的

13.关于delete运算符的下列描述中,___________是错误的。 A.它必须用于new返回的指针 B.它也适用于空指针 C.对一个指针可以使用多次该运算符 D.指针名前只用一对方括号符,不管所删除数组的维数 14.派生类的构造函数的成员初始化值表中,不能包含___________。 A.基类的构造函数 B.派生类中子对象的初始化 C.派生类中静态数据成员的初始化 D.派生类中一般数据成员的初始化 15.下列运算符中,在C++语言中不能重载的是_______________。 A. * B. >= C. :: D. / 16.下列关于面向对象语言的基本要素的描述中,正确的是___________。 A.封装性和重载性 B.多态性和继承性 C.继承性和聚合性 D.封装性和继承性 17.在int b[][3]={{1},{3,2},{4,5,6},{0}};中b[2][2]的值是___________。 A.0 B.5 C.6 D.2 18.下列各运算符中,___________运算的结合性是从左到右。 A.三目 B.赋值 C.比较 D.单目 19.预处理命令在程序中都是以___________开关的。 A. * B. # C. : D. / 20.下列for循环的次数为___________。 for(int i(0),x=0;!x&&i<=5;i++); A.5 B.6 C.1 D.无限

第 1 页 共 17 页

21.当一个函数无返回值时,定义它时函数的类型应是___________。 A.void B.任意 C.int D.无 22.下列描述中___________是引用调用。 A.形参是指针,实参是地址值 B.形参和实参都是变量 C.形参是数组名,实参是数组名 D.形参是引用,实参是变量 23.重载函数在调用时选择的依据中,___________是错误的。 A.参数个数 B.参数的类型 C.参数的顺序 D.函数的类型 24.定义函数模板使用的关键字是___________。 A.class B.inline C.template D.operator 25.下列关键字中,用来说明类中公有成员的是___________。 A.public B.private C.protected D.friend 26.___________是不可以作为该类的成员的。

A.自身类对象的指针 B.自身类的对象 C.自身类对象的引用 D.另一个类的对象 27.通常复制构造函数的参数是_________。 A.某个对象名 B.某个对象的成员名C.某个对象的引用名 D.某个对象的指针名 28.关于new运算符的下列描述中,___________是错误的。

A.它可以用来动态创建对象和对象数组B.使用它创建的对象或对象数组,可以使用运算符delete删除 C.使用它创建对象时要调用构造函数 D.使用它创建对象数组时必须指定初始值 29.派生类的对象对它的基类___________是可以访问的。 A.公有继承的公有成员 B.公有继承的私有成员 C.公有继承的保护成员 D.私有继承的公有成员 30.下列关于运算符重载的描述中,________是正确的。 A.运算符重载可以改变操作数的个数 B.运算符重载可以改变优先级 C.运算符重载不可以改变语法结构 D.运算符重载可以改变结合性 31.下面关于对象概念的描述中,___________是错误的。

A.对象代表着正在创建的系统中的一个实体 B.对象之间的信息传递是通过消息进行的 C.对象是一个状态和操作(或方法)的封装体 D.对象就是C语言中的结构体变量 32.用来表示指向结构体变量指针的成员的是___________运算符。 A. . B. -> C. >> D. << 33.下列表示引用的方法中,___________是正确的。已知:int m=10; A. int &x=m; B. int &y=10; C. D. 34.带参数的宏定义中,程序中引用宏定义的实参___________。 A.只能是常量 B.只能是整型量C.只能是整型表达式 D.可以是任意表达式 35.下列do-while循环的循环次数为___________。

int i(5);do{cout<

36.在函数的返回值类型与返回值表达式的类型的描述中,___________是错误的。 A.函数返回值的类型是在定义函数时确定,在函数调用时是不能改变的 B.函数返回值的类型就是返回值表达式的类型

C.函数返回值表达式类型与函数返回值类型不同时,表达式类型应转换成函数返回值类型 D.函数返回值类型决定了返回值表达式的类型

37.在C++中,关于设置参数默认值的描述中,正确的是___________。 A.不允许设置参数的默认值 B.设置参数默认值只能在定义函数时设置 C.设置参数默认值时,应该是先设置右边的再设置左边的 D.设置参数默认值时,应该全部参数都设置 38.采用函数重载的目的在于___________。 A.实现共享 B.减少空间 C.提高速度 D.使用方便,提高可读性 39.已知函数模板定义如下: template

T min(T x,T y){return x

第 2 页 共 17 页

A.该函数模板有一个模板参数B.该函数模板生成的模板函数中,参数和返回值的类型必须相同 C.该函数模板生成的模板函数中,参数和返回值的类型可以不同 D.T类型所允许的类型范围应对运算符<操作有意义 40.作用域运算符的功能是___________。

A.标识作用域的级别 B.指出作用域的范围C.给定作用域的大小 D.标识某个成员属于哪个类 41.___________是析构函数的特征。 A.一个类中只能定义一个析构函数 B.析构函数名与类名不同 C.析构函数的定义只能在类体内 D.析构函数可以有一个或多个参数 42.友元的作用是__________。

A.增加成员函数的种类 B.加强类的封装性C.实现数据的隐藏性 D.提高程序的运行效率 43.下列关于类模板的描述中,___________是错误的。

A.类模板的成员函数可以是函数模板B.类模板生成模板类时,必须指定参数化所代表的具体类型 C.定义类模板时只允许有一个模板参数D.类模板所描述的是一组类 44.设置虚基类的目的是___________。 A.简化程序 B.消除二义性 C.提高运行效率 D.减少目标代码 45.在C++中,要实现动态联编,必须使用_____________调用虚函数 A.类名 B.派生类指针 C.对象名 D.基类指针 二、判断题

1.C++语言中,既允许单继承,又允许多重继承。

2.派生类是从基类派生出来,它还可以生成新的派生类。

3.派生类中至少包含了它的所有基类的成员,在这些成员中可能有的是不可访问的。 4.虚函数是用virtual关键字说明的成员函数。 5.预处理过程是编译过程之前进行的。

6.共用体的所有成员共占同一段内存地址空间。 7.C++语言是一种以编译方式实现的高级语言。

8.运算符的优先级和结合性可以确定表达式的计算顺序。

9.switch语句可以嵌套,在switch语句的语句序列中还可以再有switch语句。 10.while循环语句的循环体可能一次也不执行

11.如果一个函数没有返回值,定义时需用void说明。

12.在设置了参数默认值后,调用函数的对应实参就可以省略。 13.C++语言中模板分为函数模板和类模板两种。

14.析构函数是一种没有返回值也没有参数的成员函数。 15.const char * p;说明了p是指向字符串常量的指针。 16.C++语言规定对所有用到的变量要“先定义,后使用”。 17.向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法),这种现象称为多态性。 18.使用内联函数是以增大空间开销为代价的。

19.使几个不同的变量共占同一段内存的结构称为共用体。 20.指针变量一经赋值就指向了一个变量。

21.自增运算符(++)和自减运算符(--)只能用于整型变量。 22.派生类中继承的基类成员的访问权限取决于继承方式。 23.C++语言中模板分为函数模板和类模板两种。 24.构造函数和析构函数都不可以被继承。

25.将单目运算符重载为成员函数时,不需说明形参;将双目运算符重载为成员函数时,只能说明一个形参。 26.在对程序进行编译的过程中,不会发现注释中的拼写错误。 27.C++语言中的标识符严格区分大小写字母。

28.如果对静态存储类别的数值变量未赋初值,则默认值为0。 29.break语句可以出现在任何一种循环语句中。 30.预处理过程是编译过程之前进行的。

31.C++程序中的静态存储类别变量和全局变量的初始化是在编译阶段完成的。

32.C++语言中规定:函数返回值的数据类型是由定义函数时规定的数据类型所决定的。 33.在C++中,编译时的多态性是通过函数和运算符的重载实现的。

第 3 页 共 17 页

34.在C++语言中,实参和形参各占用独立的存储单元。

35.在类中,如果不作特别说明,所有成员的访问属性均为私有类型。

36.如果一个函数先被调用,后被定义,则应在主调函数中对被调函数进行原型声明。 37.C++语言规定,函数的调用可以嵌套,但函数的定义不可以嵌套 38.内联函数中不可以包括复杂语句,如switch及循环语句等。 39.友元关系是单向的,不可交换的。

40.构造函数可以重载,而析构函数不可以重载。

41.C++中引进了类和对象的概念,使得C语言发生了质变,即从面向过程变成面向对象。 42.已知:int m=10;则int &x=m;是正确的。

43.如果对静态存储类别的数值变量未赋初值,则默认值为0。

44.常成员函数只能引用数据成员的值,不可以改变数据成员的值。 三、填空题

1.在类中定义和实现的函数称为成员函数。

2.程序中可以有多个名称相同,但参数类型不同或个数不同或类型与个数都不同的函数,这种现象称为函数重载。

3.若定义int a[][4]={1,2,3,4,5,6,7,8,9},则数组a的第一维下标值默认为3。 4.设置虚基类使用的关键字为virtual。

5.凡是定义在函数体内或分程序内的变量称为局部变量

6.含有纯虚函数的类称为抽象类,它不能定义对象,主要用作基类。 7.动态联编支持的多态性称为运行时的多态性。

8.运算符重载函数的两种主要形式是成员函数和友元函数。 9.使用模板是为了提高代码的可重用性。

10.在C++语言中,变量按照生存周期分为静态存储类别变量和自动存储类别变量。 11.非成员函数应声明为类的友元函数,才能访问该类的private成员。 12.在类中,数据成员和成员函数的默认访问属性是private(或私有的)。

13.对于含有对象成员的派生类,其构造函数的执行顺序为:先执行基类的构造函数、再执行对象成员所属类的构造函数,最后执行派生类的构造函数。

14.构造函数是一种特殊的成员函数,其作用是对类的数据成员进行初始化并执行对象的其他内部管理操作。 15.C++语言规定中,程序中用到的变量必须先定义后使用。 16.使几个不同的变量共占同一段内存的结构称为共用体。 17.用已有对象复制一个新对象时调用复制构造函数。

18.C++提供的预处理功能主要有宏定义、文件包含和条件编译。 19.C++中用static声明的变量称为静态变量。

20.程序的三种控制结构包括顺序结构、选择结构(或分支结构)和循环结构。 21.从用户使用的角度看,函数有两种,即系统(库)函数和用户自定义函数。

22.C++规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须字母或下划线。 23.如果参加运算的两个数种有一个数为float型数据,则运算的结果是double型。 24.在定义函数时函数名后面括号中的变量名称为形式参数(简称形参)。

25.如果有一个变量是专门用来存放另一变量的地址(即指针)的,则它称为指针变量。 26.在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。 27.一个新类从已有的类那里获得其已有特性,这种现象称为类的继承。 28.向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法),这种现象称为多态性。 29.若定义int a[2][3]={{2},{3}};则值为3的数组元素是a[1][0]。 30.派生类中的成员包括从基类继承来的成员和自己增加的成员两大部分。 31.设置友元函数的目的是为能够访问该类的私有成员。

32.运算符重载仍然保持原来的优先级、结合性和语法结构。 33.基类的私有成员在派生类中是不可访问的。

34.静态联编支持的多态性称为编译时的多态性,也称静态多态性。

35.任何类中允许有三种访问权限的数据,这三种访问权限分别是公有继承(public)、私有继承(private)和保护继承(protected)。

36.C++中用于输出表达式值的标准输出流对象是cout。

第 4 页 共 17 页

37.设a为int变量,则执行语句a=10;a+=a-=a*a;后,a的值为-180。

38.在一个函数的定义或声明前加上关键字inline时,该函数就声明为内联函数。

39.将双目运算符重载为某类的成员函数时,该成员函数的左操作数为当前对象(或*this),右操作数为函数参数。

40.在C++语言中,二维数据元素在内存中的存储方式是 先行后列 。 41.抽象类只能作为基类使用,而不能声明它的对象。 42.设已定义int a=1,b=12;,则表达式(!a||b--)的值是1(或true)。 43.静态成员函数没有this指针。

44.类有两个特殊的成员函数,即构造函数和析构函数。 45.运算符op重载时,其函数名是由operator op构成。

46.声明纯虚函数的一般形式是virtual 函数类型 函数名(参数表列)=0; 四、读程序写结果

1.#include using namespace std; class Book

{ int num,price; public:

Book(int a=0,int b=0){num=a;price=b;} void showMoney(){cout<

int main()

{ Book b[]={Book(3,5),Book(4,6),Book(7,9)};

Book *p;int i; p=&b[2];

for(i=0;i<3;i++,p--)

p->showMoney();

system(\; return 0;}

2.#include using namespace std; int f(int); int main() {int i;

for(i=0;i<5;i++)

cout<

system(\; return 0;} int f(int i)

{static int k=1;

for(;i>0;i--) k +=i; return k;}

3. #include using namespace std; class sample {public:

sample(){cout<<\;} ~sample(){cout<<\;} };

void fn(int i)

{static sample c;

第 5 页 共 17 页

system(\; return 0; }

21. #include using namespace std; class A {public:

A(int i=0){m=i;cout<<\;} void set(int i) {m=i;}

void print() const {cout<

A(const A &s){m=s.m;cout<<\;} ~A(){cout<<\;} private:

int m;

};

int main()

{const int N=5; A my; my=N;

my.print(); return 0;}

五、程序填空

1.下面程序的功能是定义类sample,并输出其数据成员,请填空: #include using namespace std; class sample { int m;

static int n;

public:

sample(int i){n++;m=i;} int disp() {return m;} };

int sample::n=5; int main()

{ sample s1(3),s2(4);

cout<

2.斐波那契数列的第1项和第2项都是1。下面的程序用来输出斐波那契数列1,1,2,3,5,8,13,21,...第7项的值,请选择正确答案填入程序空白处。

1,i??2?f(i)?斐波那契数列的构成规律: ?f(i?1)?f(i?2),i?2?#include

using namespace std; long fib(int g)

{switch(g)

第 11 页 共 17 页

{case 0: return 0; case 1:

case 2: return 1; }

return (fib(g-1)+fib(g-2)); }

main()

{long int k; k=fib(7);

cout<<\;}

3.下面程序的功能是重载“--”(自减1)运算符,使对象s的数据成员n值减1。 #include class sample {int n;

public: sample(int m) {n=m;}

sample(){n=0;}

sample operator--(int) {sample s;n--; return s; }

void disp(){cout<<\;} };

void main() {

sample s(10); (s--).disp(); s.disp(); }

4.下面的程序的功能是输出300~500之间所有素数。本程序中利用自定义函数prime()判断一个整数是否为素数(如果整数x不能被2~x之间的任意一个数所整除,则x是素数)。要求每行输出11个素数。 #include using namespace std; bool prime(int m); int main()

{int k, s=0;

for(k=301;k<500;k+=2) if (prime(k))

{cout<

if(s==0) cout<

cout<

for(i=2;m%i!=0;i++); return(m==i);}

5.该程序的功能为模拟秒表,每次走一秒,满60秒进一分钟,此时秒数又从0开始算。程序中定义了一个类Time,包含数据成员minute(分)和sec(秒)。要求输出分和秒的值

第 12 页 共 17 页

#include using namespace std; class Time {public:

Time(){minute=0; sec=0;}

Time(int m,int s){ minute=m;sec=s;} Time operator++(int);

void display(){cout<

int minute,sec; };

Time Time::operator++(int); {Time temp=*this; if(++sec>=60)

{ sec%=60;minute++;} return temp;} int main()

{Time t1(23,59),t2;

cout<<\;t1.display(); t2=t1++;

cout<<\;t2.display(); cout<<\;t1.display(); system(\; return 0; }

六、编程题

1.定义一个订书单中使用的图书信息类Book,每个Book类对象代表的是订书单中的一种图书,包含内容如下:

(1)数据成员BookID(字符串),表示图书编号;数据成员Quantity(int型),表示订购的图书数量;数据成员Price(float型),表示图书单价。

(2)构造函数,功能是使用参数为数据成员赋值;

(3)成员函数Total,功能是计算一个图书对象的应付金额;

(4)成员函数BookInfo,功能是在一行上显示一个图书对象的图书编号、订书数量和单价。 (5)定义一个普通函数Sum,该函数的功能是计算一张订书单上所有图书的总金额。 (6)定义main()函数,主要功能是:

①定义一个Book类的对象数组,用于存放一张订书单的信息; ②从键盘输入订书单上每种图书的信息;

③调用Sum()函数,计算订书单上所订图书的总金额; ④按如下格式显示一张订书单上的订书信息和总金额

#include #include using namespace std; class Book {public:

Book(string bid,int qu,float pr);

第 13 页 共 17 页

float total(){return quantity*price;} void BookInfo(); private:

string BookID; int quantity; float price; };

Book::Book(string bid,int qu,float pr) {BookID=bid;quantity=qu;price=pr;} void Book::BookInfo()

{cout<

for(int i=0;i

int main()

{Book b[3]={Book(\,20,15.4),Book(\,35,21.7),Book(\,78,42.1)}; cout<<\订书单====================\;

cout<

cout<<\; cout<<\总额=\,3)<

system(\; return 0; }

2.设计一个长方体类box,其数据成员包括length(长)、width(宽)、height(高)。要求用成员函数实现以下功能:

(1)由键盘输入长方体的长、宽、高; (2)计算并输出长方体的体积; (3)计算并输出长方体的表面积 #include using namespace std; class box {public:

box(){cout<<\;cin>>length; cout<<\;cin>>width; cout<<\;cin>>height;}

void getarea() {

cout<<\<

void getvolume(){cout<<\;} private:

double length,width,height; };

3.设计一个复数类complex,其数据成员包括real(实部)、image(虚部)。

第 14 页 共 17 页

要求:

(1)用成员函数实现以下功能:

? 定义默认函数,复数的实部与虚部初始化为0;

? 定义带参构造函数,复数的实部与虚部用函数的参数初始化; ? 重载运算符“+”,用于实现两个复数的相加运算。 (2)重载流插入运算符,用于输出复数,,输出形式为a+bi(a、b分别为实部和虚部,当b为负数时输出a-bi)。 #include using namespace std; class complex {public:

complex(){real=0;image=0;}

complex(int r,int i){real=r;image=i;} complex operator+(complex & c);

friend ostream &operator<<(ostream &output,complex &c); private:

int real,image; };

complex complex::operator+(complex &c)

{return complex(real+c.real,image+c.image);} ostream &operator<<(ostream &output,complex &c) {if(c.real!=0)

output<

{ if(c.real==0) output<<0<0) { if(c.image==1) if(c.real!=0)

output<<\; else

output<<\; else

output<<\;} else

{ if(c.image==-1)

output<<\; else

output<

int main() {complex c[]={complex(0,0),complex(0,1),complex(0,-1),complex(1,0),complex(-1,0),complex(1,1),complex(-1,-1),complex(1,-1),complex(-1,1)}; for(int i=0;i<9;i++) cout<

system(\; return 0; }

4.编写一个程序计算正方体(cube)和圆柱体(cylinder)的体积。 要求:

(1)定义一个抽象类shape,在其中定义求体积的纯虚函数volume()。

第 15 页 共 17 页

(2)抽象类中定义受保护的数据成员radius,可作为正方体的边长或圆柱体的底面圆的半径。 (3)由抽象类派生出要描述的2个类cube和cylinder,在这2个类中要将求体积的函数实现。 (4)设计一个main()函数,定义一个圆柱体类的对象,并输出圆柱体的体积。 #include #define PI 3.1415926 using namespace std; class shape {

public:

shape(double r) {radius=r;} virtual double volume()=0; protected:

double radius;

};

class cube:public shape {

public:

cube(double r):shape(r){}

double volume(){return radius*radius*radius;}

};

class cylinder:public shape {

public:

cylinder(double r,double h):shape(r){height=h;} double volume(){return PI*radius*radius*height;} private:

double height;

};

int main() {

cylinder c(5,5); shape *p=&c;

cout<<\; return 0; }

5.编写一个程序实现对n个整数按照从大到小的顺序应用选择法排序。 #include #include #define N 10

using namespace std;

void select_sort(int a[],int n) {int t,i,j,k;

for(i=0;i

for(j=i+1;ja[k])k=j; if(k!=i)

{t=a[i];a[i]=a[k];a[k]=t;} } }

int main()

第 16 页 共 17 页

{ int x[N],i;

for(i=0;i>x[i];

select_sort(x,N);

cout<<\; for(i=0;i

cout<

6.编写一个程序实现对n个整数按照从小到大的顺序应用冒泡法排序。 #include #include #define N 10

using namespace std;

void bubble_sort(int a[],int n) {int t,i,j;

for(i=0;i

for(j=0;j

if(a[j]>a[j+1])

{t=a[j];a[j]=a[j+1];a[j+1]=t;}

}

int main()

{ int x[N],i;

for(i=0;i>x[i];

bubble_sort(x,N);

cout<<\; for(i=0;i

cout<

第 17 页 共 17 页

本文来源:https://www.bwwdw.com/article/2v53.html

Top