c复习题汇总适合于电子阅读.docx

上传人:b****6 文档编号:8031154 上传时间:2023-01-28 格式:DOCX 页数:64 大小:38.38KB
下载 相关 举报
c复习题汇总适合于电子阅读.docx_第1页
第1页 / 共64页
c复习题汇总适合于电子阅读.docx_第2页
第2页 / 共64页
c复习题汇总适合于电子阅读.docx_第3页
第3页 / 共64页
c复习题汇总适合于电子阅读.docx_第4页
第4页 / 共64页
c复习题汇总适合于电子阅读.docx_第5页
第5页 / 共64页
点击查看更多>>
下载资源
资源描述

c复习题汇总适合于电子阅读.docx

《c复习题汇总适合于电子阅读.docx》由会员分享,可在线阅读,更多相关《c复习题汇总适合于电子阅读.docx(64页珍藏版)》请在冰豆网上搜索。

c复习题汇总适合于电子阅读.docx

c复习题汇总适合于电子阅读

面向对象程序设计课程复习题

一、选择题,从供选择的答案中选出正确的答案(每小题2分,共计20分)

1、由C++源程序文件编译而成的目标文件的缺省扩展名为(C)。

A.cppB.exe

C.objD.lik

2、设x和y均为bool量,则x&&y为真的条件是(A)。

A.它们均为真B.其中一个为真

C.它们均为假D.其中一个为假

3、下列的常量名中,(C)是非法的。

A.YEAR2002B.welcome_home

C.zhang@mailD._SIZE¬_2MB

4、在内存中所存储的含L个字符的一个字符串常量是(B)。

A.一串相应的ASCII码值,占用L个字节

B.一串相应的ASCII码值,占用L+1个字节

C.一组相应的正整数,占用L个字节

D.一组相应的整数,占用2L个字节

5、AB为一个类,则执行“ABa,b(3),*p;”语句时共调用该类构造函数的次数为(A)。

A.2B.3C.4D.5

6、返回类型就是函数返回结果值的数据类型。

返回类型可以是(C)。

A.除数组和类以外的任意数据类型

B.除数组和结构类型以外的任意数据类型

C.除数组类型以外的任意数据类型

D.除指针和引用类型以外的任意数据类型

7、重载函数是(A)。

A.以函数参数来区分,而不用函数的返回值来区分不同的函数

B.以函数的返回值来区分,而不用函数参数来区分不同的函数

C.参数表完全相同而返回值类型不同的两个或多个同名函数

D.参数表和返回值类型都必须是不同的两个或多个同名函数

8、当保护继承时,基类的(B)在派生类中成为保护成员,不能通过派生类的对象来直接访问该成员。

A.任何成员

B.公有成员和保护成员

C.保护成员和私有成员

D.公有成员和私有成员

9、引入内联函数的主要目的是(B)。

A.缩短程序代码,少占用内存空间

B.既可以保证程序的可读性,又能提高程序的运行效率

C.占用内存空间少,执行速度快

D.使程序的结构比较清晰

10、在下面的二维数组定义中,正确的是(C)。

A.inta[5][]B.inta[][5]

C.inta[][3]={{1,3,5},{2}}D.inta[](10)

c++基础知识

1、函数的参数和返回值类型可以是简单数据类型,也可以是指针、引用、数组和类。

(×)

2、C++程序总是从第一个定义的函数开始执行。

(×)

3、C++语言是在C语言基础上扩充了函数功能而得来的。

(×)

4、在VC6.0开发环境中,对导入的所有位图资源都可以进行修改。

(×)

5、在C++中,标识符Max和MAX是不一样的。

(√)

6、C++函数必须有返回值,否则不能使用函数。

(×)

7、采用inline定义内联函数时,在对于函数代码少、频繁调用的情况下特别有效。

(√)

8、引入内联函数的主要目的是缩短程序代码,让程序少占用内存空间。

(×)

9、在C++程序中,可以使用命名空间,也可不使用命名空间。

(√)

10、C++中,如果条件表达式值为-1,则表示逻辑为假。

(×)

11、ASCII码文件和二进制文件都可在记事本中直接打开。

(×)

