c++模拟题(1-4).doc

上传人:w****2 文档编号:6553712 上传时间:2020-02-28 格式:DOC 页数:26 大小:91.50KB
返回 下载 相关 举报
c++模拟题(1-4).doc_第1页
第1页 / 共26页
c++模拟题(1-4).doc_第2页
第2页 / 共26页
c++模拟题(1-4).doc_第3页
第3页 / 共26页
点击查看更多>>
资源描述
模拟题一一、判断对错题(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为12。二、填空题(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 node;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写一基于文件流的程序,删除C+源程序中的单行注解。要求:C+源程序文件名和删除单行注解后的文件名均在命令行中给出。2已知AN是整数数组,试以递归函数实现求N个整数之和。3请为Fraction类(分数类)定义下列重载运算符函数(注意函数原型)复合赋值运算+=。等于运算=。插入运算nextdelete p;p=p-next三、简要论述题(20%)本题共20分,每题4分。概念解释正确给2分;论述要求有两条论点,每条给1分(非参考答案中的论点只要正确同样给分)。注解。写程序者为读程序者作的说明。C+编译器把所有的注解视为空白。注解有多行注解(/* */)和单行注解(/)。注解通常用来说明程序或模块的名称、用途、编写时间、编写人、变量说明和算法说明等。new运算。new是个单目运算,功能是给程序实体动态地分配空间。语法格式 X类型指针= new X类型。用new 申请空间的同时还可以进行初始化。用new 申请的空间可用delete运算收回。宏定义。宏定义就是用一个宏名字来命名一个字符串。编译预处理时宏名将被用宏体简单替换。使用宏定义可以提高程序的可读性、可修改性与可移植性。宏定义可以带参数。private成员。private成员为类成员的一种类型。private成员只能由类作用域中的函数访问。基类的private成员在派生类中也是不可见的。private成员只能通过public成员访问。构造函数。构造函数是类的一种特殊成员。构造函数用来创建类的对象(实例)。构造函数具有特定的名字与类名相同。构造函数可以重载。四、程序设计题(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: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);3fraction& 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在类定义中不允许对所定义的数据成员进行初始化。( )2程序中不能直接调用构造函数,在创建对象时系统自动调用构造函数。( )3从外部看类的private 成员和protected成员没有区别。( )4可以将派生类对象赋给基类对象,也可以将基类对象赋给派生类对象。( )5构造函数和析构函数都不能为虚函数。( )6+按列优先存放数组元素。( )71/2的值等于0.5。( )8基类的protected成员经过protected派生后,在派生类中仍为protected成员。( )9所有运算符都可以重载。( )10表达式cout99的类型为int。二、单项选择题(20分) 1下列有关类的说法不正确的是( )。A. 类是一种用户自定义的数据类型B. 只有类中的成员函数才能存取类中的私有数据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 get();/.;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.私有继承的公有成员 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);三、完成程序题:根据题目要求,完成程序填空。(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 CPointint 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 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) return -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 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 constructor 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分)写一基于文件流的程序将文件中大写字母转换成小写字母。要求:输入和输出文件名均在命令行中给出。3(15分)编写一个程序输入3个学生的英语和计算机成绩,并按总分从高到低排序。要求设计一个学生类Student,其定义如下:class Studentint english,computer,total;public:void getscore(); /获取一个学生的成绩void display(); /显示一个学生的成绩void sort(Student *); /将若干个学生按总分从高到低排序Student();模拟题二参考答案一、判断对错题(10分,每题1分)(对,错)1. 2. 3. 4. 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 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分(函数的总体结构指主要的循环结构和选择结构)。其他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.close();: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;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计算机=computer总分=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+有三种存储类。( )5从派生类看private成员和protected成员没有区别。( )6重载运算符只能采用友元函数方式。( )7C+按行优先存放数组元素。( )8YIJ与*(*(Y+I)+J)等价。( )9protected派生使基类的非私有成员的访问属性在派生类中都降一级。( )10表达式cout99的类型为ostream。二、单项选择题(20分) 1下列有关类和对象的说法不正确的有( )。A. 对象是类的一个实例B. 任何一个对象只能属于一个具体的类C. 一个类只能有一个对象D. 类与对象的关系和数据类型和变量的关系相似2C+语言建立类层次结构是通过( )。A、类的嵌套 B、类的继承 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下述静态数据成员的特性中,错误的是( )。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(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,Point 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在下面程序横线处填上适当的语句,使其输出结果为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;四、程序分析题:给出下面程序输出结果。(15分)1#include class B public: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 = new 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!endl; 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分)写一基于文件流的程序将文件中小写字母转换成大写字母。要求:输入和输出文件名均在命令行中给出。3(15分)下列shape类是一个表示形状的抽象类,area( )为求图形面积的函数,total( )则是一个通用的用以求不同形状的图形面积总和的函数。请从shape类派生三角形类(triangle)、矩形类(rectangle),并给出具体的求面积函数。 class shape public: 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分)1 in jx=x(或 A:x=x) y=j;(或 :y(j) 或 :A(20)y=j; 或 A:x=20;y=j; ) (说明:其他任何可使程序正确运行得出正确结果的答案均可,但 :A(i)y=j;只得1分) coutA:x”,”yendl;4 virtual base *pb=&d;四、程序分析题:给出下面程序输出结果。(15分)1.(5分) B:B() construction.D:D() construction.D:D() destruction.B:B() destruction.2.(5分) Constructor called!Copy constructor called!10Destructor called!Destructor called!3.(5分) A constructor called!B constructor called!C constructor called!f() is called in A!f() is called in C!五、程序设计题(35分)1.(10分)double func(double x,int n) if(n=0) return 1; return func(x,n-1)*x;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.close();:void main(int argc,char * argv)if (argc!=3)cerrwrong!=a&c=z) c-=32;outc;in.close();out.close();3(15分)class Triangle:public Shapepublic:Triangle(double h,double w) H = h; W = w; double Area() constreturn H*W*0.5;private:double H,W; class Rectangle:public Shapepublic:Rectangle(double h,double w) H = h; W = w; double Area()const return H*W; private:double H,W; 模拟题四一、判断对错题(10%)(对,错)( )1函数是程序中被命名的封装实体。( )2表达式cout99的类型为ostream&。( )3运算符“,”是右结合的。( )4XIJK与*(*(*X+I)+J)+K)等价。( )5+i和i+都不是左值。( )6表达式P=0?P+=1:P+=2不正确。( )7字符x12的ASCII为10。( )8重载运算符不能采用成员函数方式。( )9基类的public成员经过protected派生,在派生类中它变成了protected成员。( )10从类内部看private 成员和public成员没有区别。二、填空题(20%)#include const int n = 3;class queue private: int q_; int len; int rear; _ queue(); queue(); void in (_); int out(); void print();_queue()_0;rear = 0;queue:queue()void queue:in(int x)if(_) qrear = _; rear = (rear+1)%n; len+; coutx in queue!endl; else coutQueue is fill !endl;int queue:out()if(_)int x = q(rear-len+n)%n;_;coutx out queue!endl;return x;elsecoutQueue is empty !endl;return 0; void queue:print() coutQueue_Frontendl;int i = (rear-len+n)%n;for (int j=0; jlen; _)coutqiendl;i = (i+1)%n; coutQueue_Rearendl;三、简要论述题(20%)(按条列出论点)(1)enum类型(2)函数模板(3)?:运算符(4)函数重载(5)public派生四、程序设计题(50%)1写一基于文件流的程序,合并两个文件,合并的结果放在第三个文件中。要求:三个文件名均在命令行中给出。class fractionprivate:int fz; /分子int fm; /分母public:;模拟题四参考答案一、判断对错题(10%)本题共10分,每题1分。 二、填空题(20%) 本题共20分,每空2分。答案只少“;”或“:”等符号的给1分。npublic:intqueue:len=len0len-j+三、简答题(20%)本题共20分,每题4分。概念解释正确给2分;论述要求有两条论点,每条给1分(非参考答案中的论点只要正确同样给分)。1 enum类型。enum是C+中的一种用户定义类型。基本格式为:enum 枚举类型名 枚举成员表列。枚举常量实际上是整型量的名称。使用枚举常量使程序容易理解,同时迫使编译器加以检查,以提高程序的可靠性。2函数模板。类型参数化的函数。为了使用函数必须将其模板参数实例化。若无实例化,则使用隐式的模板函数。函数模板对某种类型不适用时可进行异常处理。3?:运算符。?:为C+中唯一的一个三目运算,条件运算。?:运算为右结合的。?:的运算级很低,使用时易出现副作用。?:可代替简单的if 语句。4函数重载。多个函数使用一个函数名。编译器根据参数的类型、个数和次序来自动选择应调用哪个函数。使用权函数重载使用权程序更容易理解。不能利用函数返回值的类型来区别重载函数5public派生。派生类的一种方式。基类的private成员即使是public派生,在派生类中仍是不可见的。public派生使基类的非private成员的访问属性在派生类中保持不变。public派生不能省略,缺省的派生方式为private派生。四、程序设计题(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!=4) exit(1);char c;fstream in1(argv1,ios:in|ios:binary);fstream in2(argv2,ios:in|ios:binary);fstream out(argv3,ios:out|ios:binary);while (!in1.eof()in1.read(&c,1);out.write(&c,1);while (!in2.eof()in2.read(&c,1);out.write(&c,1);in1.close();in2.close();out.close();
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!