当前位置:文档之家› c练习题带答案

c练习题带答案

选择题1. C++语言属于(C)。

A)自然语言B)机器语言C)面向对象语言D)汇编语言2. 下面选项中不属于面向对象程序设计特征的是(C)。

A)继承性B)多态性C)相似性D)封装性3. 下列情况中,哪一种情况不会调用拷贝构造函数(B)A)用派生类的对象去初始化基类对象时B)将类的一个对象赋值给该类的另一个对象时C)函数的形参是类的对象,调用函数进行形参和实参结合时D)函数的返回值是类的对象,函数执行返回调用者时4. 以下哪一关键字可用于重载函数的区分(C)A)extern B)static C)constD)virtual5. 下列有关数组的叙述中,正确的是(B)A)C++中数组的存储方式为列优先存储B)数组名可以作为实参赋值给指针类型的形参C)数组下标索引从1开始,至数组长度n结束D)数组指针的语法形式为:类型名*数组名[下标表达式];6. 下列有关继承和派生的叙述中,正确的是(C)A)派生类不能访问通过私有继承的基类的保护成员B)多继承的虚基类不能够实例化C)如果基类没有默认构造函数,派生类就应当声明带形参的构造函数D)基类的析构函数和虚函数都不能够被继承,需要在派生类中重新实现7. 若有下面的函数调用:fun(a+b,3,max(n-1,b));其中实参的个数是(A)A)3 B)4 C)5 D)68. 下列关于this 指针的说法正确的是(B)A)this 指针存在于每个函数之中B)在类的非静态函数中this指针指向调用该函数的对象C)this 指针是指向虚函数表的指针D)this 指针是指向类的函数成员的指针9. 在下列关于C++函数的叙述中,正确的是(C)A)每个函数至少要有一个参数B)每个函数都必须返回一个值C)函数在被调用之前必须先声明D)函数不能自己调用自己10. 下列运算符中,不能重载的是(C)A)&& B)!= C). D)->11. 下面程序的输出结果是(B)选择题#include<iostream> usingnamespacestd;inti=0;12.13.intfun(intn){staticinta=2;a++;returna+n;}voidmain(){intk=5;{inti=2;k+=fun(i);}k+=fun(i);cout<<k;}A)13 B) 14 C)15面程序的输出结果是( C)#include<iostream>usingnamespacestd;classBase{public:virtualvoidf(){cout<< “f0+ ” ;}voidg(){cout<< “ g0+”;}};D)16classDerived:publicBase{public:voidf(){cout<< “ f+ ”;}voidg(){cout<< “ g+”;}};voidmain(){Derivedd;Base*p=&d;p->f();p->g();}A) f+g+ B) f0+g+ C) f+g0+ D) f0+g0+ 以下程序的输出结果是:( D)#include<iostream>usingnamespacestd;intfun(char*s){char*p=s;while(*p!='\0')p++;return(p-s);}voidmain(){cout<<fun("abc")<<endl;}A.0B.1 C.2D.314. 有如下程序段:inti=1;while(1){i++;if(i==10)break; if(i%2==0)cout<< '* ';} 执行这个程序段输出字符*的个数是(C)A. 10B.3C.4D.515. 下列关于虚基类的描述中,错误的是( C)A. 使用虚基类可以消除由多继承产生的二义性B. 构造派生类对象时,虚基类的构造函数只被调用一次C. 声明classB:virtualpublicA 说明类B 为虚基类D. 建立派生类对象时,首先调用虚基类的构造函数16. 有下类定义ClassA{Char*a;Public:A():a(0){}A(char*aa){// 把aa 所指字符串拷贝到a 所指向的存储空间A= ;Strcpy(a,aa);~A(){delete[]a;}};正确的选择是( A)A. newchar[strlen(aa)+1]B.char[strlen(aa)+1]C.char[strlen(aa)]D.newchar[sizeof(aa)-1]17. 有如下程序:#include<iostream> usingnamespacestd;classTest{ public: Test(){}~Test(){cout<<'#';}};intmain(){Testtemp[2],*pTemp[2];return0;}执行这个程序输出星号( #)的个数为( B)。

A) 1B)2 C )3D) 418. 友元运算符obj++被C++编译器解释为(D)。

A. operator++(obj)B.operator++(obj,0)B. obj.operator++()D.obj.operator++(0)19. 下面程序的运行结果为(C)#include classA { intnum; public: A(inti){num=i;} A(A&a){num=a.num++;} voidprint(){cout<<NUM;}<p>}; voidmain() {Aa(1),b(a);a.print();b.print();}A. 11B.12C.21D.2220. 如果类A 被说明成类B 的友元,则(D)A. 类A 的成员即类B 的成员B. 类B 的成员即类A 的成员C. 类A的成员函数不得访问类B的成员D. 类B不一定是类A的友元21. 下面程序的运行结果是(C) #includevoidmain() { intnum=1; int&ref=num; ref=ref+2; cout<<NUM;<p> num=num+3;cout<<REF<<ENDL;<p>}A.13B.16C.36D.3322. 下列程序的运行结果为(C) #includeinti=0;classA{public:A(){i++;}};voidmai n(){ Aa,b[3],*c;c=b;cout<<l<<ENDL;}A.2B.3C.4D.523. 下列字符串中可以用C++语言标识符的是(A)A._1234B.foo~~barC. virtuaD.34var.填空题1. 在面向对象方法中,类之间共享属性和操作的机制称为继承____2. C++中封装性、继承性和多态性是面向对象思想的主要特征。

3. 下列for语句的循环次数为5。

for(i nta=0,b=1;b&&a<5;a++);4. C++程序是从main函数开始执行的。

5. 派生类构造函数的执行顺序是先执行基类的构造函数,然后执行成员对象的构造函数,最后执行派生类的构造函数。

6. C++语言的基本控制结构为顺序结构、选择结构和循环结构7. 函数重载要求重载的函数必须有和原函数一样的函数_______8. 设置虚基类的目的是解决二义性问题,通过用关键字virtual表示虚基类。

9. 语句cout<< n还可表示为cout<<ENDL;10. 若已知a=10,b=20,则表达式!a<B的值为111. 友元类的所有成员函数都是另一个类的友元函数____ 三程序填空1 •用递归法求从1到n的立方和:f(1)=1( n=1)f(n)=f(n-1)+n 3(n>1)#in clude<iostream>usingn amespacestd;in tf(i nt);in tmai n(){intn ,s;cout<<"i nputthe nu mber n:"; cin>>n;s=f( n); cout<<"Theresultis"<<s<<e ndl;return。

;}intf(intn){〃递归法求立方和函数if(n==1)return1; elsereturnf n-1)+n*n*n );}3.请将下列程序补充完整,使得输出结果为" DestructorDerivedDestructorBase#in clude<iostream> usingn amespacestd;classBase{public:virtual~Base() {cout<< “ DestructorBase ” <<endl;}};classDerived:publicBase{public:~Derived(){cout<< “ DestructorDerived ” <<endl;}};voidmai n(){Base*pBase=n ewDerived; deletepBase ;。

相关主题