《东南大学2009-2010学年C++(下)期末考试模拟试题(共9页).doc》由会员分享,可在线阅读,更多相关《东南大学2009-2010学年C++(下)期末考试模拟试题(共9页).doc(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上2008-2009学年C+(下)期末考试模拟试题一、选择题(每题2分,共30分)1. 下列程序段的运行结果是( )。char c=”tv0willn”;coutstrlen(c);A. 4B. 3C. 9D. 字符串中含有非法字符,输出结果不确定2. 已知定义类A,该类的构造函数的参数都没有缺省值。执行语句:A a1(2) ,a2(1,2), *p=new A3;则自动调用该类缺省的构造函数的次数为( )。A. 1B. 2C. 3D. 53. 下列叙述正确的是( )。A. 虚函数是一个static类型的成员函数B. 虚函数是一个非成员函数C. 包含虚函数的基类为虚基类
2、D. 包含存虚函数的基类为抽象类4. 下列关于赋值兼容性规则的叙述不正确的是( )。A. 派生类的对象可以赋值给基类的对象B. 基类的对象可以赋值给派生类的对象C. 派生类的对象可以初始化基类对象的引用D. 可以将派生类对象的地址赋值给其基类的指针变量5. 设有定义int a3=1,3,5,7,9,11,13,15,17;int *p=a2;则*(p+1)的值为( )。A. 15B. 7C. 14B. 66. C+中多态性包括两种:编译时的和运行时的。运行时多态性是通过( )实现的。 函数重载 运算符重载 类继承关系 动态链接 虚函数A. 和 B. 和 C. 和 D. 和7. 关于动态内存分配
3、,对delete运算符的下列说法中,( )是错误的。A. 应与new运算符配合使用。B. 可以在类的成员函数中使用。C. 对同一个指针变量可任意多次使用该运算符。D. 若a是一个二维数组,则delete a; 可删除a所占用的存储空间。8. 设int x; int *p2=&x, *p1=&x; *p1=a; *p2=*b; 则变量a和b的类型分别是( )。A. int 和int B. int *和int C. int和int *D. int *和int *9. 下列关于成员函数的叙述不正确的是( )。A. 成员函数一定是内联函数B. 成员函数可以重载C. 成员函数可以设置参数的默认值D. 成
4、员函数可以是静态的10. 以下不属于类的访问权限的是( )。A. publicB. protectedC. staticD. private11. 若要使用ifstream流定义一个流对象并打开一个文件时,应在程序开始使用#include命令,使之包含( )。A. iostream.hB. fstream.hC. stdio.hD. strstream.h12. 下列叙述不正确的是( )。A. 对象之间可以相互赋值B. 对象可以用作函数参数C. 对象可以用作数组的元素D. C+中可以有指向对象的指针13. C+中不能被派生类继承的是( )。A. 虚函数B. 析构函数C. 静态成员函数D. 运算
5、符重载函数14. 不属于构造函数的特点是( )。A. 具有与类名相同的函数名B. 返回类类型返回值C. 允许重载D. 在定义类的对象时自动调用15. 类型相同的两个指针不能进行的运算是( )。A. +B. -C. =D. =二、填空题(每题2分,共20分)1. 函数参数传递方式有三种,分别为:值传递、地址传递和( )。2. 面向对象的程序设计的三大特征是:( )、继承性和多态性。3. 假定A为一个类,则语句A(A &x);是此类( )构造函数的原型说明。4. 在类的继承与派生中,缺省的继承方式是( )。5. C+的两种多态性分别是( )多态性和( )多态性。6. 运算符重载有两种实现方法,一种
6、是通过友元函数来实现,另一种通过( )函数来实现。7. 根据数据的组织形式不同,可将文件分为二进制文件和( )文件。8. 若希望类中的成员只能被该类的成员函数及该类的派生类的成员函数访问,则应加上访问权限:( )。9. 假定类A中有一个公用属性的静态数据成员b,在类外不通过对象名访问该成员b的写法为( )。三、阅读程序题(每题5分,共30分)1. 下列程序运行结果为( )。 #include #include char s(char *w,int y)char t, *s1, *s2;s1=w;s2=w+y+5;while(s1s2)t=*s1+;*s1=*s2-;*s2=t;return *
7、s1;return *s1+2;void main(void)char *p=123;couts(p,strlen(p);2. 下列程序的输出结果是( )。#include class Apublic:int X;A(int x)X=x*x;class Sint x;A a;public:S(int b,int c):a(c)x=b+a.X;void show()coutx=xendl;void main(void)S s1(2,3);s1.show();3. 下列程序的运行结果是( )。#include class Apublic:int n;A()coutA;class B:public
8、Apublic:B()coutB;class C:public BA a;public:C():a(),B()coutC;void main(void)C c;4. 下列程序的运行结果是( )。#include class Baseprotected:int *p;public:Base(int a=0)p=new int (a);Base()delete p;virtual void print()cout*pendl;class Derived:public Basestatic int y;public:Derived(int b=0)*p=b;y+;void print()cout*p
9、,yprint();Derived d1(20);d1.print();5. 下列程序的运行结果是( )#include class Bint a,b;public:B(int aa=0,int bb=0)a=aa;b=bb;void operator +();void operator +(int);void show()coutatb;void B: operator +()a+=2;b+=5;void B: operator +(int)a+=5;b+=2;void main(void)B x(3,5);x+;x.show();6. 下列程序的运行结果是( )。#include clas
10、s Apublic:A(int n)num=n;int compare(A a)if(this-num=a.num)return 1;else return 0;private:int num;void main(void)A aa(5);A bb(10);A cc(5);coutpare(bb)t;coutpare(aa)endl;四、完善程序(每空2分,供20分)1. 下面的程序中定义了圆类Circle、长方形类Rect、圆角长方形类RoundRect,其中RoudRect共有继承于Circle和Rect类。试完成程序。#include #include class Circledoubl
11、e radius;public:Circle(double r): double area()return 3.14*radius*radius;class Rectdouble width, height;public:Rect(double w, double h)width=w; height=h;double area()return height*width;class RoundRect: public Circle, Rectchar color5;public:RoundRect( ):Circle(r),Rect(w,h)strcpy(color,c);char *getco
12、lor()return color;void main(void)RoundRect rr(0.8,1,0.25,白色);coutrr.getcolor()endl;2. 下列程序通过重载运算符“*”,直接实现两个一维数组对应元素相乘运算。设数组a,b分别为:int a10=1,2,3,4,5,6,7,8,910;int b10=1,2,3,4,5,6,7,8,9,10;相乘后的结果为1,4,9,16,25,36,49,64,81,100。同时通过重载运算符“=”,直接实现两个一维数组的赋值运算。试完善程序。#include #include class Aint x10;public:A()
13、for(int i=0;i10;i+)xi=0;A(int *p)for(int i=0;i10;i+) A operator *(A a)A t;for(int i=0;i10;i+) return t;A operator =(A a)for(int i=0;i10;i+) return *this;void show()for(int i=0;i10;i+)coutxit;void main(void)int a10=1,2,3,4,5,6,7,8,9,10;int b10=1,2,3,4,5,6,7,8,9,10;A a1(a),a2(b),a3;a3=a1*a2;a3.show();
14、3. 下面的程序的功能是比较两个字符串是否相等,若相等返回1,否则返回0。请完成程序。#include int f(char *s1, char *s2)char *p=s1,*q=s2;while( )q+;p+;return ( );void main(void)char s1100,s2100;cin.getline(s1,100);cin.getline(s2,100);coutnext=head; return head;if(head-data=p-data)/非空链表,p的数据项比首节点的数据项小,插入到链首p-next=head; head=p; return head;p2=
15、p1=head;while( p2-next&p2-datadata )/找到要插入的位置p1=p2;p2=p2-next;if(p2-datadata)/p代表的结点的数据项最大,插入到表尾p2-next=p;p-next=0;else/插入到p1和p2指向的结点之间 p-next=p2;p1-next=p; 五、上机编程题(每题50分,共100分)1. 建立一个str类,完成对字符串循环左移的功能。即从第二个字符开始,以后的每个字符都依次前移一个字符,而原来的第一个字符放在串中的最后一个字符。当要平移m个字符时,则要进行m次的循环左移。例如:“ABCD”循环左移2个字符后为“CDAB”。要求如下:(1)私有数据成员char * w;指向待左移字符串。int m, len; 分别用于存储循环左移的次数及字符串的长度。(2)公有成员函数构造函数str(char *p, int n, int k):初始化各数据成员。void move():循环左移。void show():输出字符串数据成员(3)编写一个程序测试该类,使用以下测试数据:a=”ABCD”,左移3个字符。要求输出字符串。2. 请将压缩包中的文本文件in.dat的内容读入到数组A33中,并将转置后的数组A的内容写入到文本文件out.dat中。请完成程序。专心-专注-专业
限制150内