您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 清华大学计算机系C++期末考试题及答案
C++期末考试题一、填空题(25小题,共50分)(以下每小题1分,共10分)1.在C++中,函数的参数有两种传递方式,它们是值传递和____________。地址或指针或引用传递2.当一个成员函数被调用时,该成员函数的___________指向调用它的对象。this指针3.在基类和派生类中,派生类可以定义其基类中不具备的数据和操作。对两个有相同名字的数据成员进行访问时,如果没有___________,对此数据成员的访问将出现歧义。作用域分隔符限定时4.拷贝构造函数使用___________作为参数初始化创建中的对象。引用5.在公有继承的情况下,基类数据成员在派生类中的访问权限___________。保持不变6.描述命题A小于B或小于C的表达式为___________。AB||AC7.用new申请某一个类的动态对象数组时,在该类中必须能够匹配到___________构造函数,否则应用程序会产生一个编译错误。没有形参的或缺省参数8.静态数据成员在类外进行初始化,且静态数据成员的一个拷贝被类的所有对象___________。共享9.为了避免可能出现的歧义,C++对if…else语句配对规则规定为:else总是与___________配对。与最近的if10.设inta=3,b=4,c=5;,表达式(a+b)c&&b==c的值是___________。0(以下每小题2分,共20分)11.面向对象的程序设计有四大特征,它们是抽象、封装、___________、___________。继承、多态12.在C++中,定义重载函数时,应至少使重载函数的参数个数或参数类型___________;在基类和派生类中,成员函数的覆盖是指___________。不同派生类成员函数与在基类被覆盖的成员函数名、参数个数、参数类型和返回值类型均相同13.构造函数与析构函数除功能不同外,在定义形式上,它们的区别还包括构造函数名与类名相同,而析构函数名是在类名前加一个~、___________、___________。析构函数没有参数、析构函数可以定义为虚函数14.动态联编要满足两个条件,它们是___________、___________。被调用的成员函数是虚函数、用指针或引用调用虚函数15.在C++类中,有一种不能定义对象的类,这样的类只能被继承,称之为___________,定义该类至少具有一个___________。抽象类纯虚函数16.在C++类中,const关键字可以修饰对象和成员函数,const对象不能___________,const成员函数不能___________。被修改修改类数据成员17.举出C++中两种用户自定义的数据类型:___________、___________。类、枚举18.C++中没有字符串类型,字符串是通过___________来表示的,每一个字符串都有一个结尾字符___________。字符数组\019.C++中没有输入输出语句,输入输出是通过___________实现的,写出一条打印整型变量n的输出语句:___________。输入输出库coutn;20.举出C++中两种代码复用的方式:___________、___________。继承、复用。(以下每小题4分,共20分)21.下面程序的运行结果是____3_______。#includestdio.hvoidmain(){chara='a',b='j';floatx;x=(b-a)/('F'-'A');printf(%d\n,(int)(3.14*x));}22.下面程序的运行结果是___________。#includeiostream.hvoidmain(){inti=1;while(i=15){i++;if(i%3!=2)continue;elsecouti=iendl;}}结果:258111423.下面程序的运行结果是___________。#includeiostream.hclasstest{private:intnum;floatfl;public:test();intgetint(){returnnum;}floatgetfloat(){returnfl;}~test();};test::test(){coutInitalizingdefaultendl;num=0;fl=0.0;}test::~test(){coutDesdtructorisactiveendl;}voidmain(){testarray[2];coutarray[1].getint()array[1].getfloat()endl;}结果:InitalizingdefaultInitalizingdefault00DesdtructorisactiveDesdtructorisactive24.下面程序的运行结果是___________。#includeiostream.hclassA{public:A(){coutA::A()called.\n;}virtual~A(){coutA::~A()called.\n;}};classB:publicA{public:B(inti){coutB::B()called.\n;buf=newchar[i];}virtual~B(){delete[]buf;coutB::~B()called.\n;}private:char*buf;};voidfun(A*a){deletea;}voidmain(){A*a=newB(15);fun(a);}结果:A::A()called.B::B()called.B::~B()called.A::~A()called.25.下面程序的运行结果是___________。#includestdio.hinta[]={1,3,5,7,9};int*p[]={a,a+1,a+2,a+3,a+4};voidmain(){printf(%d\t%d\t%d\n,a[4],*(a+2),*p[1]);printf(%d\t%d\t%d\n,**(p+1)+a[2],*(p+4)-*(p+0),*(a+3)%a[4]);}结果:953847二、问答题(每小题5分,共20分)1.若程序员没有定义拷贝构造函数,则编译器自动生成一个缺省的拷贝构造函数,它可能会产生什么问题?解答要点:当对象含有指针数据成员,并用它初始化同类型的另一个对象时,缺省的拷贝构造函数只能将该对象的数据成员复制给另一个对象,而不能将该对象中指针所指向的内存单元也复制过去。这样,就可能出现同一内存单元释放两次,导致程序运行出错。2.简述成员函数、全局函数和友元函数的差别。解答要点:以下几点必须说清楚:成员函数是在类内部定义的,作用域在类的内部,成员函数可以访问类的数据成员(公有、保护和私有数据成员),可以调用该类的其它成员函数(公有、保护和私有成员函数),可以调用全局函数。如果友元函数是另一个类的公有成员函数,则该类的成员函数也只能通过那个类的对象调用,不能调用那个类的保护和私有成员函数。非本类成员函数(其它类成员函数或全局函数)可以通过该类的对象访问该类的公有数据成员和调用该类的的公有成员函数。不是在类中定义的成员函数都是全局函数。如果某一个函数(全局函数或类的成员函数)定义为另一个类的友元函数,需要在那个类中用friend关键字声明,友元函数并不是类的成员,它的定义自然是在那个类的外面。3.简述结构化的程序设计、面向对象的程序设计的基本思想。解答要点:结构化的程序设计将数据和对数据的操作分离,程序是由一个个的函数组成的,面向对象的程序设计将数据和操作封装在一起,程序是由一个个对象组成的,对象之间通过接口进行通信,它能够较好地支持程序代码的复用。4.结构struct和类class有什么异同?解答要点:struct和class都可以定义类,但是缺省访问权限说明时,struct的成员是公有的,而class的成员是私有的。在C++中,struct可被class代替。三、找出下面程序(或程序段)中的语法错误,并予以纠正(每小题4分,共8分)(1)程序功能是倒序输出各给定的字符串。#includestdio.hvoidmain(){charstr[5][]={First,Second,Third,Forth,Fifth};char*cp[]={str[4],str[3],str[2],str[1],str[0]};inti;while(i=5){printf(%c,*(cp+i));i++;}}①charstr[5][]={First,Second,Third,Forth,Fifth};应为charstr[5][10]={First,Second,Third,Forth,Fifth};②while(i=5)应为while(i5)③printf(%c,*(cp+i));应为printf(%s,*(cp+i));④inti;应为inti=0;(2)程序功能是将各个平方根值放入数组中。#includestdio.hvoidmain(){intmax,a,i;scanf(%d%d,max,a);doublex[max];for(i=0;imax;i++)x[i]=sqrt(a*i);}①增加#includemath.h②scanf(%d%d,max,a);应为scanf(%d%d,&max,&a);③doublex[max];改为:double*x=newdouble[max];…delete[]x;四、(8分)下列shape类是一个表示形状的抽象类,area()为求图形面积的函数,total()则是一个通用的用以求不同形状的图形面积总和的函数。请从shape类派生三角形类(triangle)、矩形类(rectangle),并给出具体的求面积函数。classshape{public:virtualfloatarea()=0;};floattotal(shape*s[],intn){floatsum=0.0;for(inti=0;in;i++)sum+=s[i]-area();returnsum;}classTriangle:publicShape{public:Triangle(doubleh,doublew){H=h;W=w;}doubleArea()const{returnH*W*0.5;}private:doubleH,W;};classRectangle:publicShape{public:Rectangle(doubleh,doublew){H=h;W=w;}doubleArea()const{returnH*W;}private:doubleH,W;};五、(6分)完成顺序查找函数f_seq()。其过程是:从表头开始,根据给定的模式,逐项与表中元素比较。如果找到所需元素,则查找成功,并打印出它在表中的顺序号。如果查找整个表仍未找到所需对象,则查找失败#includestdio.hvoidf_seq(char*list[],char*object,intlen)//list指针数组,指向字符串//object模式串//len表的长度{char**p;intstrcmp(char*s,char*t);p=list;while(___________)if(strcmp(*p,object)==0)break;else___________;if(plist+len)printf(Success!**%d\n,p-list);elseprintf(Unsuccess!\n);}intstrcmp(char*s,char*t){for(;*s==*t;s++,t++)if(*s=='\0')return(0);return(___________);}六、(8分)完成使链表逆置函数reverse,若有链表:逆置后则变为:链表结点的结构如下:s
本文标题:清华大学计算机系C++期末考试题及答案
链接地址:https://www.777doc.com/doc-5745145 .html