12、在C++语言中,表达式:

“b++;”和“++b;”在任何地方的作用都是不一样的。

(×)

编程工具相关知识

1、在MFC编程中,通过Invalidate(TRUE)可以发出重绘视图的消息。

(√)

2、在MFC编程中,视图/文档类程序是通过OnDraw()函数进行进行输出的。

(√

3、使用MFC编程时,OnDraw函数是CView类的成员函数。

(√)

4、在文档/视图结构的程序中,输出是在OnDraw()函数中完成的。

(√)

5、在VC6.0开发环境中,可以同时开发几个工程。

(√)

6、VisualC++集成开发环境中,一个Workspace可以创建多个Project。

(√)

7程序的编译是以文件为单位的,因此将程序分到多个文件中可以减少每次对程序修改所带来的编译工作量。

(√)

8、在C语言中,不使用命名空间,但在C++程序中,一定要使用命名空间。

(×)

字符串、数组、指针及位置

1、字符串”hello,world”在内存中存放时,占用11个字节的空间(X)

2、当函数的返回值是数组类型的,传递的是数组第一个元素的位置。

(√)

3、每个对象也有位置,该位置就是存储此对象数据成员的单元的首位置。

(√)

4、在C+语言中,指针的概念与C语言是一样的,都是指变量的位置。

(√)

5、在内存中,一个字符常量或变量是以ASCII码值存储的,它可直接作为整数值参加运算。

(√)

6、char*constp表明p是一个指针,它只能指向一个字符串常量。

(×)

7、在定义二维数组时,语句“inta[][4]={{1,2,3},{4}};”是不正确的。

(×)

8、设Time是一个类,现有指针p的定义语句:

constTime*p;则通过指针p不可以修改Time类对象的公有数据成员。

(√)

9、在定义二维数组时,语句:

inta[5][];是错误的。

(√)

静态及动态成员函数

1、类中的静态成员数据为该类的所有对象所共享,并且,在该类对象被撤销时,静态成员并没有撤销。

(√)

2、如果在一个类的对象之间要进行数据交换,可以使用该类的静态数据成员来完成。

(√)

类函数

1、在C++中,也可使用struct来声明类,但在该类中不能声明成员函数。

(×)

2、在c++语言中,也可以使用struct(结构体)来定义一个类。

(√)

3、语句“typedefstruct_MYSTRUC{intx;inty;doublez;}MYSTRUC;”是非法语句。

(×)

4、在C++语言中,使用struct(结构体)定义的类与使用class定义的类是一样的。

(×)

5、在声明一个类时,必须同时声明类的数据成员和成员函数。

(×)

6、设函数fun()是一个不属于任何类的普通函数,则在调用该函数时只能用fun()方式,而不能用:

:

fun()方式来调用。

(×)

7、如果一个类的所有对象都共享某一个变量,则应当将该变量定义为该类的私有成员。

(×)

派生类

1、派生类的成员函数可以直接访问基类的所有成员。

(×)

2、如果派生类的继承方式是protected的,则在main()函数中,可以通过派生类对象来访问基类的公有的成员。

(×)

3、如果派生类的成员函数的原型与基类中被定义为虚函数的成员函数原型相同,那么,这个函数自动继承基类中虚函数的特性。

(√)

函数重载

1、函数重载既要求两函数参数对应的类型不同又要求参数个数不同。

(X)

2、函数重载时,它们的参数个数和类型要求都不能相同。

(×)

3、在C++中,可以通过ofstream类对象来建立一个输出文件流。

(√)

4、在C++中,文件的输入输出可以通过iostream类对象来完成。

(×)

5、cout属于标准输出流,而cerr和clog则不属于标准输出流。

(×)

类的友元函数

1、类的友员函数是指可以访问本类私有成员的其它类的成员函数。

(×)

2、能访问一个类CMyClass中的private成员的可以是类CMyClass的成员函数,友元函数和友元类中的函数。

(√)

构造函数和析构函数

1、构造函数和析构函数均不能被说明为虚函数。

(×)

2、构造函数和析构函数均都可以被说明为虚函数,只是构造函数和析构函数的功能不同而已。

(×)

3、类的构造函数和析构函数一般都声明为虚函数。

(×)

4、析构函数的作用是当对象不用时,删除对象。

(×)

5、构造函数不具备的特征是构造函数需指定类型说明。

(√)

6、对对象成员的构造函数的调用顺序,取决于这些对象成员在成员初始化列表中的顺序。

(×)

二、简答题

1、面向过程的程序设计和面向对象的程序设计的主要区别是什么?

答:

主要区别:

面向过程的程序设计:

以功能为中心,采用函数来描述,函数和操作的数据是分离的。

程序的实现通过函数的顺序执行来实现。

面向对象的程序设计:

它吸取了面向过程的程序设计的优点,同时又考虑了现实世界和计算机处理的关系,它的整个程序由一系列相互作用的对象构成,对象之间的交互通过发送消息来实现,对象通过响应消息来实现程序的功能。

2、在VC++6.0中,语句CWnd:

:

Invalidate();和语句CWnd:

:

UpdateData(TRUE);的功能分别是什么?

答:

CWnd:

:

Invalidate();的功能是:

发送重绘视图的消息,即执行重绘视图的OnDraw()函数。

CWnd:

:

UpdateData(TRUE);的功能是:

说明对话框中控件的数据有效,这些数据放入对应控件的变量中。

3、什么是面向对象的程序设计?

答:

面向对象的程序设计:

它的整个程序由一系列相互作用的对象构成,对象之间的交互通过发送消息来实现,对象通过响应消息来实现程序的功能。

它有四个基本的特征,即抽象、封装、继承和多态性。

4、简要说明面向对象的程序设计的四个主要特征。

(评分标准:

两个知识点各4分,后一个知识点每小点2分)

答:

主要特征:

1)、抽象,即忽略当前主题中与目标无关的那些方面,把它的主要特征抽取出来。

