惠州学院C++复习题一、选择题1、C++的源文件的扩展名是_____C____。A、hB、objC、cppD、exe2、下列选项能够作为C++变量名的是___C____。A、falseB、1_abcC、_funcD、x*y3、下列叙述中,错误的是____B____。A、true是一个逻辑型常量B、S是一个字符型常量C、120是一个整型常量D、3.1415926是一个实型常量4、在C++语言中,变量所分配的内存空间大小____C____。A、均为一个字节B、由用户自己定义C、由变量的类型决定D、是任意的5、在C++中,对于break和continue说法错误的是__A____。A、break语句只能用于循环语句中B、循环语句中的continue语句是结束本次循环C、continue语句只能用于循环语句中D、循环语句中的break语句是结束整个循环6、以下说法中正确的是_____C_____。A、C++语言程序总是从第一个定义的函数开始执行B、在C++语言程序中,要调用的函数必须在main()函数中定义C、C++语言程序总是从main()函数开始执行D、C++语言程序中的main()函数必须放在程序的开始部分7、for(intx=0,y=0;!x&&y=15;y++)语句执行循环的次数是___C_____A、0B、15C、16D、无限循环8、若有以下语句:charx[]=”abcde”;chary[]={‘a’,‘b’,‘c’,‘d’,‘e’};则正确的说法是_____B______。A、x数组和y数组的元素个数相同B、x数组的元素比y数组的元素多C、x数组的元素比y数组的元素少D、x数组与y数组等价9、数组作为函数的形参时,把数组名作为实参,传递给函数的是____A____。A、该数组的首地址B、该数组的元素个数C、该数组中的各元素值D、该数组的大小10、下列运算符中,两个指针变量不可以进行的运算是_____D_____A、B、C、-D、+11、下面有关内联函数的说法,错误的是____C______A、内联函数主要解决程序的运行效率问题B、内联函数的定义必须出现在内联函数第一次被调用之前C、内联函数中可以包括各种语句D、对内联函数使用inline定义12、已知intx=20;下列表示引用的方法中,___B____是正确的。A、int&y=20;B、int&y=x;C、inty=&x;D、int&y=&x;13、若定义了函数int*function(),则函数function的返回值为____B_____。A、整型B、整型的地址C、指向函数的指针D、函数的地址14、关于C++类的说法,正确的是____C_____。A、只能有一个构造函数和一个析构函数B、可以有一个构造函数和多个析构函数C、可以有多个构造函数和一个析构函数D、可以有多个构造函数和多个析构函数15、关于类和对象不正确的说法是_____C_____A、类是一种类型,它封装了数据和操作B、对象是类的实例C、一个类的对象只有一个D、一个对象必属于某个类16、在类的作用域外部,可以直接访问的成员有____C_____A、所有类成员B、private或protected的类成员C、public的类成员D、public或private的类成员17、当一个派生类继承一个基类时,基类中的保护成员成为派生类的____B_____A、公有成员B、保护成员C、私有成员D、友元18、假定MyClass为一个类,则执行MyClassa[3],*p[2];语句时,调用该类构造函数______B____次。A、2B、3C、4D、519、下列的各类函数中,____C_____不是类的成员函数。A、构造函数B、析构函数C、友元函数D、拷贝构造函数20、下列关于虚函数的说法,错误的是_____C______。A、定义虚函数的关键字是virtualB、派生类可以重定义基类的虚函数C、构造函数可以定义为虚函数D、析构函数可以定义为虚函数二、判断题1、C++规定,在编写代码时不能将几条语句写在同一行。(×)2、在C++中,每条语句必须用分号结尾。(√)3、不同类型的数据在运算时会自动将级别低的类型转换为级别高的类型,然后再进行运算。(√)4、主函数不能带有参数。(×)5、在C++中,数组的下标一定是从0开始。(√)6、如果某个函数有返回值,那么在函数体内一定有return语句。(√)7、函数的形式参数和实际参数不可以同名。(×)8、构造函数在创建类对象时自动调用执行。(√)9、派生类对象不可以访问基类的私有成员。(√)10、抽象类是指包含纯虚函数的类。(√)三、填空题1、如果一个函数没有返回值时,需要用关键字____void_____说明。2、定义静态变量需要使用关键字____static______。3、x≠y且i≤j的C++表达式为________x!=y&&i=j_______。4、在C++中参数传递除了采用值传递方式,还可以使用___引用______传递方式和_____地址_______传递方式。5、动态内存分配机制使用new申请存储空间,使用___delete____释放存储空间。6、用class定义一个类时,类成员默认访问权限是_____私有的____。7、面向对象的基本特征是抽象、__封装___、___继承___和____多态_____。四、写出下列程序运行后的输出结果第1题#includeiostreamusingnamespacestd;voidmain(){inta,b;for(a=1,b=1;a=100;a++){if(b=15)break;if(b%3==1)b+=3;}coutaendl;,}第2题#includeiostreamusingnamespacestd;#defineN10voidfun(char*str1,char*str2){inti;charsource[N];intj=0;while(str1[j]!='\0'){source[j]=str1[j];j++;}source[j]='\0';for(i=0;ij;i++){str2[i]=str1[j-i-1];}str2[i]='\0';}voidmain(){chars1[N]=ABCDEFGH;chars2[N];fun(s1,s2);couts2endl;}第3题#includeiostream.hclassP{inta,b;public:P(inti=0,intj=0){a=i;b=j;}voidprint(){couta,bendl;}};voidmain(){Pp1(10,20),p2;p1.print();p2.print();}第4题#includeiostreamusingnamespacestd;classtest{private:intnum;floatf1;public:test();test(int,float);intgeti(){returnnum;}floatgetf(){returnf1;}~test(){coutDestructoriscalled!endl;}};test::test(){coutdefaultconstructoriscalled!endl;num=0;f1=0.0;}test::test(intn,floatf){coutconstructoriscalled!endl;num=n;f1=f;}voidmain(){test*p=newtest(5,3.6);coutp-geti()\tp-getf()endl;deletep;}第5题#includeiostream.h#includestring.hclassBase{private:charmsg[30];intn;public:Base(chars[],intm=0){n=m;strcpy(msg,s);}voidoutput(void){coutn\tmsgendl;}};classDerived:publicBase{private:intn;public:Derived(intm=1):Base(Base,m){n=m;}voidoutput(void){coutnendl;Base::output();}};voidmain(){BaseB(BaseClass,1);DerivedD;B.output();D.output();}五、根据要求完成程序1、下面函数的功能是求数组中最大元素和数组的平均值,请填写完整。#includeiostreamusingnamespacestd;voidmain(){inta[10]={2,5,4,9,12,8,7,15,6,10};intmax=a[0];intsum=a[0];____doubleavg_____for(inti=1;___i10__;i++){sum=sum+a[i];if(a[i]max)_____max=a[i]_______}avg=sum/10.0;cout最大的数是:maxendl;cout平均值是:avgendl;}2、下面函数是对整型数组进行递增排序(采用冒泡排序),请填写完整。voidbubble_up(intlist[],intcount)//count是数组需要排序的元素个数{for(inti=0;icount;i++)for(intj=0;___jcount-i-1___;j++)if(list[j]list[j+1]){inttmp=list[j+1];__list[j+1]=list[j]___list[j]=tmp;}}3、下面程序的功能是去掉字符串的前后空格,请填写完整。#includeiostreamusingnamespacestd;char*mytrim(_char*s__){char*p=s;//去掉字符串前面的空格while(*p=='')p++;char*q=s;//将p指向的字符串赋值给qwhile(*p!='\0'){__*q=*p__q++;__p++__}//去掉字符串后面的空格while(*q==''){__q--___}*(++q)='\0';return__s_;}voidmain(){charstr[]=hello,welcometoc++!;cout去掉空格字符之前的字符串为:[str']'endl;cout去掉空格字符之后的字符串为:[mytrim(str)']'endl;}程序的运行结果如下:去掉空格字符之前的字符串为:[hello,welcometoc++!]去掉空格字符之后的字符串为:[hello,welcometoc++!]六、程序设计设有D3Point类声明如下:classD3Point{public:D3Point();//D3Point类的缺省构造函数D3Point(intx,inty,intz);//D3Point类的有参构造函数D3Point(D3Point&p);//D3Point类的拷贝构造函数~D3Point(){coutdestructoriscalled!endl;}//D3Point类的析构函数voidMove(intdx,intdy,intdz);voidShow();private:intX,Y,Z;//D3Point类的私有数据成员};在类的声明外完成各个成员函数的定义,要求如下:(1)缺省构造函数初始化X,Y,Z为0,并输出defaultconstructoriscalled!(2)有参构造函数使用形参x,y,z初始化X,Y,Z,并输出constructoriscalled!(3)拷贝构造函数使用形参p初始化X,Y,并输出copyconstructoriscalled!(4)Move函数的功能是修改Poin