1、一、 单项选择题(本大题共10小题, 每小题2分, 共20分)在每小题列出的四个备选项中只有一个是符合题目要求的, 请将其代码填写在题后的括号内。错选、 多选或未选均无分。1.一个函数功能不太复杂, 但要求被频繁调用, 选用( ) A. 内联函数B重载函数C递归函数D嵌套函数2.C+的继承性允许派生类继承基类的( ) A. 部分特性, 并允许增加新的特性或重定义基类的特性B部分特性, 但不允许增加新的特性或重定义基类的特性C所有特性, 并允许增加新的特性或重定义基类的特性D所有特性, 但不允许增加新的特性或重定义基类的特性3在C+中, 封装是借助什么达到的? ( ) A结构B类C数组D函数4.
2、建立包含有类对象成员的派生类对象时, 自动调用构造函数的执行顺序依次为( ) A. 自己所属类、 对象成员所属类、 基类的构造函数B对象成员所属类、 基类、 自己所属类的构造函数C基类、 对象成员所属类、 自己所属类的构造函数D基类、 自己所属类、 对象成员所属类的构造函数5.类的析构函数是对一个对象进行以下哪种操作时自动调用的? ( ) A.建立B撤消C赋值D引用6.下列不是描述类的成员函数的是( ) A.构造函数B析构函数C友元函数D拷贝构造函数7.所有在函数中定义的变量, 连同形式参数, 都属于( ) A. 全局变量B局部变量C静态变量D寄存器变量8.假定AB为一个类, 则执行AB x;
3、 语句时将自动调用该类的( ) A.有参构造函数B无参构造函数C拷贝构造函数D赋值构造函数9.假定AA为一个类, a()为该类公有的函数成员, x为该类的一个对象, 则访问x对象中函数成员a()的格式为( ) A.x.aBx.a()Cx-aDx-a()10.对于任一个类, 用户所能定义的构造函数的个数至多为( ) A.0B1C2D任意个二、 填空题(本大题共10小题, 每小题2分, 共20分)请在每小题的空格中填上正确答案。错填、 不填均无分。11对象的四大基本特性是多态性、 继承性、 _和封装性。12为了使类中的成员不能被类外的函数经过成员操作符访问, 则应把该成员的访问权限定义为_。13C
4、+程序的源文件扩展名为_。14所有模版都是以_关键字和一个形参表开头的。15在#include命令中所包含的头文件, 能够是系统定义的头文件, 也能够是_定义的头文件。16一个const对象只能访问_成员函数。17C+是经过引用运算符_来定义一个引用的。18若y是x的引用, 则对y的操作就是对_的操作。19执行_操作将释放由p所指向的动态分配的数据空间。20C+的流库预定义了4个流, 它们是cin、 cout、 _和clog。三、 改错题(本大题共2小题, 每小题6分, 共12分)21.假定下面程序将分数a和b相加, 其和赋值给c并输出, 要求输出结果为”13/18”,其主函数5到8行之间存在
5、着三行语句错误, 请指出错误行的行号并改正。#includeclass Franction/定义分数类int nume;/定义分子int deno;/定义分母public:/把*this化简为最简分数, 具体定义在另外文件中实现void FranSimp();/返回两个分数*this和x之和, 具体定义在另外文件中实现Franction FranAdd(const Franction& x);/置分数的分子和分母分别0和1void InitFranction() nume=0; deno=1;/置分数的分子和分母分别n和dvoid InitFranction(int n,int d) nume
6、=n; deno=d;/输出一个分数void FranOutput() coutnume/denoendl;void main()/1行/2行Franction a,b,c;/3行a.InitFranction(7,18);/4行b.InitFranction(1);/5行c.InitFranction();/6行c=FranAdd(a,b);/7行coutc.nume/c.denoendl;/8行/9行错误行的行号为_、 _和_。分别改正为_、 _和_。22下面是一个类的定义, 在5到12行之间有3行存在语法错误, 请指出错误行的行号并改正。class CE /1行private:/2行in
7、t a,b;/3行int getmin() return (ab?a:b);/4行public/5行int c;/6行void SetValue(int x1,int x2,int x3) /7行a=x1;b=x2;c=x3;/8行;/9行int GetMin();/10行;/11行int GetMin()/12行int d=getmin();/13行return(dc? d:c);/14行/15行错误行的行号为_、 _和_。分别改正为_、 _和_。四、 程序填空题( 本大题共3小题, 每小题6分, 共18分) 请按提示要求完成以下程序段的填空。23class A int a,b;public
8、:_(1)_ /定义构造函数, 使参数aa和bb的默认值为0, /在函数体中用aa初始化a, 用bb初始化b;main()A *p1,*p2;_(2)_; /调用无参构造函数生成由p1指向的动态对象_(3)_; /调用带参构造函数生成由p2指向的动态对象, /使a和b成员分别被初始化为4和5(1) (2) (3)24.一种类定义如下:#include#includeclass Booksprivate:char bk_name20;/书的名称int price;/书的价格static int totalprice;/同类书总价格public:Books(char*str,int p)/构造函数
9、strcpy(bk_name,str); /strcpy函数将str字符串的内容拷贝到bk_nameprice=p;totalprice+=price;Books()totalprice-=price;char*GetN()_(4)_;/返回书名称int GetP()return price;_(5)_GetTotal_Price()/定义静态成员函数_(6)_;/返回总价格;(4) (5) (6)25.已知一个类的定义如下: #includeclass AA int a10;int n;public:void SetA(int aa,int nn);/用数组aa初始化数据成员a, /用nn初
10、始化数据成员nint MaxA(); /从数组a中前n个元素中查找最大值void SortA(); /采用选择排序的方法对数组a中前n个元素/进行从小到大排序void InsertA(); /采用插入排序的方法对数组a中前n个元素进行从小到大排序void PrintA(); /依次输出数组a中的前n个元素;voidAA:SortA()int i,j;for(i=0; _(7)_;i+)int x=ai,k=i;for(j=i+1; jn;j+)if(ajx)x=aj;k=_(8)_;ak=ai;ai=_(9)_;(7) (8) (9)五、 程序分析题( 本大题共6小题, 每小题5分, 共30分
11、) 阅读以下程序, 写出其运行结果。26#includeconst int N=6;void fun();void main()for(int i=1;iN;i+)fun();void fun()static int a=2;cout(a+=3) ;27#include#includeclass funfriend ostream& operator(ostream&,fun);ff;ostream& operator(ostream& os,fun f)os.setf(ios:left);return os;void main()coutsetfill(*)setw(10)12345endl
12、;coutffsetw(10)54321endl;28#includeclass apublic:virtual void func()coutfunc in class aendl;class bpublic:virtual void func()coutfunc in class bendl;class c:public a,public bpublic:void func()coutfunc in class cendl;void main()c c;a &pa=c;b &pb=c;pa.func();pb.func();29#includeclass testapublic:testa
13、()a1=0;testa(int i)a1=i;void printout()couta1;private:int a1;class testb:public testapublic:testb()b1=0;testb(int i,int j,int k);void printout();private:int b1;testa aa;testb:testb(int i,int j,int k):testa(i),aa(j)b1=k;void testb:printout()testa:printout();coutendl;void main()testb tt2;tt0=testb(9,3
14、,5);tt1=testb(8,4,7);for(int i=0;i2;i+)tti.printout();30.#includevoid main()for(int i=-1;i4;i+)cout(i ? 0:*);31#includeclass Dateint Year,Month,Day;public:void SetDate(int y,int m,int d)Year=y;Month=m;Day=d;void PrintDate()coutYear/Month/Dayendl;Date()SetDate( ,1,1);Date(int y,int m,int d)SetDate(y,
15、m,d);class Timeint Houre,Minutes,Seconds;public:void SetTime(int h,int m,int s)Houre=h;Minutes=m;Seconds=s;void PrintTime()coutHoure:Minutes:Secondsendl;Time()SetTime(0,0,0);Time(int h,int m,int s)SetTime(h,m,s);class Date_Time:public Date,public Timepublic:Date_Time():Date(),Time();Date_Time(int y,int mo,int d,int h,int mi,int s):Date(y,mo,d),Time(h,mi,s)void PrintDate_Time()PrintDate();PrintTime();void main()Date_Time dt_a,dt_b( ,10,1,6,0,0);dt_a.PrintDate_Time();dt_b.SetTime(23,59,59);dt_b.PrintDate_Time();dt_a.SetDate( ,12,31);dt_a.PrintDate_Time();