您好,欢迎来到小侦探旅游网。
搜索
您的当前位置:首页C++试卷及答案

C++试卷及答案

来源:小侦探旅游网


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(inti=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=5B.A1->p=5 C.A1.*p=5D.*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、设有说明语句:

inta[][4]={{1,2},{2,3,4,5}},*p=(int*)a; 则*(p+5)的值为____(3)_____。 4、设有宏定义和变量说明: #defineT(x,y)x+y inta=T(3,4)*T(3,5);

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

5、编程质量的衡量标准包括可读性、易编程性、安全性、可扩充性、效率和____(5)____。 (二)、完善程序题(每空2分,共20分) 1、单链表中结点按元素值递增链接,DeleteAb实现删除结点值在a至b之间的结点(a≤b)的功能。 #include structnode {intx; node*link; }

node*DeleteAb(inta,intb,node*first) {node*p=first; node*q=____(6)______; while(p&&p->xlink;} elseif(q==first) {q=___(8)______; p=first=q; }

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

return____(10)______; }

voidmain()

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

for(inti=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” classset{ intx[10]; intlen; public: set(){for(inti=0;i<10;i++)x[i]=0;len=0;} set(int*p,intn) {for(inti=0;isetoperator*(seta,setb) {sett;intk=0;

for(inti=0;i_____(12)_____=k; returnt; }

set&_____(13)______(setb)

{for(inti=0;ivoidmain()

{inta[10]={1,2,3,4,5,6,7,8}; intb[10]={1,12,3,5,8,6,7,14,29}; setset1(a,8),set2(b,9),c; c=set1*set2;

c.show(____(15)____); }

(三)、阅读程序题(每题5分,共30分) 1、以下程序的执行结果是___(16)_____。

#include voidmain() { intx=3,y=3; switch(x%2) {case1:switch(y)

{case0:cout<<\"first\\"; case1:cout<<\"second\\";break; } case2:cout<<\"third\\n\"; } } 2、以下程序的执行结果是___(17)_____。

#include intadd(intx,inty=8); voidmain() {inta=5;

cout<intadd(inta,intb) {ints=a+b; returns; }

3、以下程序的执行结果是___(18)_____。 #include

default:cout<<\"hellow\\";

voidf(int&a,intb=3) {staticinti=2; a=a*b+i; i+=a; }

voidmain(void)

{intx=3,y=2; f(x,y); cout<cout<4、以下程序的执行结果是___(19)_____。 #include usingnamespacestd; classAA {intA,B; public: AA(inti,intj)

{A=i;B=j;cout<<\"Constructor\\n\";} AA(AA&obj) {A=obj.A+10;B=obj.B+20;cout<<\"Copy_Constructor\\n\";} ~AA() {cout<<\"Destructor\\n\";} voidprint() {cout<<\"A=\"<print(); deletepa; }

5、以下程序的执行结果是____(20)____。 #include usingnamespacestd; classBase{ protected:

intx;

public: Base(inta){x=a;} };

classA:publicBase{ public:

A(inta):Base(a){} intGetX(){returnx;} };

classB:publicBase{ public:

B(inta):Base(a){} intGetX(){returnx;}

};

classC:publicB,publicA{ public:

C(inta):A(a+10),B(a+20){} };

voidmain(){ Cc(10);

cout< usingnamespacestd; classA{ intx,n; intmul; public: A(inta,intb){x=a;n=b;mul=1;} virtualintpower() {mul=1;

for(inti=1;i<=n;i++)mul*=x; returnmul; }

voidshow(void) {cout<classB:publicA{ inty,m; intp; public:

B(inti,intj,intk,inth):A(i,j){y=k;m=h;p=10;} intpower() {p=1;

for(inti=1;i<=m;i++)p*=y; returnp; }

voidshow(void)

{A::show();cout<voidfun(A*f)

{cout<power()<<'\\n';} voidmain()

{Aa(5,3);Bb(2,4,3,3);

fun(&a);fun(&b);b.show(); }

三、编程题(每题10分,共20分)

1、有一个文件abc.in,其中含有一些整数对,求出这些整数对的最大公约数,并对这些最大公约数从小到大排序输出。要求使用向量存放数据,程序分为输入、排序、输出三个函数完成,其样板文件内容如下: abc.in 12 Month,Day,Year35 2、定义一个处理日期的类TDate,它有3个私有数据成员:和若干个公有成员函数,并实现如77 91 下要求:①构造函数重载;②成员函数设置缺省参数;③定义一个友元函数来打印日期;④定义一个非静态成员123 7 函数设置日期;⑤可使用不同的构造函数来创建不同的对象。 24 28 一、单选题(每题1分,共15分) 112 CCBDD CAADC BABCD 二、基本概念填空题(每空1分,共15分) 1、传地址 引用 2、-2 3、0 4、inline 5、0 2 6、2614

7、整型 字符型 8、ABC 9、2 10、16 11、3

三、阅读程序题(每题4分,共20分) 1、a 2、25 3、3 4、1228 5、2471116

四、完善程序题(每空2分,共20分)

1、(1)inty[],intn (2)y[i] (3)y[j]=0

(4)count%10==0 2、(5)‘\\0’ (6)n++ (7)‘\\0’ 3、(8)p=0 (9)p=i

(10)sizeof(int) 五、改错题(10分)

//11while(p->Next!=NULLl) //14s=p; //15while(q)

//17if(q->Data==p->Data) //19s->Next=q->Next; 六、程序设计题(20分) 1、(10分)

#include structscore{

charname[20]; longnum; doublecpp; doubleenglish; doublemath; doubleave; }; voidcompute(scorex[],intn) {

for(inti=0;ivoidinput(scorex[],intn) {

for(inti=0;icout<<\"输入第\"<cin.getline(x[i].name,20);

cout<<\"输入第\"<>x[i].num;

cout<<\"输入第\"<>x[i].cpp;

cout<<\"输入第\"<>x[i].english;

cout<<\"输入第\"<>x[i].math; }

}

voidoutput(scorex[],intn) {

for(inti=0;icout<<\"第\"<cout<<\"第\"<cout<<\"第\"<voidmain() {

intn;

cout<<\"请输入班级人数\"; cin>>n;

score*p=newscore[n]; input(p,n); compute(p,n); output(p,n); delete[]p; } 2、(10分) #include voidsort(intx[],intn) {

intt,i,j; for(i=0;ix[j]){ t=x[i];x[i]=x[j];x[j]=t; } }

voidinput(intx[],intn) {

for(inti=0;icout<<\"输入第\"<>x[i]; } }

voidoutput(intx[],intn) {

for(inti=0;ivoidmain()

{ }

inty[10]; input(y,10); sort(y,10); output(y,10);

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- xiaozhentang.com 版权所有 湘ICP备2023022495号-4

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务