c++复习题(同名8806).doc_第1页
c++复习题(同名8806).doc_第2页
c++复习题(同名8806).doc_第3页
c++复习题(同名8806).doc_第4页
c++复习题(同名8806).doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

C+练习题一、选择题1. C+语言属于( C )。A) 自然语言 B) 机器语言 C)面向对象语言 D) 汇编语言2. 下面选项中不属于面向对象程序设计特征的是( C ) 。A)继承性 B)多态性 C)相似性 D)封装性3. 可用作C+语言用户标识符的一组标识符是( B )。A) void define +WORD B) a3_b3 _123 YNC) for -abc CaseD) 2a DO sizeof4. 假定一个二维数组的定义语句为“int a34=3,4,2,8,6;”,则元素a21的值为( A )。A) 0 B) 4 C) 8 D) 65. 下列情况中,哪一种情况不会调用拷贝构造函数 ( B )A)用派生类的对象去初始化基类对象时B)将类的一个对象赋值给该类的另一个对象时C)函数的形参是类的对象,调用函数进行形参和实参结合时D)函数的返回值是类的对象,函数执行返回调用者时6. 以下哪一关键字可用于重载函数的区分( C )A)externB)staticC)constD)virtual7. 下列有关数组的叙述中,正确的是( B )A)C+中数组的存储方式为列优先存储B)数组名可以作为实参赋值给指针类型的形参C)数组下标索引从1开始,至数组长度n结束D)数组指针的语法形式为:类型名 *数组名下标表达式;8. 下列有关继承和派生的叙述中,正确的是( C )A)派生类不能访问通过私有继承的基类的保护成员B)多继承的虚基类不能够实例化C)如果基类没有默认构造函数,派生类就应当声明带形参的构造函数D)基类的析构函数和虚函数都不能够被继承,需要在派生类中重新实现9. 实现运行时多态的机制是( A )A)虚函数B)重载函数C)静态函数D)模版函数10. 若有下面的函数调用:fun(a+b, 3, max(n-1, b);其中实参的个数是( A )A)3B)4C)5D)611. 下列关于this指针的说法正确的是( B )A)this指针存在于每个函数之中B)在类的非静态函数中this指针指向调用该函数的对象C)this指针是指向虚函数表的指针D)this指针是指向类的函数成员的指针12. 在下列关于C+函数的叙述中,正确的是( C )A)每个函数至少要有一个参数B)每个函数都必须返回一个值C)函数在被调用之前必须先声明D)函数不能自己调用自己13. 下列运算符中,不能重载的是 ( C )A)&B)!=C).D)-14. 下面程序的输出结果是( B )#include using namespace std;int i = 0;int fun(int n) static int a = 2;a+;return a+n;void main()int k = 5;int i = 2;k += fun(i);k += fun(i);cout k;A)13B)14C)15D)1615. 下面的程序段的运行结果为( D )char s tr = job, *p = str;cout *(p+2) endl;A)98 B)无输出结果 C)字符b的地址 D)字符b16. 下面程序的输出结果是( C )#include using namespace std;class A public: A (int i) x = i; void dispa () cout x “,”; private : int x ;class B : public A public: B(int i) : A(i+10) x = i; void dispb() dispa(); cout x endl; private : int x ;void main()B b(2);b.dispb();A)10,2B)12,10C)12,2D)2,217. 下面程序的输出结果是( C )#include using namespace std;class Base public: Base(int i) cout i; Base () ;class Base1: virtual public Base public: Base1(int i, int j=0) : Base(j) cout i; Base1() ;class Base2: virtual public Base public: Base2(int i, int j=0) : Base(j) cout i; Base2() ;class Derived : public Base2, public Base1 public: Derived(int a, int b, int c, int d) : mem1(a), mem2(b), Base1(c), Base2(d), Base(a) cout b; private: Base2 mem2; Base1 mem1;void main() Derived objD (1, 2, 3, 4); A)134122B)123412C)14302012D)14321218. 下面程序的输出结果是( C )#include using namespace std;class Base public: virtual void f() cout “f0+”; void g() cout “g0+”; ;class Derived : public Base public: void f() cout “f+”; void g() cout f(); p-g(); A)f+g+B)f0+g+C)f+g0+D)f0+g0+19. 下面程序的输出结果是( C )#include using namespace std;class Samplefriend long fun (Sample s) if (s.x 2) return 1; return s.x * fun(Sample(s.x-1); public: Sample (long a) x = a; private: long x;void main() int sum = 0; for (int i=0; i4; i+) sum += fun(Sample(i); cout sum; A)12B)16C)10D)3420. 以下程序的输出结果是:( D )#include using namespace std;int fun(char *s) char *p=s;while (*p!=0) p+;return (p-s);void main()coutfun(abc)endl;A0 B. 1 C. 2 D. 321. 有如下程序段:int i=1;while(1)i+;if (i=10) break;if(i%2=0) coutGetValue() D) x.GetValue( )25. 假定AA为一个类,int a()为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为( A )。A) int AA:a( ) B) int AA:a() C) AA:a() D) AA:int a()26. 有如下程序:#include using namespace std;class Testpublic:Test() Test()cout#;int main()Test temp2, *pTemp2; return 0;执行这个程序输出星号(#)的个数为( B )。A)1 B)2 C)3 D)427. 有如下程序:#include using namespace std;class MyClass public: MyClass(int i=0)cout1;MyClass(const MyClass&x)cout2;MyClass& operator=(const MyClass&x)cout3; return *this; MyClass()cout4;int main()MyClass obj1(1),obj2(2),obj3(obj1);obj1=obj2;return 0;运行时的输出结果是( A )。A)1123444 B)11114444 C)121444 D)1131444428. 有如下程序: #include using namespace std;class point public: static int number; public:point() number+;point() number-; int point:number=0; void main() point *ptr; point A,B;point *ptr_point=new point3; ptr=ptr_point; point C; delete ptr;cout1)#include using namespace std;int f(int);int main()int n,s; coutn; s= f(n) ; coutThe result is sendl; return 0; int f(int n) /递归法求立方和函数 if ( n=1 ) return 1; else return ( f(n-1)+n*n*n );3. 请将下列程序补充完整,使得输出结果为“Destructor Derived Destructor Base”。#include using namespace std;class Base public: virtual Base () cout “Destructor Base” endl; ;class Derived : public Base public: Derived() cout “Destructor Derived” endl; ;void main () Base *pBase = new Derived; delete pBase ; 三、阅读程序,写出运行结果1.#include#includeusing namespace std;class CD char name20; int number;public: void Init(char* aa, int bb) strcpy(name,aa); number=bb; char* Getname () return name; int Getnumber () return number; void Output() cout name number endl; CD dx;void main()CD dy;dx.Init(歌唱祖国,30);dy.Init(义勇军进行曲,3*dx.Getnumber ()+5);dx.Output();dy.Output();歌唱祖国 30义勇军进行曲 952#include using namespace std; int f(int a) return +a; int g(int& a) return +a; void main() int m=0,n=0; m+=f(g(m); n+=f(f(n); coutm=mendl; coutn=nendl; m=3n=23. #include using namespace std;class Demopublic: Demo()coutdefault constructorn; Demo(const Demo &x)coutcopy constructorn;Demo userCode(Demo b)Demo c(b);return c;void main() Demo a,d; coutcalling userCode()n; d = userCode(a); 执行上面的程序的过程中,构造函数Demo()和Demo(const Demo &x)被调用的次数分别是多少次? 2 3五、编写程序1、编写函数计算y=1!+2!+3!.n! ,n作为参数传递,在主函数调用该函数并输出结果。2、编写函数找出二维数组(5*4)中元素的最大值与最小值,并返回其最大值与最小值。测试结果。3、编写一个三角形类,有计算面积,显示面积的功能等,并测试。要求有参数的构造函数及复制构造函数C+复习题一、单选题1C+语言对c语言做了很多改进,c+语言相对于C语言的最根本的变化是( D ) A. 增加了一些新的运算符 B. 允许函数重载,并允许设置缺省参数 C. 规定函数说明符必须用原型D. 引进了类和对象的概念2下列哪个是c+语言的有效标识符? ( A ) A. -N01 B. No.1 C. 12345 D. int3下面程序的运行结果为( C ) #include void main() for(int a=0,x=0;!x & a=10;a+) a+; coutaendl; A. 10 B. 11 C. 12 D. 04下列选项,语法不正确的是( B )A. for(int a=1;a=10;a+); B. int a=1;do a+; while(a=10)C. int a=1;while(a=10) a+; D. for(int a=1;a=10;a+)a+;5下列程序的输出结果为( B ) #include void main() char *a=hello,the,world; char *pa=a; pa+; cout *pa endl; A. hello B. the C. world D. hellotheworld6决定C+语言中函数的返回值类型的是( D )A. return语句中的表达式类型B. 调用该函数时系统随机产生的类型C. 调用该函数时的主调用函数类型D. 在定义该函数时所指定的数据类型7下列程序的输出结果是( B ) #include int min(int a,int B) if(aB) return a;else return B;return 0; void main() coutmin(1,min(2,3)= C. : D./18下面关于类和对象的描述中,错误的是( A ) A. 类就是c语言中的结构体类型,对象就是C语言中的结构体变量 B. 类和对象之间的关系是抽象和具体的关系 C. 对象是类的实例,一个对象必须属于一个已知的类 D. 类是具有共同行为的若干对象的统一描述体19下面关于break语句的描述中,不正确的是( D )A. break可以用于循环体内 B. break语句可以在for循环语句中出现多次C. break语句可以在switch语句中出现多次D. break语句可用于if条件判断语句内20下面关于数组的描述错误的是( D ) A. 在c+语言中数组的名字就是指向该数组第一个元素的指针 B. 长度为n的数组,下标的范围是0n-l C. 数组的大小必须在编译时确定 D. 数组只能通过值参数和引用参数两种方式传递给函数21下面程序错误的语句是( B )#includevoid main() int *p=new int1; p=9; cout *p endl; delete p; A. B. c. D. 22下面的哪个选项不能作为函数的返回类型?( C ) A. void B. int C. new D. long23下列程序的输出结果为( D )#includeint func(int n) if(n1)return 1;else return n+func(n-1); return 0;void main() coutfunc(5)endl; A. 0 B. 10 C. 15 D. 1624在C+语言中,数据封装要解决的问题是( D ) A. 数据的规范化 B. 便于数据转换 C. 避免数据丢失 D. 防止不同模块之间数据的非法访问25对类的构造函数和析构函数描述正确的是( A ) A. 构造函数可以重载,析构函数不能重载 B. 构造函数不能重载,析构函数可以重载 c. 构造函数可以重载,析构函数也可以重载 D. 构造函数不能重载,析构函数也不能重载26下面对静态数据成员的描述中,正确的是( A )A. 静态数据成员是类的所有对象共享的数据B. 类的每个对象都有自己的静态数据成员C. 类的不同对象有不同的静态数据成员值D. 静态数据成员不能通过类的对象调用27如果类A被说明成类B的友元,则( D )A. 类A的成员即类B的成员 B. 类B的成员即类A的成员C. 类A的成员函数不得访问类B的成员 D. 类B不一定是类A的友元28下面关于虚函数的描述,错误的是( B ) A. 在成员函数声明的前面加上virtual修饰,就可把该函数声明为虚函数 B. 基类中说明了虚函数后,派生类中对应的函数也必须说明为虚函数 C. 虚函数可以是另一个类的友元函数,但不能是静态成员函数 D. 基类中说明的纯虚函数在其任何派生类中都必须实现29下面程序的运行结果是( C )#include void main() int num=1; int &ref=num; ref=ref+2; coutnum; num=num+3; coutrefendl; A. 13 B. 16 C. 36 D. 3330下面关于c+语言的描述错误的是( B )A) C+语言支持数据封装 B) C+语言中引入友元没有破坏封装性C) C+语言允许函数名和运算符重载 D) C+语言支持动态联编31下列程序的运行结果为( B ) #include void main() int a=2; int b=a+1; cout a/bendl; A. 0.66667 B. 0 C. 0.7 D. 0.6666666632设int a=1,b=2;,则(a+)+b和a+b这两个表达式的值分别为( A ) A. 3,3 B. 3,4 C. 4,3 D. 4,433下面程序的运行结果为( D ) #include void main() char a=3; switch(a) case3:cout3; case2:cout2;break; default:cout1; A. 3 B. 321 C. 31 D. 3234存在定义int a10,x,*pa;,若pa=&a0,下列的哪个选项和其他3个选项不是等价的?( A ) A. x=*pa; B. x=*(a+1); C. x=*(pa+1); D. x=a1;35下面程序的运行结果为 ( D ) #include void swap(int &a,int b) int temp; temp=a+; a=b;b=temp; void main() int a=2,b=3;swap(a,b); cout a , b endl; A. 2,3 B. 3,2 C. 2,2 D. 3,336下面关于C+语言变量的叙述错误的是( B ) A. 在C+语言中变量分为auto,static,extern和register四种存储类型 B. 自动变量和外部变量的作用域为整个程序 C. 内部静态变量的作用域是定义它的函数 D. 外部静态变量的作用域是定义它的文件37为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为( A ) A. public B. protected C. private D. static38在C+语言程序中,对象之间的相互通信通过( B ) A. 继承实现 B. 调用成员函数实现 C. 封装实现 D. 函数重载实现39类的析构函数是在什么时候调用的?( C ) A. 类创建时 B. 创建对象时 C. 删除对象时 D. 不自动调用40通常拷贝构造函数的参数是( C ) A. 某个对象名 B. 某个对象的成员名 C. 某个对象的引用名 D. 某个对象的指针名41在C+语言类体系中,不能被派生类继承的有( B ) A. 转换函数 B. 构造函数 C. 虚函数 D. 静态成员函数42试题内容:对于类定义, 下面正确的叙述是( C ) class A public: virtual void funcl() void func2(); class B:public A public: void funcl()cout”class B func 1”endl; viauM void func2()cout”class B func 2”endl; ;A)A:func2()和B:funcl()都是虚函数 B)A:func2()和B:funcl()都不是虚函数C)B:funcl()是虚函数,而A:func2()不是虚函数 D) B:funcl()不是虚函数,而A:fune2()是虚函数43与语句coutendl;不等价的是( D ) A. coutn; B. cout012; C. coutxA; D. cout0;44下面程序的运行结果是( C ) #include void main() int i=1; while(i=8) if(+i%3!=2) continue; else cout i; A. 25 B. 36 C. 258 D. 36945已知有定义, 则下列选项错误的是( B ) const int D=5; int i=1; double f=0.32; char c=15; A. +i; B. D-; C. c+; D. -f46下面程序的功能是把316表示为两个加数的和,使两个加数分别能被13和11整除,在划线处应填入的选项是( B ) #include void main() int i=0,j,k; doi+;k=316-13*i; while( ); j=k/11; cout 316=13* i +11* j; A. k/11 B. k11 C. k/11=0 D. k11=047设有数组定义:char array=”China”;,则数组array所占的空间为( C ) A. 4个字节 B. 5个字节 C. 6个字节 D. 7个字节48下列描述中哪个是正确的?( b ) A. 私有派生的子类无法访问父类的成员B. 类A的私有派生子类的派生类C无法初始化其祖先类A对象的属性,因为类A的成员对类C是不可访问的 C. 私有派生类不能作为基类派生子类 D. 私有派生类的所有子孙类将无法继续继承该类的成员49下列关于构造函数说法不正确的是( C ) A. 构造函数必须与类同名 B. 构造函数可以省略不写 C. 构造函数必须有返回值 D. 在构造函数中可以对类中的成员进行初始化50如果友元函数重载一个运算符时,其参数表中没有任何参数则说明该运算符是( D ) A. 一元运算符 B. 二元运算符 C. 选项A)和选项B)都可能 D. 重载错误51下面程序的输出结果是 ( C ) #include class example int a; public:example(int b)a=b+; void print()a=a+1;couta”; void print()constcoutaSetNum(50)4在面向对象方法中,类之间共享属性和操作的机制称为_。正确答案:继承5假设int a=1,b=2;则表达式a+-b的值为_。正确答案:26通过使用new和delete两个运算符进行的分配为_分配。正确答案:动态存储7下面程序的运行结果为_。 #include void fun(int x=0,int y=0) coutxy; void main() fun(5);正确答案:508重载的运算符保持其原有的_、优先级和结合性不变。正确答案:操作数个数9cout.put(A);,还可以表示为_。正确答案:cout A10在C+中封装性、继承性和_是面向对象思想的主要特征。正确答案:多态性11下面程序的结果为_。 #include void main() int a=1,b=2; bool c=1; if(ab)| c) cout trueendl; else cout falseendl; 正确答案:true12假定A为一个类,则语句A(A &p);为该类_函数的原型说明。正确答案:拷贝构造13派生类构造函数的执行顺序是先执行_的构造函数,再执行_的构造函数。正确答案:基类、派生类14派生类的成员一般分为两部分,一部分是_,另一部分是自己定义的新成员。正确答案:从基类继承的成员15如果要把返回值为void的函数A声明为类B的友元函数,则应在类B的定义中加入的语句是_。正确答案:friend void A();三、程序阅读题1阅读下面的程序,试求:(1)给出程序的运行结果。(2)根据程序的运行结果,说明“+”运算符的结合原则。#includeclass A int a; public:A()a=0; A(int aa) a=aa; cout a+; ;void main() A x,y(2),z(3); cout endl;正确答案:(1)给出程序的运行结果:23 (2) 因为“+”运算符是右结合的,所以先输出,后加1,结果为23。2阅读下面的程序,试求:(1)给出程序的运行结果。(2)分析变量i的作用。#includeint i=0;class Apublic:A()i+;void main()A a,b3,*c; c=b; cout i endl;正确答案:(1)给出程序的运行结果:4 (2)外部变量i的作用是记录调用构造函数的次数。3阅读下面的程序,试求:(1)给出程序的运行结果。(2)分析for循环的运行机制。#includeint fun(int a,int n)int result=1; for(int i=1;in;i+) result= result * ai; return result; void main() int a3=3,4,5;cout fun(a,3)endl; 正确答案:(1)给出程序的运行结果:2

温馨提示

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

评论

0/150

提交评论