抽象包括数据抽象和代码抽象。

2)、封装,它是将抽象得到的数据成员和代码相结合,形成一个有机的整体。

并且,封装可以隐藏内部的细节。

3)、继承,它提供了代码重用的一种方式,派生类可以重用基类的属性和行为。

4)、多态性,它是指不同类的对象对同一消息作出不同反应,即c++的代码可以根据运行情况的不同而执行不同的操作。

5、什么是类?

什么是对象?

什么是封装?

什么是多态性?

答:

类:

是指具有相同的属性和操作方法,并遵守相同规则的对象的集合。

对象:

是包含现实世界物体特征的抽象实体,每个对象有内部的属性和操作方法。

封装:

是指将抽象得到的数据成员和代码相结合,形成一个有机的整体,并且将它们的细节隐藏起来的一种方法。

多态性:

是指允许不同类的对象对同一消息作出响应,即实现“一个接口,多种方法”或者说是向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法)。

C++中,多态性是通过指针和虚函数来实现的。

6、类和结构有什么异同?

(评分标准:

两个知识点各4分)

答:

结构是类的一种特例,在结构体中也可以定义成员函数、构造函数和析构函数,成员也可使用private、protected、public。

结构和类的区别是:

在缺省情况下,结构中的所有成员都是公有的,而在类中是私有的

7、在VC++6.0中,模态对话框和非模态对话框的主要区别是什么?

答:

主要区别:

模态对话框使用DoModal()来启动,它垄断了消息循环,它只有在关闭后,才能返回应用程序。

非模态对话框使用Create()函数来产生,用DestroyWindow()函数来关闭。

它与应用程序共用一个消息循环,它产生后,应用程序一样可以接收消息循环。

8、什么是简单继承?

什么是多重继承?

在软件开发过程中,继承有什么好处?

答:

简单继承:

派生类的基类只有一个的继承方法。

(3分)

  多重继承:

派生类的基类同时有多个时的继承方法。

(3分)

继承的好处:

由于可以利用已有的软件基础来进行新的软件开发,所以能提高软件开发效率和软件质量。

(2分)

9、什么是函数重载?

函数重载的主要作用是什么?

调用不同的重载函数是在编译时决定还是在运行时决定?

函数重载时参数个数不同时,能否有缺省参数,为什么?

答:

函数重载:

