清华大学计算机系C++期末考试题及答案

您所在的位置:网站首页 面向对象程序设计考试题 清华大学计算机系C++期末考试题及答案

清华大学计算机系C++期末考试题及答案

2024-05-24 12:31| 来源: 网络整理| 查看: 265

清华大学计算机系C++期末考试题及答案

一、 填空题(25小题,共50分) (以下每小题1分,共10分) 1. 在C++中,函数的参数有两种传递方式,它们是值传递和 地址或指针或引用传递 。 2. 当一个成员函数被调用时,该成员函数的 this指针 指向调用它的对象。 3. 在基类和派生类中,派生类可以定义其基类中不具备的数据和操作。对两个有相同名字的数据成员进行访问时,如果没有 作用域分隔符限定时 ,对此数据成员的访问将出现歧义。 4. 拷贝构造函数使用 引用 作为参数初始化创建中的对象。 5. 在公有继承的情况下,基类数据成员在派生类中的访问权限 保持不变 。 6. 描述命题"A小于B或小于C"的表达式为 A  int i=1;

  while (i  cout   test array[2];   cout  public:  B(int i){  cout  delete a; }

 void main() {  A *a=new B(15);  fun(a); } A::A() called. B::B() called. B::~B() called. A::~A() called.

 25. 下面程序的运行结果是________。 #include  int a[ ]={1,3,5,7,9}; int *p[ ]={a,a+1,a+2,a+3,a+4}; void main( ) {  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]); } 9 5 3 8 4 7  二、 问答题(每小题5分,共20分)

 1. 若程序员没有定义拷贝构造函数,则编译器自动生成一个缺省的拷贝构造函数,它可能会产生什么问题?解答要点:当对象含有指针数据成员,并用它初始化同类型的另一个对象时,缺省的拷贝构造函数只能将该对象的数据成员复制给另一个对象,而不能将该对象中指针所指向的内存单元也复制过去。这样,就可能出现同一内存单元释放两次,导致程序运行出错。

 2. 简述成员函数、全局函数和友元函数的差别。  解答要点:以下几点必须说清楚:  成员函数是在类内部定义的,作用域在类的内部,成员函数可以访问类的数据成员(公有、保护和私有数据成员),可以调用该类的其它成员函数(公有、保护和私有成员函数),可以调用全局函数。如果友元函数是另一个类的公有成员函数,则该类的成员函数也只能通过那个类的对象调用,不能调用那个类的保护和私有成员函数。非本类成员函数(其它类成员函数或全局函数)可以通过该类的对象访问该类的公有数据成员和调用该类的的公有成员函数。  不是在类中定义的成员函数都是全局函数。  如果某一个函数(全局函数或类的成员函数)定义为另一个类的友元函数,需要在那个类中用friend关键字声明,友元函数并不是类的成员,它的定义自然是在那个类的外面。

 3. 简述结构化的程序设计、面向对象的程序设计的基本思想。  解答要点:结构化的程序设计将数据和对数据的操作分离,程序是由一个个的函数组成的,面向对象的程序设计将数据和操作封装在一起,程序是由一个个对象组成的,对象之间通过接口进行通信,它能够较好地支持程序代码的复用。

 4. 结构struct和类class有什么异同?  解答要点:struct和class都可以定义类,但是缺省访问权限说明时,struct的成员是公有的,而class的成员是私有的。在C++中,struct可被class代替。

三、找出下面程序(或程序段)中的语法错误,并予以纠正(每小题4分,共8分)

(1)程序功能是倒序输出各给定的字符串。 #include  void main() {  char str[5][ ]={"First","Second","Third","Forth","Fifth"};  char *cp[ ]={str[4],str[3],str[2],str[1],str[0]};  int i;

  while(i  int max,a,i;  scanf("%d%d",max,a);  double x[max];

  for (i=0;i public:  Rectangle(double h,double w){H=h;W=w;}  double Area()const{return 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 (_____①______) //p  int num;  struct node *next; } struct node* reverse(struct node *head) //head 链表头结点 {  struct node *p,*temp1,*temp2;   if(head==NULL____①____) return head; //||head->next==NULL  p=head->next;head->next=NULL;  while(____②____) //p!=NULL或p  {   temp1=head;   ____③____; //head=p;   temp2=p;   p=p->next;   ____④____; //temp2->next=temp1;或head->next=temp1;   }//Match while statenment   return head; //返回逆置后的链表的头结点 }



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3