1、成都元亨教育面向对象程序设计复习题面向对象程序设计复习题一、选择题1、基类中的保护成员在其私有派生类中的访问属性是( A )。A.私有 B.公有 C.保护 D.不确定2、在类的非静态成员函数中,不可以直接访问的数据成员是( D )。A.本类的私有成员 B.本类的保护成员 C.本类的公有成员 D.本类的所有非静态成员3、下列标示符中,不符合C+标示符命名规则的是( C )。A.x10 B. _total C. D.www4、下列整型常数中,不符合C+语法的是( C )。A.12u B.-67l C.059 D.0X11ff5、下列常量中,不符合C+语法的是( D )。A.”0” B.* C.“”
2、 D.“Its an array!”6、下列数组的初始化形式中,不符合C+语法的是( A )。A.int s13=1,2,3,4 B.int s23=0 C.char s33=a,x,d D.char s4=“asd”7、如果说明语句为:int a4=10,20,30,40,50, *p=&a2;则*p的值是( B )。A.a2的地址 B.30 C.20 D.不确定8、已知:int a33;下列表示数组元素a00的方法中,不符合C+语法的是( C )。A.*a B.*a0 C.a0 D.*(*a1-1)9、已知:int a=3,b=5,下列表达式中,值为0的表达式是( B )。A.a%5-5
3、B.a/b C.!a|b D.a&b10、C+中字符常数的定界符是( B )。A.” B. C.# D.11、已知:int a=9,sum=0;下列循环中,不构成死循环的是( A )。A.for(;a;a+) sum+=a- B.dosum+=a-while(-a); C.while(a=1) sum+=a-; D.dosum+=awhile(a-1);12、如果定义一个函数时未指定该函数的返回值类型,则函数返回值类型应是( B )。A.无 B.int C.任意 D.void13、下列描述中,属于传值调用的是( C )。A.形参是指针,实参是地址 B.形参、实参都是数组C.形参是变量,形参是常
4、数 D.形参是指针,实参是数组名。14、在类的友元函数中,可以访问的数据成员是( D )。A.本类的私有成员 B.本类的保护成员 C.本类的公有成员 D.本类的所有成员15、下列各种函数中,在对象生命期结束时自动调用的函数的是( B )。A.构造函数 B.析构函数 C.友元函数 D.虚函数16、下列描述中,属于析构函数的特征是( D )。A.函数的名字与类名无关 B.函数可以重载 C.函数形参可有可无 D.不能指定函数返回值的类型17、列对类的描述中,不符合C+语法的是( B )。A.一个派生类至少有一个基类B.一个派生类只能有一个基类C.一个基类不可以有多个派生类D.抽象类一定是另一个类的基
5、类18、C+中的虚函数可以实现的面向对象的基本特性是( D )。A.封装性 B.继承性 C.抽象性 D.多态性19、下列关于运算符重载的描述中,错误的是( D )。A.运算符只能重载为成员函数B.运算符只能重载为友元函数C.有些运算符只能重载为成员函数D.有些运算符只能重载为友元函数20、有文件打开语句:ofstream fout(“data”);则下列描述中,正确的描述是( D )。A.fout是一个标准输入流对象; B.fout是一个标准输出流对象;C.fout是一个文件输入流对象; D.fout是一个文件输出流对象;21、下列标示符中,符合C+标示符命名规则的是( A )。A.Amax
6、B.x(2) C.int D.姓名22、下列常数中,不符合C+语法的是( C )。A.5 B.7 C.2e0.5 D.3.14f23、下列字符常量中,不符合C+语法的是( B )。A.0 B. C.3 D.*24、以下指针用法中错误的是( B )。A.int i; int *ptr=&i; B.int *ptr=2000; C.int *ptr=0; D.int i, *ptr=&i; *ptr=5;25、下列描述中,不属于地址调用的是( D )。A.形参、实参是指针 B.形参、实参都是数组C.形参是指针,实参是数组名 D.形参是变量的引用,实参是变量26、下列各种函数中,在对象生命期结束时自
7、动调用的函数是( B )。A.构造函数 B.析构函数 C.友元函数 D.虚函数27、下列描述中,不属于虚函数的特征是( C )。A.函数定义时不加virtual B.是类的非静态成员函数 C.函数没有形参 D.不能重载28、C+中设置友元函数的目的是( B )。A.解决继承中的二义性问题 B.提高编程效率 C.实现动态多态性 D.实现静态多态性29、下列关于运算符重载的描述中,正确的是( D )。A.运算符重载可以改变操作数的个数B.运算符重载可以改变原有运算符的优先级C.运算符重载可以改变运算符的结合性D.运算符重载可以定义新的运算方法30、用I/O流打开一个文件时,如果不指定文件存储方式,
8、则该文件的格式是(B)。A.二进制文件 B.文本文件 C.无格式 D.不确定二、判断题(每题1分,共10分,对的打,错的打)1、一个程序文件中,main函数有且只能有一个。 ( )2、程序中的注释是可执行的语句。 ( )3、C+的表达式中不允许不同类型数据的混合运算。 ( )4、系统函数不需要任何人定义,编程时可直接使用。 ( )5、数组名可以看作一个指针变量。 ( )6、不同函数间传递数组时,采用的是引用调用方式。 ( )7、虚函数可以是类的静态成员。 ( )8、抽象类只能做基类,但可以定义该类的对象。 ( )9、文本文件只能保存字符数据,不能保存数值数据。 ( )10、函数调用在前,定义在
9、后时,需要原型声明。 ( )11、main函数总是程序中第一个被执行的函数。 ( )12、程序中的注释是写给编程人员看的。 ( )13、C+的表达式中允许不同类型数据的混合运算。 ( )14、函数在调用之前必须先定义或声明。 ( )15、数组名中存放的是一个地址。 ( )16、不同函数间传递数组时,采用的是地址调用方式。 ( )17、基类的指针可以指向其派生类的对象。 ( )18、复制构造函数与构造函数的执行时机是一样的。 ( )19、类中定义的成员函数都是内联函数。 ( )20、没有main函数的C+程序也可以执行。 ( )21、程序中有没有注释不影响程序的执行。 ( )22、一个函数的函数
10、体中不能包含另一个函数的定义。 ( )23、类的任何公有成员在类体外必须通过对象来访问。 ( )24、一个指针变量指向数组元素时可以做+或操作。 ( )25、具有块作用域的变量在块结束时,所占存储空间一定被释放。 ( )三、阅读程序写结果1、#include void main()int s=0, k;for(k=7; k=0; k-)switch(k)case 1:case 4:case 7: s+=k; break;case 2:case 3:case 6: break;case 0:case 5: s+; break;cout”S=”sendl;输出结果:答:S=142、写出以下程序运行
11、时分别输入1、0、5时的输出结果。#include void main() int a,b=5;couta;switch(a0) case 1: switch(b10) case 0:cout*endl;case 1:cout#endl;default:cout0) case 0:coutok1n;case 1:coutok2n;输出结果:答:第一次运行: 输入一个整数:1#!ok2第二次运行: 输入一个整数:0ok2第三次运行: 输入一个整数:5#!ok23、写出下列程序运行时输入9的运行结果#include void main()int a10=23,4,78,9,9,37,92,47,9
12、,17, x, i, k= -1;coutx;for(i=0; i10; i+) if(ai!=x) a+k=ai;for(i=0; i=k; i+)coutai“ ”;coutendl;输出结果:答: 23 4 78 37 92 47 17 4、#include void main()int a4,i,j,k;for(i=0;i4;i+) ai=0;k=3;for(i=0;ik;i+)for(j=0;j=k;j+)aj=ai+2;couta1 a3endl;输出结果:答:10 125、#include long fac(int);void main()int i;for(i=1;i=5;i+
13、)couti fac(i+1)endl;long fac(int n) static long f=1;f=f*n;return f;输出结果:答:1 22 63 244 1205 7206、#include void swap(int &m1,int &m2) m1*=2; m2+=2; void main() int a(10), b(20);coutabendl;swap(a,b);coutabendl;输出结果:答:10 2020 227、#include class myclass private: int x,y;static long sum;public: myclass(in
14、t a,int b) x=a;y=b;void getxy() sum*=x*y;coutsum=sumendl;long myclass:sum=1;void main() myclass ob1(1,2);ob1getxy();myclass ob2(3,4);ob2getxy();myclass ob3(5,6);ob3getxy();输出结果:答:sum=2sum=24sum=7208、#include class cube public:cube(int ht=2,int wd=5,int dp=3) height=ht; width=wd; depth=dp;coutdepth=d
15、epthconstruncted calledendl;cube() coutdepth=depthDestructed calledendl;int volume() return height *width*depth;private:int height,width,depth;void main() cube cone(10,20,15),ctwo;coutcone.volume()endl;coutctwo.volume()endl;输出结果:答:depth=15construncted calleddepth=3construncted called300030depth=3Des
16、tructed calleddepth=15Destructed called9、#include class Apublic:virtual void disp() cout”A”endl; ;class B:public Avoid disp() cout”B”endl; ;void p1(A &a1) a1disp(); void p2(A a2) a2disp(); void main() B b;p1(b);p2(b);输出结果:答:BA10、#include void f(int);void main() for(int i(1); i=4 ; i+) f(i);void f(in
17、t j) static int a=10; int b=1; a+=10; b+=5; couta+b=a+bendl;输出结果:答:20+6=2630+6=3640+6=4650+6=56四、程序填空1、以下的程序实现求分数序列2/1,3/2,5/3,8/5,13/8,21/13,前15项的和。#include#define N 15void main( )int i, m, n, k; double s=0 ;m=2, n=1;for( i=1; i=N; i+)s=s+10*m/n;k=m;m= m+n ;n= k ;cout”s=”sendl; 2、下面是利用运算符重载实现字符串加等的
18、程序,请在空白处填入合适的内容。#include#includeclass Cstringchar *s;public: Cstring(char *s1=0) s=new charstrlen(s1)+1; strcpy(s,s1); _ Cstring operator+=(Cstring &s1);_ void list()coutsendl;Cstring Cstring:operator+=(Cstring &s1) char *t=new charstrlen(s)+strlen(s1.s)+1; strcpy(t,s); strcat(t,s1.s); delete s; s=t
19、; _ return *this;_ void main() Cstring cstr1(abcd),cstr2(1234); _ cstr1+=cstr2;_ cstr1.list();3、下面程序将输入到数组a中的数据重新按逆序存放,然后将逆序存放后的数据输出。 #include const int N 10;void main() int aN,*p=a,*q,r;cout”输入10个整数:”;for (int i=0; iaI+;p=a; q=&a9;while( _ pq _ ) r=*p; p=q; *q=r;p+; _ q- _ ;cout” 逆序存放结果:”;p= a ;for
20、(i=0; iN ;i+)cout*p+ ;coutendl;4、输入一串有字母和数字混合的字符串,编程序将字符串中的字母和数字分开,分别存入两个不同的文件。# include # include # includevoid main() char ch100; cout请输入一串有字符和数字的字符串:endl; ofstream fout1(shuzitxt); ofstream fout2(zimutxt); if(!fout1) cout文件打开失败! endl; exit(1); if(!fout2) cout文件打开失败! ch; int i=0; do if( 0=chi&chi=
21、9 ) fout1chi; if(a=chi&chi=z)|(A=chi&chi=Z) fout2chi ; i+; while(chi!=0); fout1close(); fout2close();5、下面的程序输出小于200的素数,而且每行最多输出10个素数。 # include # include class Prime int p;public: Prime(int n)if (n3) p=3;else p=n; void Run(); ;void Prime:Run() int k,j,flag,line=0;for(j=2;jp;j+) flag=1;for (k=2;kj;k+
22、)if(j%k=0) flag=0 ;if(flag)coutsetw(5)j;line+;if( line%10=0 )coutendl;coutendl;void main() Prime obj(200) ;objRun();6、下面是将一个一维数组及各元素乘积写入文本文件data.txt的程序,请在空白处填入合适的内容。_#include _ #include void main() int a10=1,2,3,4,5,6,7,8,9,10,cum=0; _ ofstream fout(data.txt); _ if(!fout) /打开文件失败 coutCannot open the
23、 file!endl; exit(1); int i; for(i=0;i10;i+) cum*=ai; _ foutaiendl;_ /将数组元素写入文件 _ foutcumendl;_ /将元素的乘积写入文件 fout.close(); 7、以下程序用友元函数实现复数加和复数赋制运算,完成程序。#include class complexprivate:double real,image;public:complex( )real=0; image=0; complex(double r , double i )real=r; image=i; friend complex operato
24、r+(complex &a,const complex &b);complex &operator=(complex &c);void print();complex operator + (complex &a,const complex &b)return complex(_ a.real+b.real, a.image+b.image _);complex &complex:operator = (complex &c) real=c.real; imag=c.imag; return *this;void complex:print()coutreal”+”imageendl;void
25、 main() complex c1,c2(1.5,4.0),c3(6.5, -2.8);complex c4=c2+c3;c1=c4;c1.print();c4.print();8、下面是利用运算符重载实现字符串赋值(=)的程序,请在空白处填入合适的内容。#include#includeclass Cstringchar *s;public: Cstring(char *s1=0) s=new charstrlen(s1)+1; strcpy(s,s1); _ Cstring operator=(Cstring &s1);_ void list()coutsendl;Cstring Cstring:operator=(Cstring &s1) delete s;s=new charstrlen(s1.s)+1; strcpy(s,s1.s); _ return *this;_ void main() Cstring cstr1(abcd),cstr2(1234); _ cstr1=cstr2;_ cstr1.list();五、编程题1、从由键盘输入的若干整数中找出其中最大的数并输出。当输入为负数时结束输入。答:#include void main( ) int a,
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1