C++允许用同一函数名定义多个函数,这些函数的参数个数和参数类型不同。

函数重载主要作用是:

用同一个函数名可以去调用不同参数或功能的函数,即用同一个函数实现不同的操作。

调用不同的重载函数是在编译时决定的。

函数重载时参数个数不同时,不能有缺省参数。

因为:

有缺省参数时,就会发生二义性,编译出错。

10、什么是友元函数?

友元函数的作用是什么?

(评分标准:

前两个知识点各4分)

答:

在一个类中,用friend声明的非本类函数就是友元函数。

友元函数的作用:

可以直接访问本类的私有成员,提高编程的灵活性和程序执行效率。

11、c++中,什么是函数重载?

什么是运算符重载?

什么是构造函数?

什么是析构函数?

答:

(评分标准:

每小题2分,不完全正确,适当扣分,等价写法给满分)

函数重载:

函数的名称相同,参数的个数或类型不同的函数。

运算符重载:

对运算符赋予新的含义,使之一名多用(主要是指运算对象包含类对象)。

构造函数:

构造函数的名字必须与类名同名,它不具有任何类型,不返回任何值,主要用于对象初始化。

析构函数:

函数名与类名相同,只是在前边加“~”符号,它不具有任何类型,不返回任何值,主要用于对象撤销后的清理工作。

12、构造函数和析构函数的作用是什么?

什么时候需要自己定义构造函数和析构函数?

(评分标准:

前两个知识点各2分,后一个知识点4分)

答:

构造函数的作用:

用于新建对象的初始化工作。

(2分)

析构函数的作用:

用于在撤销对象前,完成一些清理工作,比如:

释放内存等。

(2分)

每当创建对象时,需要添加初始化代码时,则需要定义自己的构造函数;而对象撤销时,需要自己添加清理工作的代码时,则需要定义自己的析构函数。

(4分)

三、填空题(8分)

链表相关题目

1、假定有定义为“structNODE{intdata;NODE*next;};”,下面算法根据table数组中的n个元素建立一个表头指针为L的链表,链表中结点值的顺序与数组元素值的顺序相同。

voidf5(NODE*&L,inttable[],intn)

{

if(n<=0){L=NULL;return;}

L=newNODE;//生成附加的头结点

inti=0;

NODE*p=L;

while(

(1)){

p=p->next=

(2);

p->data=(3);

i++;

}

p->next=NULL;//把最后一个结点的指针域置空

p=L;

L=L->next;//使L指向链表的第一个带值的结点

Deletep;

}

参考答案:

(1)i

(2)newNODE

(3)table[i]

2、下面程序中的Create函数根据table数组中的前n个元素建立一个表头指针为Head的链表,链表中结点值的顺序与数组元素值的顺序相同。

填充程序中不完整的部分,使程序完整正确。

#include

#include

structNODE{intdata;NODE*next;};

voidCreate(NODE*&Head,inttable[],intn)

