《c++模拟题(1-4).doc》由会员分享,可在线阅读,更多相关《c++模拟题(1-4).doc(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、如有侵权,请联系网站删除,仅供学习与交流c+模拟题(1-4)【精品文档】第 22 页模拟题一一、判断对错题(10%)(对,错)( )1自动变量用堆方式创建,它与块共存亡。( )2运算符+=是右结合的。( )3表达式cout99的类型为int。( )4+i是左值,但i+不是左值。( )5YIJ与*(*Y+I)+J不等价。( )6从外部看类的private 成员和protected成员有区别。( )7运算符&不可以重载。( )8基类的protected成员经过protected派生,在派生类中它变成了private成员。( )92.0/-3.0是一个正确的表达式。( )10字符12的ASCII为1
2、2。二、填空题(20%)#include typedef struct node long data; node * next;class stack private: node * head; _ stack(); stack(); void push (_); _ pop(); _ print();stack:stack() head = new _head-next = _ stack:stack()node * p;p = head;while (p)head = head-next;_p = head;void stack:push(long x)node * p = new nod
3、e;p-data = x;p-next = head-next;_ = p;coutPush x ok !next;if(p!=NULL)long x = p-data;head-next = p-next;_coutpop x ok !endl;return x;elsecoutStack is empty !next;coutStack_Topendl;while (p)coutdataendl;_; coutStack_bottomendl;三、简答题(20%)(按条列出论点)1注解。2new运算。3宏定义。4private成员。 5构造函数。四、程序设计题(50%)1写一基于文件流的程
4、序,删除C+源程序中的单行注解。要求:C+源程序文件名和删除单行注解后的文件名均在命令行中给出。2已知AN是整数数组,试以递归函数实现求N个整数之和。3请为Fraction类(分数类)定义下列重载运算符函数(注意函数原型)复合赋值运算+=。等于运算=。插入运算nextdelete p;p=p-next三、简要论述题(20%)本题共20分,每题4分。概念解释正确给2分;论述要求有两条论点,每条给1分(非参考答案中的论点只要正确同样给分)。注解。写程序者为读程序者作的说明。C+编译器把所有的注解视为空白。注解有多行注解(/* */)和单行注解(/)。注解通常用来说明程序或模块的名称、用途、编写时间
5、、编写人、变量说明和算法说明等。new运算。new是个单目运算,功能是给程序实体动态地分配空间。语法格式 X类型指针= new X类型。用new 申请空间的同时还可以进行初始化。用new 申请的空间可用delete运算收回。宏定义。宏定义就是用一个宏名字来命名一个字符串。编译预处理时宏名将被用宏体简单替换。使用宏定义可以提高程序的可读性、可修改性与可移植性。宏定义可以带参数。private成员。private成员为类成员的一种类型。private成员只能由类作用域中的函数访问。基类的private成员在派生类中也是不可见的。private成员只能通过public成员访问。构造函数。构造函数是类
6、的一种特殊成员。构造函数用来创建类的对象(实例)。构造函数具有特定的名字与类名相同。构造函数可以重载。四、程序设计题(50%)本题共50分。(第1、2题各10分;第3题有3小题,每小题10,分共计30分。)每题评分细则:函数原型正确3分(函数返回值类型1分,函数参数类型和个数2分)。函数总体结构正确4分(函数的总体结构指主要的循环结构和选择结构)。其他3分(实现的细节)。1#include #include void main(int argc,char * argv)if (argc!=3) exit(1);char c0,c1= ;int k=1;ifstream in(argv1,ios
7、:in|ios:binary);ofstream out(argv2,ios:out|ios:binary);while (!in.eof()in.read(&c0,1);if( k&c0=/ & c1=/) k=0;if( !k&c0=x0d ) k=1;if( k&c1=/ & c0!=/) out.write(&c1,1);if( k&c0!=/) out.write(&c0,1);c1=c0;in.close();out.close();2int tga(int *a,int n)if(n1) return (0);else return(an-1+tga(a,n-1);3fracti
8、on& fraction:operator +=(fraction & f)fz = fz*f.fm+fm*f.fz;fm = fm*f.fm;return *this;int operator =(fraction & f1,fraction & f2)if (f1.fz=f2.fz & f1.fm=f2.fm)return 1;elsereturn 0;ostream & operator(ostream & os,fraction & f)osf.fz/f.fmendl;return os;模拟题二一、判断对错题(10分)(对,错)( )1在类定义中不允许对所定义的数据成员进行初始化。(
9、 )2程序中不能直接调用构造函数,在创建对象时系统自动调用构造函数。( )3从外部看类的private 成员和protected成员没有区别。( )4可以将派生类对象赋给基类对象,也可以将基类对象赋给派生类对象。( )5构造函数和析构函数都不能为虚函数。( )6+按列优先存放数组元素。( )71/2的值等于0.5。( )8基类的protected成员经过protected派生后,在派生类中仍为protected成员。( )9所有运算符都可以重载。( )10表达式cout99的类型为int。二、单项选择题(20分) 1下列有关类的说法不正确的是( )。A. 类是一种用户自定义的数据类型B. 只有
10、类中的成员函数才能存取类中的私有数据C在类中,如果不作特别说明,所有的数据均为私有类型D. 在类中,如果不作特别说明,所有的成员函数均为公有类型2在C+程序中,对象之间的相互通信通过( )。 A.继承实现 B.调用成员函数实现 C.封装实现 D.函数重载实现3对于任意一个类,析构函数的个数有( )。A.0 B.1 C.不确定 D.4在下列各函数中, 不是类的成员函数的是()。A. 构造函数 B. 析构函数 C. 友元函数 D. 拷贝构造函数5在多基继承的构造函数定义中,几个基类的构造函数之间用( )分隔。: ;,:6若类和类的定义如下:class Aint i,j;public:void ge
11、t();class B: A int k;public:void make(int );void B:make(int j) k = i*j;则上述定义中,非法的表达式是( )。A.void get(); B.int k; C.void make(int ) D.k=i*j;7已知:print函数是一个类的常成员函数,它无返回值,下列表示中正确的是()。A.const void print() B.void const print() C.void print(const) D.void print()const8在类外部可以用p.a的形式访问派生类对象p的基类成员a,则a应是( )。A.私有
12、继承的公有成员 B.公有继承的私有成员C.公有继承的保护成员 D.公有继承的公有成员9下列关于运算符重载的描述中,正确的叙述是( )。A. 运算符重载可以改变运算数的个数B. 运算符重载可以改变语法结构C. 运算符重载可以构造新的运算符D. 运算符重载不可以改变优先级和结合性10下列带缺省值参数的函数说明中,正确的说明是( )。Aint Fun(int x=1,int y=2,int z);Bint Fun(int x,int y=2,int z=3);Cint Fun(int x,int y=2,int z);Dint Fun(int x=1,int y,int z=3);三、完成程序题:根
13、据题目要求,完成程序填空。(20分)1本程序在3位正整数中寻找符合下列条件的整数:它既是完全平方数,又有两位数字相同,例如144,676等。用程序找出所有满足上述条件的3位数并输出。int flag(int a,int b,int c) return !( _)*(_)*(_);void main()int n,k,a,b,c;for(k=1;k+) _; if(n999)_;a=n/100;b=(n/10)%10;c=n%10;if(flag(a,b,c) coutn=k*kendl;2类CPoint中的成员函数Init的功能是用已知对象给另一对象赋值,请将其补充完整。 class CPoi
14、ntint x,y;public:CPoint(int i,int j) x = i; y = j; void Init(CPoint & k)if(_) return;/防止自身赋值 _=k;3. 补充以下类,使其能正确运行。#include class Pprivate:int x1,x2;static int y; public:P(_) x1 = i; x2 = j; _=0; /对静态成员y赋值void main()P data20;4在下面程序横线处填上适当的字句,使其输出结果为0,56,56。#include class basepublic:int func() return
15、0; class derived:public basepublic:int a,b,c;setValue(int x,int y,int z) a = x; b = y; c = z; int func() return(a+b)*c; void main() base b;derived d;coutb.func(),;d.setValue(3,5,7);coutd.func(),;base& pb=d;coutpb.func()end1;四、程序分析题:给出下面程序输出结果。(15分)1 include int f(int i)return -i; int g(int & i) retu
16、rn -i;void main( )int a,b,c,d,e; a = b = c = d = 10; a += f(g(a); b += g(e=g(b); c += g(e=f(c); d += f(f(d);couta=aendl;coutb=bendl; coutc=cendl;coutd=dendl;coute=eendl; 输出为:2 #include class Sampleint x; public: Sample(int a) x = a; friend double square(Sample & s); double square(Sample & s) return
17、s.x*s.x; void main()Sample s1(20);Sample s2(30); couts1.square=square(s1)endl; couts2.square=square(s2)endl;输出为:3#include class base1int x;public:base1(int i) x = i; coutbase1 constructor called!endl; base1()coutbase1 destructor called!endl;class base2int y;public:base2(int i) y = i; coutbase2 const
18、ructor called!endl; base2()coutbase2 destructor called!endl;class derivate:public base2,public base1public:derivate(int i,int j):base1(i),base2(j)coutderivate constructor called!endl;derivate()coutderivate destructor called!endl;void main()derivate d(3,4);输出为:五、程序设计题(35分)1(10分)写一递归函数计算F(n)=1+ + 2(10
19、分)写一基于文件流的程序将文件中大写字母转换成小写字母。要求:输入和输出文件名均在命令行中给出。3(15分)编写一个程序输入3个学生的英语和计算机成绩,并按总分从高到低排序。要求设计一个学生类Student,其定义如下:class Studentint english,computer,total;public:void getscore(); /获取一个学生的成绩void display(); /显示一个学生的成绩void sort(Student *); /将若干个学生按总分从高到低排序Student();模拟题二参考答案一、判断对错题(10分,每题1分)(对,错)1. 2. 3. 4.
20、5. 6. 7. 8. 9. 10. 二、单项选择题(20分,每题2分) 1 .D 2 .B 3. B 4. C 5. C 6. D 7. D 8. D 9. D 10. A 三、完成程序题:根据题目要求,完成程序填空。(20分)(前四空(指:1. )每空1分,其余每空2分)1. a-b a-c b-c n=k*k continue break2. this= =&k *this3. int i=0, int j=0(说明:默认值可为任何合法的整形值) int p:y4. virtual void四、程序分析题:给出下面程序输出结果。(15分)1(5分,每个1分)a=17 b=17 c=18
21、d=18 e=82.(4分,每个2分) s1.square=400s2.square=9003. (6分,每个1分)base2 constructor called! base1 constructor called!derivate constructor called!derivate destructor called!base1 destructor called!base2 destructor called!五、程序设计题(35分)第1、2题每题评分细则:函数原型正确3分(函数返回值类型1分,函数参数类型和个数2分)。函数总体结构正确4分(函数的总体结构指主要的循环结构和选择结构)
22、。其他3分(实现的细节)。第3题每题评分细则:函数原型正确2分(函数返回值类型1分,函数参数类型和个数1分)。函数总体结构正确2分(函数的总体结构指主要的循环结构和选择结构)。其它2分(实现的细节)。1(10分)double sum(int n)if(n=1) return 1;return sum(n-1)+(double)1/n;2(10分):#include #include void main(int argc,char * argv)if(argc!=3) cerrwrong!=A & c=Z ) c = c+32;out.write(&c,1);in.close();out.clo
23、se();:void main(int argc,char * argv)if (argc!=3) cerrwrong!=A & c=Z ) c+=32;outc;in.close();out.close();3(15分)#include class Studentint english,computer,total;public:void getscore(); /获取一个学生成绩void display(); /显示一个学生成绩void sort(Student *); /将若干个学生按总分从高到低排序Student();void Student:getscore()coutenglish
24、;coutcomputer;total=english+computer;void Student:sort(Student *p)int tmp,i,j;for(j=0;j2;j+)for(i=0;i2;i+) if(totaltotal) tmp=total;total=p-total;p-total=tmp; tmp=english;english=p-english;p-english=tmp;tmp=computer; computer=p-computer;p-computer=tmp;void Student:display() cout英语=english计算机=compute
25、r总分=totalendl;void main()Student * A3;for(int j=0;j3;j+)Aj=new Student;cout学生j+1getscore();int i;for(j=0;j2;j+)for(i=0;isort(Ai+1);coutendl排序结果如下:endl;for(i=0;idisplay();模拟题三一、判断对错题(10分)(对,错)( )1构造函数的访问属性可以是public的,但不可以是protected和private。( )2析构函数可以被显式调用,也可以被系统自动调用。( )3可以用派生类对象地址来初始化一个指向基类对象的指针。( )4C
26、+有三种存储类。( )5从派生类看private成员和protected成员没有区别。( )6重载运算符只能采用友元函数方式。( )7C+按行优先存放数组元素。( )8YIJ与*(*(Y+I)+J)等价。( )9protected派生使基类的非私有成员的访问属性在派生类中都降一级。( )10表达式cout99的类型为ostream。二、单项选择题(20分) 1下列有关类和对象的说法不正确的有( )。A. 对象是类的一个实例B. 任何一个对象只能属于一个具体的类C. 一个类只能有一个对象D. 类与对象的关系和数据类型和变量的关系相似2C+语言建立类层次结构是通过( )。A、类的嵌套 B、类的继承
27、 C、虚函数 D、抽象类 3对于任意一个类,构造函数的个数至少有( )。A.0 B.1 C.2 D.34下列定义中,定义指向数组的指针p的是( )。A.int *p5 B.int (*p)5 C.(int *)p5 D.int *p5友元的作用是( )A.提高程序的运用效率 B.加强类的封装性C.实现数据的隐藏性 D.增加成员函数的种类6派生类的对象对它的基类成员中( )是可以访问的A.私有继承的公有成员 B.公有继承的私有成员C.公有继承的保护成员 D.公有继承的公有成员7设置虚基类的目的是( )。A.简化程序 B.提高运行效率 C.消除二义性 D.减少目标代码8下述静态数据成员的特性中,错
28、误的是( )。A.说明静态数据成员时前边要加修饰符static B.静态数据成员要在类体外进行初始化C.引用静态数据成员时,要在静态数据成员名前加上和作用域运算符 D.静态数据成员不是所有对象所共用的9下列运算符中,在C+里不能重载的是( )。A.& B. C. : D. new10如果一个类至少有一个纯虚函数,那么就称该类为( )。A抽象类 B虚基类 C 派生类 D以上都不对三、完成程序题:根据题目要求,完成程序填空。(20分)1函数merge将两个从小到大的有序数组a和b合并生成一个新的从小到大的有序整数序列,其中形参n和m分别是数组a和b的元素个数,请将其补充完整。void merge(
29、int a,int n,int b,int m,int *c) int i = 0,j = 0; while(in & jm) *c+ = aibj?ai+:bj+; while(_) *c+ = ai+; while(_) *c+ = bj+;2阅读以下程序,其中函数distance是求两个点之间的距离。请填空,使其输出结果为5。#include #include class Pointint x,y;public:Point(int i = 0,int j =0 )_ _double distance(Point p,Point q);double distance(Point p,Poi
30、nt q) double d; d = (p.x-q.x)*(p.x-q.x)+(p.y-q.y)*(p.y-q.y); return sqrt(d);void main() Point p(1,1),q(4,5); coutdistance(p,q)endl;3补充以下程序,使其输出结果为20,40。#include class A_int x;public:A(int x=20) _;class B:public A int y;public:B(int i=30,int j=40) _void print()_void main() B b; b.print();4在下面程序横线处填上适
31、当的语句,使其输出结果为0,56,56。include class basepublic: _ int func() return 0; class derived:public basepublic: int a,b,c; void setValue(int x,int y,int z) a = x; b = y; c = z; int func()return(a+b)*c;void main()base b;derived d;coutb.func(),;d.setValue(3,5,7);coutd.func(),; _coutfunc( )end1;四、程序分析题:给出下面程序输出结
32、果。(15分)1#include class Bpublic:B() coutB:B() construction.endl; virtual B() coutB:B() destruction.endl; class D:public B public: D(int i)coutD:D() construction.endl; buf=new chari; virtual D() delete buf; coutD:D() destruction.endl; private: char *buf; void fun(B * a) delete a; void main() B * a = n
33、ew D(25); fun(a); 输出为:2#include class A int x;public:A(int i = 10) coutConstructor called!endl; x=i; A(A &a) coutCopy constructor called!endl;x=a.x; A() coutDestructor called!endl; void print() coutxendl; void main() A a; A b = a; b.print();输出为:3#include class Apublic:A() coutA constructor called!en
34、dl; void f() coutf() is called in A!endl; class B :public Apublic:B() coutB constructor called!endl; virtual void f() coutf() is called in B!endl; class C:public Bpublic: C()coutC constructor called!endl;void f()coutf() is called in C!f(); pb-f(); 输出为:五、程序设计题(35分)1(10分)按下述递归定义编写一个计算幂级数的递归函数 2(10分)写一
35、基于文件流的程序将文件中小写字母转换成大写字母。要求:输入和输出文件名均在命令行中给出。3(15分)下列shape类是一个表示形状的抽象类,area( )为求图形面积的函数,total( )则是一个通用的用以求不同形状的图形面积总和的函数。请从shape类派生三角形类(triangle)、矩形类(rectangle),并给出具体的求面积函数。 class shapepublic: virtual float area( )=0; float total(shape *s ,int n) float sum=0.0; for(int i=0;iarea( ); return sum; 模拟题三参考答案一、判断对错题(10分,每题1分)(对,错)1 2 3 4 5 6 7 8 9 10二、单项选择题(20分,每题2分) 1C 2B 3B 4B 5A 6D 7C 8D 9C 10A三、完成程序题:根据题目要求,完成程序填空。(20分,每空2分)