C试卷及其规范标准答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C++程序设计(A)

一、选择题(每小题2分,共20分)

1、关于对象概念的描述中,()是错误的。

A. 对象就是C语言中的结构变量

B. 对象代表着正在创建的系统中的一个实体

C. 对象是一个状态和操作(或方法)的封装体

D. 对象之间的信息传递是通过消息进行的

2、对于int *pa[5];的描述,()是正确的。

A. pa是一个指向数组的指针,所指向的数组是5个int型元素

B.pa是一个指向某个数组中第5个元素的指针,该元素是int型变量

C.pa[5]表示某个数组的第5个元素的值

D.pa是一个具有5个元素的指针数组,每个元素是一个int型指针

3、下列for循环的循环体执行次数为()。

for(int i=0,j=10;i=j=4;i++,j- -)

A. 0

B. 无限

C. 4

D. 1

4、下述静态数据成员的特征中,()是错误的。

A. 说明静态数据成员时前边要加修饰符static

B.静态数据成员要在类体外进行初始化

C.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符

D.静态数据成员不是所有对象所共用的

5、()是析构函数的特征。

A. 一个类中只能定义一个析构函数

B. 析构函数与类名不同

C. 析构函数的定义只能在类体内

D. 析构函数可以有各个或多个参数。

6、已知:p是一个指向类A数据成员m的指针,A1是类A的一个对象,如果要给m赋值

为5,下列表达式()是正确的。

A. A1.p=5

B. A1->p=5

C. A1.*p=5

D. *A1.p=5

7、关于new运算符的下列描述中,( )是错误的。

A. 它可以用来动态创建对象和对象数组

B.使用它创建的对象或对象数组可以使用运算符delete删除

C.使用它创建对象时要调用构造函数

D.使用它创建对象数组时必须指定初始值

8、派生类的对象对它的基类成员中()是可以访问的。

A. 公有继承的公有成员

B.公有继承的私有成员

C.公有继承的保护成员

D.私有继承的公有成员

9、下列()是引用调用。

A.形参是指针,实参是地址值 B.形参和实参都是变量

C.形参是引用,实参是变量 D.形参是变量,实参是引用

10、下述关于开关语句的描述中,()是正确的。

A.开关语句中default子句可以没有,也可以有一个;

B.开关语句中每个语句序列中必须有break语句;

C.开关语句中default子句只能放在最后;

D.开关语句中case子句后面的表达式可以是整形表达式。

二、填空题(共60分)

(一)、基本概念题(每题2分,共10分)

1、____(1)____类型转换专门针对有虚函数的继承结构,它将基类指针转换成其派生类指针,以做好派生类操作的准备。

2、函数重载是指函数的____(2)_____不同。

3、设有说明语句:

int a[ ][4]={{1,2}, {2,3,4,5}}, *p=(int *)a;

则*(p+5)的值为____(3)_____。

4、设有宏定义和变量说明:

#define T(x,y) x+y

int a= T(3,4) * T(3,5);

则变量a的初值为____(4)______。

5、编程质量的衡量标准包括可读性、易编程性、安全性、可扩充性、效率和____(5)____。(二)、完善程序题(每空2分,共20分)

1、单链表中结点按元素值递增链接,DeleteAb实现删除结点值在a至b之间的结点(a≤b)的功能。

#include

struct node

{ int x;

node *link;

}

node *DeleteAb(int a,int b,node *first)

{ node *p=first;

node *q=____(6)______;

while( p && p->x

{ if (____(7)____)

{ q=p; p=p->link; }

else if(q==first)

{ q=___(8)______;

p=first=q;

}

else { q->link=____(9)______;

p=q->link;

}

}

return ____(10)______;

}

void main( )

{ node a[10]={ {1},{2},{3},{4},{5},{6},{7},{8},{9},{10} },*hd=a,*p;

int x,y;

for( int i=0;i<9;i++ )

a[i].link=&a[i+1];

a[9].link=NULL;

p=DeleteAb(x,y,hd);

while(p) { cout<x; p=p->link; }

}

2、程序构造了一个集合类,其中以整形数组存放集合中的元素。通过重载运算符“*”,实现求两个集合交集的运算,即两个集合的共有元素。例如,设集合a,b分别为:集合a={1,2,3,4,15,6,7,8,9,10};

集合b={1,2,3,4,5,16,17,18,19,20};

求交集a*b的结果为{1,2,3,4}。通过重载运算符“=”,实现两个集合的赋值运算。

#include

#include“string.h”

class set {

int x[10];

int len;

public:

set( ) { for(int i=0;i<10;i++) x[i]=0; len=0; }

set(int *p, int n)

{ for (int i=0;i

friend set operator*(set a,set b);

set & operator=(set b);

int getLen( ) { return len; }

void show(int n) { for(int i=0;i

};

set operator* (set a,set b)