{

inti;

NODE*p;

if(n<=0){___

(1)___;return;}//没有元素时,链表指向空。

Head=newNODE;//生成第一个结点

Head->data=___

(2)___;

i=1;

p=Head;

while(i

{

p=___(3)___=newNODE;

p->data=table[i];

___(4)___;

}

___(5)___;//把最后一个结点的指针域置空

return;

}

voidmain()

{

inta[10]={1,2,3,4,5};

NODE*H;

Create(H,a,5);

}

参考答案:

(1)Head=NULL

(2)table[0]

(3)p->next

(4)i++

(5)p->next=NULL

3、下面的函数是判断由pHead所指向的链表是否是循环链表,如果是循环链表,则函数返回1,否则返回0。

链表的结构为:

structMyLink{

intdata;

MyLink*Next;

};

补充程序中不完整的地方。

intCheckLink(MyLink*pHead)

{MyLink*p;

if(pHead==NULL)return0;

p=____

(1)____;

while(p!

=NULL)

{if(p==pHead)____

(2)____;

elsep=____(3)____;

}

return0;

}

参考答案:

(1)pHead->Next

(2)return1

(3)p->Next

递归函数题

1、根据程序说明和程序中的注释,填充程序中不完整的部分。

类Number的成员函数Factorial是递归函数,功能是求n!

(即n的阶乘,假设n>0)。

#include

usingnamespacestd;

classNumber

{

private:

intNum;

public:

intn;

intFactorial(intn)//递归函数Factorial(n)求n!

{

if(___

(1)___)return1;

elsereturn___

(2)___;

}

intGetNum()

{

returnNum;

}

Number(intn=1){if(n<=0)Num=1;elseNum=n;}

};

voidmain()

{

Number*p1,*p2;

p1=___(3)___;//动态生成由p1指向的Number对象,使用缺省参数。

P2=___(4)___;//动态生成由p2指向的Number对象,并使Num为7。

cout<Factorial(___(5)___);//输出Num!

deletep1;

deletep2;

}

参考答案:

(1)n==0

(2)n*Factorial(n-1)

(3)newNumber

(4)newNumber(7)

(5)p2->GetNum()

2、下面递归函数NTimes(n,m)求nm。

填充程序中不完整的部分(假设m>=0,否则返回值为0)。

intNTimes(intn,intm)//递归函数NTimes(n,m)求nm。

{if(m<0)return0;

if(m==0)

(1);

elsereturn

(2);

}

参考答案:

(1)return1

(2)n*Ntimes(n,m-1)

3、根据程序说明和程序中的注释,填充程序中不完整的部分。

类Number的成员函数TwoTimes是递归函数,功能是求2n(假设n<0时返回值为0)。

#include

usingnamespacestd;

classNumber

{

private:

intNum;

public:

intn;

intTwoTimes(intn)//递归函数TwoTimes(n)求2n。

{

if(___

(1)___)return0;

if(n==0)___

(2)___;

elsereturn___(3)___;

}

intGetNum()

{

returnNum;

}

Number(intn=0){Num=n;}

};

voidmain()

{

Number*p;

p=___(4)___;//动态生成由p指向的Number对象,并使Num为5。

cout<TwoTimes(___(5)___);//输出2Num

deletep;

}

参考答案:

(1)n<0

(2)return1

(3)2*TwoTimes(n-1)

(4)newNumber(5)

(5)p->GetNum()

构造函数类

1、请按提示要求完成以下程序段的填空

#include

classstudent

{

public:

stringname;//姓名

floatscore;//成绩

staticfloattotal;//学生的总成绩

student(stringn=”li”,floats=60.0)

{name=n;score=s;}//定义类的构造函数

}

(3);//在类外初始化静态成员total的初值为0。

voidmain()

{student*p1,*p2;

(4);//调用无参构造函数生成由p1指向的动态对象

(5);//调用带参构造函数生成由p2指向的动态对象,

//姓名为“zhang”,成绩为90。

p1->total=p1->score+p2->score;

if(p1!

=NULL)deletep1;

if(p2!

=NULL)deletep2;

return;

}

参考答案:

(3)student:

:

total=0.0

(4)p1=newstudent()

(5)p2=newstudent(“zhang”,90)

2、根据程序说明和程序中的注释,填充程序中不完整的部分。

MyString是自定义的一个字符串类,其成员函数IsPalindrome判断该字符串对象是否是回文(即字符串顺读和倒读是一致的,比如字符串“12321”和“abba”都是回文,而“12345”则不是回文)。

构造函数用于给字符串赋值。

#include

usingnamespacestd;

#defineMaxLen100

classMyString

{private:

intLen;//字符串的长度

charValue[MaxLen];//字符串的值

public:

intIsPalindrome()//判断Value是否是回文,是则返回1,不是返回0。

{inti=0;

while(i

{

if(Value[i]!

=___

(1)___)return0;

___

(2)___;

}

____(3)___;

}

MyString(intn,char*pstr)//把pstr所指向的字符串赋值给Value

{inti;

if(n>MaxLen)Len=MaxLen;elseLen=n;

if(Len<=0)

{Len=0;

Value[0]='\0';

}

else

{i=0;

while(i

}

}

};

intmain()

{MyStrings1(3,"aba"),*p;

p=___(5)___;

//动态生成由p指向的MyString对象,并使Len为5,其他参数任意。

cout<IsPalindro

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1