电大面向对象程序设计期末复习题4及参考答案(经典复习考试题).doc
1. 由C+源程序文件编译而成的目标文件的默认扩展名为( C )。 A. cpp B. exe C. obj D. lik2设x和y均为bool量,则x && y为真的条件是( A )。 A. 它们均为真 B. 其中一个为真 C. 它们均为假 D. 其中一个为假3. 在下面的二维数组定义中,正确的语句是( C )。 A. int a5; B. int a5; C. int a3=1,3,5,2; D. int a(10);4. 在文件包含命令中,被包含文件的扩展名( C )。 A. 必须是.h B. 不能是.h C. 可以是.h或.cpp D. 必须是.cpp5. 要使语句“p=new int1020;”正确,p应事先定义为( D )。 A. int *p; B. int *p; C. int *p20; D. int(*p)20;6. 在关键字public后面定义的成员为该类的( B )成员。 A. 私有 B. 公用 C. 保护 D. 任何7. 假定AA为一个类,a为该类私有的数据成员,若要在该类的一个成员函数中访问它,则书写格式最好为( A )。 A. a B. AA:a C. a() D. AA:a()8. 队列具有( A )的操作特性。 A. 先进先出 B. 先进后出 C. 进出无序 D. 仅进不出9. 假定AB为一个类,则执行”AB a, b(3), *p;”语句时共调用该类构造函数的次数为( D )次。 A. 5 B. 4 C. 3 D. 210. 在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是( B )。 A. 作为友元函数重载的1元运算符 B. 作为成员函数重载的1元运算符 C. 作为友元函数重载的2元运算符 D. 作为成员函数重载的2元运算符1. 当执行cout语句输出endl数据项时,将使C+显示输出屏幕上的光标从当前位置移动到_下一行_的开始位置。2. 假定x和y为整型,其值分别为16和5,则x/y和double(x)/y的值分别为_3_和_3.2_。3. strlen(”apple”)的值为_5_。4. C+程序运行时的内存空间可以分成全局数据区,堆区,栈区和_代码_区。5假定a是一个一维指针数组,则a+i所指对象的地址比a大_4 * i_字节。 6. 如果一个派生类只有一个唯一的基类,则这样的继承关系称为_单继承_。7假定AA是一个类,“AA* abc()const;”是该类中一个成员函数的原型,在该函数体中_不允许_向*this或其成员赋值。8假定用户没有给一个名为AB的类定义构造函数,则系统为其定义的构造函数为_AB()_。9假定用户为类AB定义了一个构造函数"AB(int aa) a=aa;",该构造函数实现对数据成员_a_的初始化。10. 作为类的成员函数重载一个运算符时,参数表中只有一个参数,说明该运算符有_2_个操作数。三、程序填充题,对程序、函数或类中划有横线的位置,根据题意按标号把合适的内容填写到程序下面相应标号的后面(每小题5分,共20分) 1. 打印出2至99之间的所有素数(即不能被任何数整除的数)。 #include<iostream.h> #include<math.h> void main() int i,n; for(n=2; _(1)_; n+) int temp=int(sqrt(n); /求出n的平方根并取整 for(i=2; _(2)_; i+) if(n%i=0) _(3)_; if(i>temp) cout<<n<<' ' cout<<'n' (1) n<=99 (2) i<=temp (3) break2. 下面是对按从小到大排列的有序数组an中进行二分查找x的算法,若查找成功返回该元素下标,否则返回-1。 int BinarySearch(int a,int n,int x) int low=0, high=n-1; /定义并初始化区间下界和上界变量 int mid; /定义保存中点元素下标的变量 while(low<=high) mid=_(1)_; if(x=amid) _(2)_; else if(x<amid) high=mid-1; else _(3)_; return -1; (1) (low+high)/2 (2) return mid (3) low=mid+13请补充完整如下的类定义: class A char *a; public: _(1)_ /定义无参构造函数,使a的值为空 A(char *aa) a=_(2)_; /进行动态存储分配 strcpy(a,aa); /用aa所指字符串初始化a所指向的动态存储空间 _(3)_ /定义析构函数,删除a所指向的动态存储空间 ; (1) A() a=0; 或A():a(0) (2) new charstrlen(aa)+1 (3) A() delete a;4. 一种类定义如下: class Goods private: char gd_name20; /商品名称 int weight; /商品重量 static int totalweight; /同类商品总重量 public: Goods (char*str,int w) /构造函数 strcpy(gd_name,str); weight=w; totalweight+=weight; Goods ()totalweight -= weight; char* GetN()_(1)_; /返回商品名称 int GetW()return weight; _(2)_ GetTotal_Weight() /定义静态成员函数返回总重量 _(3)_; (1) return gd_name (2) static int (3) return totalweight四、理解问答题,写出前三小题的程序运行结果和指出后两小题的程序(或函数)所能实现的功能。(每小题6分,共30分) 1. #include<iostream.h> const int T=8; void main() int i,s=0; for(i=1;i<=T;i+=2) s+=i*i; cout<<s<< ; cout<<endl; 运行结果: 1 10 35 84 2. #include<iostream.h> class CE private: int a,b; int getmax() return (a>b? a:b); public: int c; void SetValue(int x1,int x2, int x3) a=x1; b=x2; c=x3; int GetMax(); ;int CE:GetMax() int d=getmax(); return (d>c? d:c); void main() int x=5,y=12,z=8; CE ex; ex.SetValue(x,y,z); cout<<ex.GetMax()<<endl; 运行结果:123. #include<iostream.h> class A int a,b; public: A(int aa, int bb) a=aa; b=bb; float Multip(char op) switch(op) case '+': return a+b; case '-': return a-b; case '*': return a*b; default: cout<<'n'<<op<<"非法运算符!"<<endl; exit(1); /退出程序运行 ;void main() A x(10,4); char a6="+-*" int i=0; while(ai) cout<< x.Multip(ai)<<' ' i+; cout<<endl; 运行结果:14 6 40 4. #include<iostream.h> #include<stdlib.h> #include<time.h> const int N=10; int ff(int x, int y) int z; cout<<x<<'+'<<y<<'=' cin>>z; if(x+y=z) return 1; else return 0; void main() int a,b,c=0; srand(time(0); /初始化随机数序列 for(int i=0;i<N;i+) a=rand()%20+1; /rand()函数产生0-32767之间的一个随机数 b=rand()%20+1; c+=ff(a,b); cout<<"得分:"<<c*10<<endl; 程序功能:让计算机随机产生出10道20以内整数的加法题供用户计算,每道题10分,计算完成后打印出得分。5. char *f(char *s) int n=strlen(s); char* r=new charn+1; for(int i=0; i<n; i+) if(si>='a' && si<='z') ri=si-'a'+'A' else ri=si; rn=0; return r; 程序功能:根据参数s所指向的字符串,生成一个由r所指向的新字符串并返回,该字符串使s字符串中的小写字母均变为大写。五、编程题(每小题5分,共10分) 1. 按照下面函数原型语句编写一个递归函数求出并返回数组a中n个元素的平方和。 int f(int a,int n);解:int f(int a,int n) if(n=0) return 0; else return an-1*an-1+f(a,n-1); 2. 根据下面类中Sum 函数成员的原型和注释写出它的类外定义。 class AA int* a; int n; int MS; public: void InitAA(int aa, int nn, int ms) if(nn>ms) cout<<"Error!"<<endl; exit(1); MS=ms; n=nn; a=new intMS; for(int i=0; i<n; i+) ai=aai; int Sum(); /求出并返回数组a中前n个元素之和 ;解:int AA:Sum() int s=0; for(int i=1; i<n; i+) s+=ai; return s; 6