《清华大学计算机系C++试题及答案》由会员分享,可在线阅读,更多相关《清华大学计算机系C++试题及答案(10页珍藏版)》请在金锄头文库上搜索。
1、清华大学计算机系 C+考试题及答案一、 填空题(25 小题,共 50 分) (以下每小题 1 分,共 10 分)1 在 C+中,函数的参数有两种传递方式,它们是值传递和 地址或指针或引用传递 。2 当一个成员函数被调用时,该成员函数的 this 指针 指向调用它的对象。3 在基类和派生类中,派生类可以定义其基类中不具备的数据和操作。对两个有相同名字的数据成员进行访问时,如果没有 作用域分隔符限定时 ,对此数据成员的访问将出现歧义。4 拷贝构造函数使用 引用 作为参数初始化创建中的对象。5 在公有继承的情况下,基类数据成员在派生类中的访问权限 保持不变 。6 描述命题A 小于 B 或小于 C的表
2、达式为 Ac&b=c的值是 0 。(以下每小题 2 分,共 20 分)11 面向对象的程序设计有四大特征,它们是抽象、封装、 继承 、 多态 。12 在 Visual C+中,定义重载函数时,应至少使重载函数的参数个数或参数类型 不同 ;在基类和派生类中,成员函数的覆盖是指 派生类成员函数与在基类被覆盖的成员函数名、参数个数、参数类型和返回值类型均相同 。13 构造函数与析构函数除功能不同外,在定义形式上,它们的区别还包括构造函数名与类名相同,而析构函数名是在类名前加一个、 析构函数没有参数 、 析构函数可以定义为虚函数 。14 动态联编要满足两个条件,它们是 被调用的成员函数是虚函数 、 用
3、指针或引用调用虚函数 。15 在 C+类中,有一种不能定义对象的类,这样的类只能被继承,称之为 抽象类 ,定义该类至少具有一个 纯虚函数 。16 在 C+类中,const 关键字可以修饰对象和成员函数,const 对象不能 被修改 ,const 成员函数不能 修改类数据成员 。17 举出 C+中两种用户自定义的数据类型: 类 、 枚举 。18 C+中没有字符串类型,字符串是通过 字符数组 来表示的,每一个字符串都有一个结尾字符 0 。19 C+中没有输入输出语句,输入输出是通过 输入输出库 实现的, 写出一条打印整型变量 n 的输出语句:coutvoid main()char a=a,b=j;
4、float x;x=(b-a)/(F-A);printf(%dn,(int)(3.14*x);22 下面程序的运行结果是 2 5 8 11 14。#include iostream.h void main( ) int i=1;while (iclass Apublic:A()coutint a =1,3,5,7,9;int *p =a,a+1,a+2,a+3,a+4;void main( )printf(%dt%dt%dn,a4,*(a+2),*p1);printf(%dt%dt%dn,*(p+1)+a2,*(p+4)-*(p+0),*(a+3)%a4);9 5 38 4 7 二、 问答题(
5、每小题 5 分,共 20 分)1 若程序员没有定义拷贝构造函数,则编译器自动生成一个缺省的拷贝构造函数,它可能会产生什么问题?解答要点:当对象含有指针数据成员,并用它初始化同类型的另一个对象时,缺省的拷贝构造函数只能将该对象的数据成员复制给另一个对象,而不能将该对象中指针所指向的内存单元也复制过去。这样,就可能出现同一内存单元释放两次,导致程序运行出错。2 简述成员函数、全局函数和友元函数的差别。解答要点:以下几点必须说清楚:成员函数是在类内部定义的,作用域在类的内部,成员函数可以访问类的数据成员(公有、保护和私有数据成员),可以调用该类的其它成员函数(公有、保护和私有成员函数),可以调用全局
6、函数。如果友元函数是另一个类的公有成员函数,则该类的成员函数也只能通过那个类的对象调用,不能调用那个类的保护和私有成员函数。非本类成员函数(其它类成员函数或全局函数)可以通过该类的对象访问该类的公有数据成员和调用该类的的公有成员函数。不是在类中定义的成员函数都是全局函数。如果某一个函数(全局函数或类的成员函数)定义为另一个类的友元函数,需要在那个类中用 friend 关键字声明,友元函数并不是类的成员,它的定义自然是在那个类的外面。3 简述结构化的程序设计、面向对象的程序设计的基本思想。解答要点:结构化的程序设计将数据和对数据的操作分离,程序是由一个个的函数组成的,面向对象的程序设计将数据和操
7、作封装在一起,程序是由一个个对象组成的,对象之间通过接口进行通信,它能够较好地支持程序代码的复用。4 结构 struct 和类 class 有什么异同?解答要点:struct 和 class 都可以定义类,但是缺省访问权限说明时,struct 的成员是公有的,而 class 的成员是私有的。在 C+中,struct 可被 class 代替。 三、找出下面程序(或程序段)中的语法错误,并予以纠正(每小题 4 分,共 8 分)(1)程序功能是倒序输出各给定的字符串。#include void main()char str5 =First,Second,Third,Forth,Fifth;char
8、*cp =str4,str3,str2,str1,str0;int i; while(ivoid main()int max,a,i;scanf(%d%d,max,a);double xmax;for (i=0;i scanf(%d%d,max,a);应为scanf(%d%d, double xmax;改为:double *x=new doublemax;delete x; 四、(8 分)下列 shape 类是一个表示形状的抽象类,area( )为求图形面积的函数,total( )则是一个通用的用以求不同形状的图形面积总和的函数。请从 shape 类派生三角形类(triangle) 、矩形类(
9、 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; 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 Shapepub
10、lic:Rectangle(double h,double w)H=h;W=w;double Area()constreturn H*W;private:double H,W; 五、(6 分)完成顺序查找函数 f_seq( )。其过程是:从表头开始,根据给定的模式,逐项与表中元素比较。如果找到所需元素,则查找成功,并打印出它在表中的顺序号。如果查找整个表仍未找到所需对象,则查找失败#include void f_seq(char *list,char *object,int len)/list 指针数组,指向字符串/object 模式串/len 表的长度char *p;int strcmp(char *s,char *t); p=list;while (_) /pnext=NULLp=head-next;head-next=NULL;while(_) /p!=NULL 或 ptemp1=head;_; /head=p;temp2=p;p=p-next;_; /temp2-next=temp1;或 head-next=temp1;/Match while statenmentreturn head; /返回逆置后的链表的头结点