[高等教育]C++练习题摘自自学考试.doc_第1页
[高等教育]C++练习题摘自自学考试.doc_第2页
[高等教育]C++练习题摘自自学考试.doc_第3页
[高等教育]C++练习题摘自自学考试.doc_第4页
[高等教育]C++练习题摘自自学考试.doc_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘自:全国2008年10月高等教育自学考试C+程序设计试题C+程序设计练习题1一、单项选择题1对C+语言和C语言的兼容性,描述正确的是( )AC+兼容CBC+部分兼容CCC+不兼容CDC兼容C+2在C+中使用流进行输入输出,其中用于屏幕输出的对象是( )AcerrBcinCcoutDcfile3对使用关键字new所开辟的动态存储空间,释放时必须使用( )AfreeBcreateCdeleteDrealse4如没有使用成员访问权限关键字定义类的数据成员,则默认为( )AprivateBpublicCprotectedDfriend5使用值传递方式将实参传给形参,下列说法正确的是( )A形参是实参的备份B实参是形参的备份C形参和实参是同一对象D形参和实参无联系6在函数调用时,如某一默认参数要指明一个特定值,则有( )A其之前所有参数都必须赋值B其之后所有参数都必须赋值C其前、后所有参数都必须赋值D其前、后所有参数都不必赋值7设存在函数int max(int,int)返回两参数中较大值,若求22,59,70三者中最大值,下列表达式不正确的是( )Aint m = max(22,max(59,70);Bint m = max(max(22,59),70);Cint m = max(22,59,70);Dint m = max(59,max(22,70);8下列哪个类型函数不适合声明为内联函数( )A函数体语句较多B函数体语句较少C函数执行时间较短D函数执行时间过长9int Func(int,int);不可与下列哪个函数构成重载( )Aint Func(int,int,int);Bdouble Func(int,int);Cdouble Func(double,double);Ddouble Func(int,double);10对类中声明的变量,下列描述中正确的是( )A属于全局变量B只属于该类C属于该类,某些情况下也可被该类不同实例所共享D任何情况下都可被该类所有实例共享11类的私有成员可在何处访问( )A通过子类的对象访问B本类及子类的成员函数中C通过该类对象访问D本类的成员函数中12如果没有为一个类定义任何构造函数的情况下,下列描述正确的是( )A编译器总是自动创建一个不带参数的构造函数B这个类没有构造函数C这个类不需要构造函数D该类不能通过编译13一个类可包含析构函数的个数是( )A0个B1个C至少一个D0个或多个14this指针存在的目的是( )A保证基类公有成员在子类中可以被访问B保证每个对象拥有自己的数据成员,但共享处理这些数据成员的代码C保证基类保护成员在子类中可以被访问D保证基类私有成员在子类中可以被访问15下列关于类的权限的描述错误的是( )A类本身的成员函数只能访问自身的私有成员B类的对象只能访问该类的公有成员C普通函数不能直接访问类的公有成员,必须通过对象访问D一个类可以将另一个类的对象作为成员16在编译指令中,宏定义使用哪个指令( )A#includeB#defineC#ifD#else17设类A将其它类对象作为成员,则建立A类对象时,下列描述正确的是( )AA类构造函数先执行B成员构造函数先执行C两者并行执行D不能确定18下列描述错误的是( )A在创建对象前,静态成员不存在B静态成员是类的成员C静态成员函数不能是虚函数D静态成员函数不能直接访问非静态成员19对于友元描述正确的是( )A友元是本类的成员函数B友元不是本类的成员函数C友元不是函数D友元不能访问本类私有成员20在哪种派生方式中,派生类可以访问基类中的protected成员( )Apublic和privateBpublic和protectedCprotected和privateD仅protected二、填空题24定义虚函数所用的关键字是_virtual_。27类的继承是指子类继承基类的_成员变量_和成员函数。28不同对象可以调用相同名称的函数,但可导致完全不同的行为的现象称为_多态_。29_#include_指令指示编译器将一个源文件嵌入到带该指令的源文件之中。30设类A有成员函数 void Fun(void);若要定义一个指向类成员函数的指针变量pafn来指向Fun,该指针变量的声明语句是:_void (A:*pafn)(void);_。31设在程序中使用如下语句申请了一个对象数组:Point * ptr = new Point2;则在需要释放ptr指向的动态数组对象时,所使用的语句是_delete ptr;_。32在保护派生中,基类权限为Private的成员在派生类中_不可访问_。33类A有如下成员函数int A:fun(double x) return (int) x2;int A:fun(int x) return x*2;设a为类A的对象,在主函数中有int s=a.fun(6.0)+a.fun(2),则执行该语句后,s的值为_7_。34对象传送的消息一般由3部分组成:接收对象名、调用操作名和_参数_。35将指向对象的指针作为函数参数,形参是对象指针,实参是对象的_地址_。37在C+中,声明布尔类型变量所用的关键字是_bool_。40C+语言中可以实现输出一个换行符并刷新流功能的操控符是_endl_。三、改错题(下面的类定义中有一处错误,请用下横线标出错误所在行并给出修改意见)41#includevoid main( ) int x=5,y=6;const int * p=x;*p=y;/修改意见:去掉本句或去掉上句中的constcout*pendl;42#includeclass f private:int x,y;public:f1( ) x=0;y=0;print( ) coutx yendl; ;void main( ) f a;a.f1(1, 1);/修改意见: 本句改为a.f1();或修改成员函数f1的定义a.print( );44#include class pointprivate:float x; public:void f(float a) x=a; void f( ) x=0; friend float max(point& a,point& b); ; float max(point& a,point& b)return(a.xb.x)? a.x:b.x;void main( ) point a,b; a.f(2.2);b.f(3.3); couta.max(a, b);/修改为:coutmax(a, b); 四、完成程序题46完成下面类中的成员函数的定义。 class point private: int m,n; public: point(int,int); point(point&); ; point:point(int a,int b) m=a; _n_=b; point:point(_point & t_) m=t.m; n=t.n; 47下面是一个输入半径,输出其面积和周长的C+程序,在下划线处填上正确的语句。 #include using namespace std; _const double_pi=3.14159; void main( ) double r; cout r_ ; double l=2.0*pi*r;double s=pi*r*r;coutn The long is:lendl; coutThe area is:sendl; 48在下划线处填上缺少的部分。 #include using namespace std; class complex public: int real; int imag; complex(int r=0,int i=0) real=r; imag=i; ; complex operator+(_ complex& a_,complex& b) int r=a.real+b.real; int i=a.imag+b.imag; return_ complex (r, i)_; void main( ) complex x(1,2),y(3,4),z; z=x+y; coutz.real+z.imagiendl; 49程序的输出结果如下: 1,9 50,30 请根据输出数据在下面程序中的下划线处填写正确的语句。 源程序如下: #include using namespace std; class base private: int m; public: base( ) ; base(int a):m(a) int get( )return m; void set(int a)m=a; ; void main() base*ptr=new base2; ptr- set(30); ptr= _ ptr +1_; ptr- set(50); base a2=1,9; couta0.get( ),a1.get( )endl; coutget( ),; ptr=ptr-1; coutget( )_endl; delete ptr; 五、程序分析题51给出下面程序的输出结果。 #include template class Sample T n; public: Sample(T i) n=i; int operator = = (Sample &); ; template int Sample:operator = = (Samples) if(n=s.n) return 1; else return 0; void main( ) Sample sl(2),s2(3); couts1与s2的数据成员(sl=s2 ?相等:不相等)endl; Samples3(25),s4(25); couts3与s4的数据成员(s3=s4 ? 相等:不相等)endl; 52给出下面程序的输出结果。 #include using namespace std; template T max(T ml,T m2) return(m1m2)?ml:m2; void main( ) coutmax(1,7) tmax(2.0,5.0)endl; coutmax(y,b) tmax(A,a)endl; 53给出下面程序的输出结果 #include using namespace std; class A public: int x; A( ) A(int a)x=a; int get(int a)return x+a; ; void main( ) A a(8); int (A:*p)(int); p=A:get; cout(a.*p)(5)endl; A * pi=a; cout*P)(7)endl;54给出下面程序的输出结果。 include #include using namespace std; class Book char*title; char*author; int numsold; public: Book( ) Book(const char*str1,const char*str2,const int num) int len=strlen(str1); title=new charlen+1; strcpy(title,str1); len=strlen(str2); author=new charlen+1; strcpy(author,str2); numsold=num; void setbook(const char*str1,const char*str2,const int num) int len=strlen(str1); title=new charlen+1; strcpy(title,str1); len=strlen(str2); author=new charlen+1; strcpy(author,str2); numsold=num; Book( ) delete title; delete author; void print(ostream&output) output书名:titleendl; output作者:authorendl; output月销售量:numsoldendl; ; void main( ) Book obj1(数据结构,严蔚敏,200),obj2; obj1.print(cout); obj2.setbook(C+语言程序设计,李春葆,210); obj2.print(cout);六、程序设计题(本大题共1小题,共10分)55在三角形类TRI实现两个函数,功能是输入三个顶点坐标判断是否构成三角形 #include #include class point private:float x,y;public:point(float a,float b) x=a; y=b; point( )x=0;y=0; void set(float a,float b)x=a;y=b; float getx( )return x; float gety( )return y; ; class tri point x,y,z;float s1,s2,s3;public: settri();用于输入三个顶点坐标 test();用于判断是否构成三角形; 请写出两个函数的过程(如果需要形式参数,请给出形参类型和数量,以及返回值类型) - 本套试题共分10页,当前页是第10页-摘自:全国2008年1月高等教育自学考试面向对象程序设计试题C+程序设计练习题2一、单项选择题1.编写C+程序一般需经过的几个步骤依次是( )A. 编译、编辑、连接、调试B. 编辑、编译、连接、调试C. 编译、调试、编辑、连接D. 编辑、调试、编译、连接2.函数调用func(exp1,exp2),(exp3,exp4,exp5)中所含实参的个数为( )A.1 B.2 C.4 D.53.假定AB为一个类,则执行 “AB a(2), b3, *p4;”语句时共调用该类构造函数的次数为( )A. 3B. 4C. 5D. 94.假定AB为一个类,px为指向该类的一个含有n个对象的动态数组的指针,则执行“delete px;”语句时共调用该类析构函数的次数为( )A. 0 B. 1C. nD. n+15.如果表达式+a中的“+”是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为( )A. a.operator+(1)B. operator+(a)C. operator+(a,1) D. a.operator+()6. 继承机制的作用是( )A. 信息隐藏 B. 数据封装C. 定义新类D. 数据抽象7.以下哪个基类中的成员函数表示纯虚函数? ( )A. virtual void vf(int); B. void vf(int) = 0;C. virtual void vf()=0;D. virtual void yf(int) 8.假定一个类的构造函数为 “A(int aa, int bb) a=aa; b=aa*bb;”,则执行 “A x(4, 5);”语句后,x.a和x.b的值分别为( )A. 4和5 B. 5和4C. 4和20 D. 20和59.一个类的静态数据成员所表示属性( )A. 是类或对象的属性B. 只是对象的属性C. 只是类的属性D. 是类和友元的属性10.一个C+源程序文件的扩展名为( )A. .h B. .cC. .cppD. .cp二、填空题11.重载“”操作符时,应声明为 _普通_ 函数。12.在C+中,编译指令都是以_#_(符号)开始。14.C+支持两种多态性,编译时的多态性和_运行_时的多态性。15.假定用户为类AB定义了一个构造函数“AB(int aa=0):a(aa) ”,则定义该类的对象时,可以有_2_种不同的定义格式。16.若p指向x,则_*p_与x的表示是等价的。18.当函数参数表用_void_保留字表示时,则表示该参数表为空。19.每个对象都是所属类的一个_实例_。20.作为类的成员函数重载一个运算符时,参数表中只有一个参数,说明该运算符有_2_个操作数。三、改错题21.假定要求下面程序输出“d=800, f=60”,在第5-20行中存在着三条语句错误,请指出错误语句的行号并改正。#includeclass A /1行int a10; int n; /2行public: /3行A(int aa, int nn): n(nn) /4行 for(int i=0; in; i+) aai=ai; /5行 修改为:for(int i=0; in; i+) ai=aai; /6行int Get(int i) return ai; /7行int SumA(int n);/8行;/9行int A:SumA(int n) /10行int s=0;/11行for(int j=0; jn; j+) s+=aj; /12行return s; /13行 /14行void main() /15行 int a=2,5,8,10,15,20; /16行 A x(a, 6); /17行 int d=1;/18行 for(int i=0; i4; i+) d *= x.ai; /19行 修改为:for(int i=0; i4; i+) d *= x.Get(i); int f=SumA(6);/20行 修改为:int f=x.SumA(6); coutd=d,;/21行 coutf=fendl;/22行 /23行22.下面程序段第4到7行中存在着三条语句的语法错误,请指出错误语句的行号并改正。class A /1行 int a, b; /2行 const int c; /3行 public /4行 A():c(0);a(0);b(0) /5行 A():c(0), a(0), b(0) A(int aa, int bb) c(aa+bb); a=aa; b=bb;/6行 A(int aa, int bb): c(aa+bb) a=aa; b=bb; ; /7行 A a, b(1, 2);/8行 A *x=&a, &y=b; /9行 A *z=new A, w10; /10行A *z=new A;四、程序填空题(请按提示要求完成以下程序段的填空)23在下面一段类定义中, Derived类公有继承了基类Base。需要填充的函数由注释内容给出了功能。class Base private: int mem1, mem2; /基类的数据成员 public: Base(int m1, int m2) mem1=m1; mem2=m2; void output() coutmem1 mem2 ; /.;class Derived: public Base private: int mem3;/派生类本身的数据成员 public: /构造函数,由m1和m2分别初始化mem1和mem2,由m3初始化mem3 Derived(int m1,int m2, int m3); /输出mem1, mem2和mem3数据成员的值 void output() (1) ; coutmem3endl; /.;Derived:Derived(int m1,int m2, int m3): (2) (3) ;需要补充的语句为:(1)Base:output()(2)Base(m1, m2)(3)mem3 = m3;24class A int a, b; public: (4) /定义构造函数,使参数aa和bb的默认值为0, a=aa;b=bb;/在函数体中用aa初始化a,用bb初始化b ; main() A *p1, *p2; (5) ;/调用无参构造函数生成由p1指向的动态对象 (6) ;/调用带参构造函数生成由p2指向的动态对象, /使a和b成员分别被初始化为4和5需要补充的语句为:(4)A(int aa=0, int bb=0)(5)p1 = new A;()p2 = new A(4, 5);25.已知一个类的定义如下:(假设类的成员函数已实现)#includeclass AA int a10; int n;public: void SetA(int aa, int nn); /用数组aa初始化数据成员a, /用nn初始化数据成员n int MaxA(); /从数组a中前n个元素中查找最大值 void SortA(); /采用选择排序的方法对数组a中前n个元素 /进行从小到大排序 void InsertA(); /采用插入排序的方法对数组a中前n个元素进行从小到大排序 void PrintA(); /依次输出数组a中的前n个元素 /最后输出一个换行;使用该类的主函数如下:void main()int a10=23,78,46,55,62,76,90,25,38,42;AA x; (7) ;int m= (8) ; (9) ;coutmendl;该程序运行结果为:23 78 46 55 62 7678需要补充的语句为: (7)x.Seta(a, 6); (8)x.MaxA() (9) x.PrintA()五、程序分析题(阅读以下程序,写出其运行结果)26当从键盘上输入9.98时,写出下面程序的执行结果。#includevoid main() int a, b; char ch; cinachb;/ 从键盘上输入 9.98 coutaendlbendl;27#include class aa public: virtual int func () return 0; ; class test: public aa public: int func() return 58; ; void main() test d; aa& b = d; cout b.func() endl; cout b.aa:func() endl; 28#includeclass myclass public:int number;void set(int i);int number=8;void myclass:set (int i)number=i;void main()myclass my1;int number=20;my1.set(6);coutmy1.numberendl; my1.set(number);coutmy1.numberendl;my1.set(:number);coutmy1.numberendl;29#includeclass apublic: virtual void print()cout this is class a printing. endl; ;class b: public apublic: void print() ; ;class c: public b public: void print()cout this is class c printing. endl; ;void show(a &aa) aa.print(); void main()a a;b b;c c;show(a);show(b);show(c);30#include class Date int Year,Month,Day;public:Date(int y=2001,int m=1,int d=1)Year=y; Month=m; Day=d;void PrintDate() coutYear/Month/Dayendl;class Time int Houre, Minutes, Seconds;public:Time(int h=5,int m=30,int s=0)Houre=h; Minutes=m; Seconds=s;void PrintTime() coutHoure:Minutes:Secondsendl;class Date_Time: public Date, public Timepublic:Date _ Time();Date _ Time(int y,int mo,int d,int h=0,int mi=0,int s=0): Date(y,mo,d), Time(h,mi,s)void PrintDate_Time()PrintDate();PrintTime();void main()Date _ Time a, b(2002,10,1,6,20,0), c(2003,3,8,6,7);a.PrintDate _ Time();b.PrintDate _ Time();c.PrintDate _ Time();31. #includevoid f2(int& x, int& y)int z=x; x=y; y=z;void main()int x=10,y=26;coutx,y=x, yendl;f2(x,y);coutx,y=x, yendl;x+; y-;f2(y,x);coutx,y=x, yendl; - 本套试题共分6页,当前页是第6页-2007年10月自考面向对象程序设计试题C+程序设计练习题3一、单项选择题1.以下说法中正确的是( )A.C+程序总是从第一个定义的函数开始执行B.C+程序总是从main函数开始执行C.C+函数必须有返回值,否则不能使用函数D.C+程序中有调用关系的所有函数必须放在同一个程序文件中2.以下关于函数模板叙述正确的是( )A.函数模板也是一个具体类型的函数B.函数模板的类型参数与函数的参数是同一个概念C.通过使用不同的类型参数,函数模板可以生成不同类型的函数D.用函数模板定义的函数没有类型3.在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是( )A.作为友元函数重载的1元运算符B.作为成员函数重载的1元运算符C.作为友元函数重载的2元运算符D.作为成员函数重载的2元运算符4.构造函数不具备的特征是 ( )A.构造函数的函数名与类名相同B.构造函数可以重载C.构造函数可以设置默认参数D.构造函数必须指定类型说明 5.在C+中,封装是借助什么达到的( )A.结构 B.数组 C.类 D.函数6.在哪种情况下适宜采用 inline 定义内联函数?( )A.函数体含有循环语句 B.函数体含有递归语句 C.函数代码少、频繁调用 D.函数代码多、不常调用7.在关键字public后面定义的成员为类的( )A.私有成员 B.公用成员C.保护成员 D.任何成员8. 以下哪个基类中的成员函数表示纯虚函数?( )A.virtual void tt()=0; B.void tt(int) = 0;C.virtual void tt(int); D.virtual void tt(int) 9.假定AA是一个类,“AA* abc()const;”是该类中一个成员函数的原型,若该函数返回this值,当用x.abc()调用该成员函数后,x的值( )A.已经被改变 B.可能被改变C.不变 D.受到函数调用的影响10.C+ 对 C 语言作了很多改进,即从面向过程变成为面向对象的主要原因是( )A.增加了一些新的运算符 B.允许函数重载,并允许设置缺省参数 C.规定函数说明符必须用原型 D.引进了类和对象的概念 二、填空题11.如果一个派生类只有一个唯一的基类,则这样的继承关系称为_单继承_。12.C+支持两种多态性:_编译_时的多态性和运行时的多态性。14.所有模板都以template关键字和一个_类型参数_表开头。15.若一个函数的定义处于调用它的函数之前,则在程序开始可以省去该函数的_声明_语句。16.类型转换函数没有返回值类型,而且参数表为_空_。17.C+提供的预处理命令有嵌入指令,条件编译指令和_宏定义指令_。18.对象将其大部分实现细节隐藏起来,这种机制称为_信息隐蔽_。19.定义类动态对象数组时,其元素只能靠自动调用该类的_构造函数_来进行初始化。20.在函数体之前加_const_关键字可以防止函数误操作改变数据成员的值。三、改错题(本大题共2小题,每小题6分,共12分)21.下面是分数类fract的定义及测试主程序,在类定义及其友元函数定义中1到6行中有三处错误,更正错误后程序应显示41/28,请指出错误所在行的行号并给出改正意见。class fractint den; /分子int num; /分母public /1行fract(int d=0, int n=1):den(d),num(n) /2行friend fract &operator+=(fract, fract&); /3行void show() coutden/num; /4行; /5行 friend fract &operator+=(fract f1, fract f 2) /6行 /7行f1.den=f1.den*f 2.num+f1.num*f 2.den; /8行f1.num*=f 2.num; /9行return f1; /10行void main()fract fr(3, 4);fr+=fract(5, 7);fr.show(); 错误行的行号为_1_、_3_和_6_。分别改正为_public:_、_ friend fract &operator+=(fract&, fract&);_和_ friend fract &operator+=(fract& f1, fract&f2);_。22.下面程序段第13-17行中存在着三条语句错误,请指出错误语句的行号并说明原因。class A /1行int a; /2行 public: /3行A(int aa=0):a(aa) /4行; /5行class B /6行int a,b; /7行const int c; /8行A d; /9行public: /10行B():c(0) a=b=0; /11行B(int aa, int bb):d(aa+bb) /12行a=aa; b=bb; c=aa-bb; /13行 应去掉c=aa-bb; /14行 /15行 应加上分号(;)B a, b(1,2); /16行B x=a, y(b), z(1,2,3); /17行 z的定义可以是z(1, 2);错误行的行号为_13_、_15_和_17_。错误原因分别为_常成员变量只能用初始化表的方式初始化_、_没有分号_和_z定义错误_。四、程序填空题(请按提示要求完成以下程序段的填空)23.在下面一段类定义中, Derived类是由直接基类Base 1和Ba

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论