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.0B.无限C.4D.14、下述静态数据成员的特征中,()是错误的。A.说明静态数据成员时前边要加修饰符staticB.静态数据成员要在类体外进行初始化C.引用静态数据成员时,要在静态数据成员名前加类名和作用域运算符D.静态数据成员不是所有对象所共用的5、()是析构函数的特征。A.一个类中只能定义一个析构函数B.析构函数与类名不同C.析构函数的定义只能在类体内D.析构函数可以有各个或多个参数。6、已知:p是一个指向类A数据成员m的指针,A1是类A的一个对象,如果要给m赋值为5,下列表达式()是正确的。A.A1.p=5B.A1-p=5C.A1.*p=5D.*A1.p=57、关于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+yinta=T(3,4)*T(3,5);则变量a的初值为____(4)______。5、编程质量的衡量标准包括可读性、易编程性、安全性、可扩充性、效率和____(5)____。(二)、完善程序题(每空2分,共20分)1、单链表中结点按元素值递增链接,DeleteAb实现删除结点值在a至b之间的结点(a≤b)的功能。#includeiostream.hstructnode{intx;node*link;}node*DeleteAb(inta,intb,node*first){node*p=first;node*q=____(6)______;while(p&&p-xb){if(____(7)____){q=p;p=p-link;}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;i9;i++)a[i].link=&a[i+1];a[9].link=NULL;p=DeleteAb(x,y,hd);while(p){coutp-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}。通过重载运算符“=”,实现两个集合的赋值运算。#includeiostream.h#include“string.h”classset{intx[10];intlen;public:set(){for(inti=0;i10;i++)x[i]=0;len=0;}set(int*p,intn){for(inti=0;in;i++)x[i]=*p++;len=n;}friendsetoperator*(seta,setb);set&operator=(setb);intgetLen(){returnlen;}voidshow(intn){for(inti=0;in;i++)coutx[i]’\t’;}};setoperator*(seta,setb){sett;intk=0;for(inti=0;ia.len;i++)for(intj=0;jb.len;j++)if(a.x[i]==b.x[j]){_____(11)______=a.x[i];break;}_____(12)_____=k;returnt;}set&_____(13)______(setb){for(inti=0;ib.len;i++)x[i]=b.x[i];len=b.len;_____(14)______;}voidmain(){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)_____。#includeiostream.hvoidmain(){intx=3,y=3;switch(x%2){case1:switch(y){case0:coutfirst\t;case1:coutsecond\t;break;default:couthellow\t;}case2:coutthird\n;}}2、以下程序的执行结果是___(17)_____。#includeiostream.hintadd(intx,inty=8);voidmain(){inta=5;coutadd(a),;coutadd(a,add(a)),;coutadd(a,add(a,add(a)))endl;}intadd(inta,intb){ints=a+b;returns;}3、以下程序的执行结果是___(18)_____。#includeiostream.hvoidf(int&a,intb=3){staticinti=2;a=a*b+i;i+=a;}voidmain(void){intx=3,y=2;f(x,y);coutxendl;f(x);coutxendl;}4、以下程序的执行结果是___(19)_____。#includeiostreamusingnamespacestd;classAA{intA,B;public:AA(inti,intj){A=i;B=j;coutConstructor\n;}AA(AA&obj){A=obj.A+10;B=obj.B+20;coutCopy_Constructor\n;}~AA(){coutDestructor\n;}voidprint(){coutA=A,B=Bendl;}};voidmain(){AAa1(2,3);AAa2(a1);a2.print();AA*pa=newAA(5,6);pa-print();deletepa;}5、以下程序的执行结果是____(20)____。#includeiostreamusingnamespacestd;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);coutc.A::GetX()','c.B::GetX()endl;}6、以下程序的执行结果是___(21)_____。#includeiostreamusingnamespacestd;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){coutmul'\t';}};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();coutp'\n';}};voidfun(A*f){coutf-power()'\n';}voidmain(){Aa(5,3);Bb(2,4,3,3);fun(&a);fun(&b);b.show();}三、编程题(每题10分,共20分)1、有一个文件abc.in,其中含有一些整数对,求出这些整数对的最大公约数,并对这些最大公约数从小到大排序输出。要求使用向量存放数据,程序分为输入、排序、输出三个函数完成,其样板文件内容如下:abc.in123577911237892428641122、定义一个处理日期的类TDate,它有3个私有数据成员:Month,Day,Year和若干个公有成员函数,并实现如下要求:①构造函数重载;②成员函数设置缺省参数;③定义一个友元函数来打印日期;④定义一个非静态成员函数设置日期;⑤可使用不同的构造函数来创建不同的对象。一、单选题(每题1分,共15分)CCBDDCAADCBABCD二、基本概念填空题(每空1分,共15分)1、传地址引用2、-23、04、inline5、026、26147、整型字符型8、ABC9、210、1611、3三、阅读程序题(每题4分,共20分)1、a2、253、34、12285、2471116四、完善程序题(每空2分,共20分)1、(1)inty[],intn(2)y[i](3)y[j]=0(4)count%10==02、(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