级C++阶段测验2print.docx

上传人:b****3 文档编号:10403595 上传时间:2023-05-25 格式:DOCX 页数:18 大小:25.50KB
下载 相关 举报
级C++阶段测验2print.docx_第1页
第1页 / 共18页
级C++阶段测验2print.docx_第2页
第2页 / 共18页
级C++阶段测验2print.docx_第3页
第3页 / 共18页
级C++阶段测验2print.docx_第4页
第4页 / 共18页
级C++阶段测验2print.docx_第5页
第5页 / 共18页
级C++阶段测验2print.docx_第6页
第6页 / 共18页
级C++阶段测验2print.docx_第7页
第7页 / 共18页
级C++阶段测验2print.docx_第8页
第8页 / 共18页
级C++阶段测验2print.docx_第9页
第9页 / 共18页
级C++阶段测验2print.docx_第10页
第10页 / 共18页
级C++阶段测验2print.docx_第11页
第11页 / 共18页
级C++阶段测验2print.docx_第12页
第12页 / 共18页
级C++阶段测验2print.docx_第13页
第13页 / 共18页
级C++阶段测验2print.docx_第14页
第14页 / 共18页
级C++阶段测验2print.docx_第15页
第15页 / 共18页
级C++阶段测验2print.docx_第16页
第16页 / 共18页
级C++阶段测验2print.docx_第17页
第17页 / 共18页
级C++阶段测验2print.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

级C++阶段测验2print.docx

《级C++阶段测验2print.docx》由会员分享,可在线阅读,更多相关《级C++阶段测验2print.docx(18页珍藏版)》请在冰点文库上搜索。

级C++阶段测验2print.docx

级C++阶段测验2print

东南大学考试卷

课程名称

C++程序设计

考试学期

03-04-2

得分

适用专业

2、31系07级

考试形式

开、闭、半开

考试时间长度

120分钟

7页

说明:

(1)请在答题纸上答题,答题结束后,保留试卷,仅交答题纸。

一.选择题(以下各题均只有一个正确答案,每题1分,共20分)

1、设有说明intb[4][4],以下不能等价表示元素b[3][3]的是:

(6)

A.*&b[3][3]B.(*(*(b+3))+3)C.*(b[3]+3)D.*(*(b+3)+3)

2、以下语句中不正确的是(12)。

A)int*p=0B)floatp=(float)50;

C)int*p=new50D)float*p=newfloat[50];

3、设s和t分别为指向两个长度相同的字符数组指针,则循环语句while((13))可以正确实现字符串t到s的完整复制功能。

A)*s=*t&&t!

=0B)s++=t++&&*t!

=0

C)*(++s)=*(++t)D)*s++=*t++

4、设有以下定义:

classBall:

publicCircle{

doubler;

public:

…….

}

则正确的描述为(14)。

A)Circle是Ball的派生类

B)r是Circle的数据成员

C)Ball是Circle的派生类

D)r是Ball和Circle共同的数据成员

5、当数组名为函数的实参时,它传递给函数的是(15)。

A)数组的首地址B)数组名

C)数组第一个元数值D)数组全部元数

6、C++中多态性包括两种:

编译时和运行时的。

运行时多态性是通过(16)实现的。

①函数重载②运算符重载③类继承关系④动态链接⑤虚函数

A)①和②B)③和⑤C)④和⑤D)③和④

7、下列有关运算符重载的叙述正确的是(17)。

A.非静态成员函数重载运算符时带this指针

B.友元函数重载运算符时带this指针

C.成员函数与友元函数重载运算符时都不带this指针

D.用成员函数与友元函数重载同一运算符时,两者的参数类型与参数个数相同

8、设有以下说明语句:

chars1[20]=”hello”,s2[20]=”China”,constchar*ptr=s1;

以下语句中不符合C++语法规则的语句是(18)

A.strcpy(s2,ptr)B.ptr=s2C.ptr=ptr+4D.*ptr=*s2

9、以下test类中定义了四个函数,分A、B、C、D四行书写。

没有错误的函数定义是(3)行

A)A行B)B行C)C行D)D行

classtest{

private:

inta;

public:

intb;

friendints1(intx,test&y){x=a;returny;}//A

test(intx=0,inty=0){a=x;b=y;}//B

staticvoidShow(intx,test&z){b=a=x;cout<

~test(intx=0,inty=b){a=b=x=y;cout<

};

10、设有数组说明inta[10],数组中各元素已含有如下数据:

数组元素:

a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]

元素的值:

941282107513

以下(11)不能正确访问该数组的数组元素。

A)a[a[0]]B)a[a[2]]C)a[a[1]+a[9]]D)a[a[8]+a[2]]

11、若有以下语句,则下面(15)是正确的描述

staticcharx[]=”12345”;

staticchary[]={‘1’,’2’,’3’,’4’,’5’};

A)x数组和y数组的长度相同B)x数组长度大于y数组长度

C)x数组长度小于y数组长度D)x数组等价于y数组

12、设有宏定义如下:

#defineMIN(x,y)(x)>(y)?

(x):

(y)

#defineT(x,y,r)x*r*y/4

则执行以下语句后,s1、s2的值分别为(23)。

inta=1,b=3,c=5,s1,s2;

s1=MIN(a=b,b-a);s2=T(a++,a*++b,a+b+c);

A)327B)273

C)241D)324

13、若定义类A:

classA{

public:

A(intx=0);

};

执行语句“Aa(4),b[3],*p[2];”,则自动调用该类的构造函数的次数为(20)。

A.6B.4C.3D.1

14、有关虚函数的说法正确的是:

(5)

A)虚函数是虚设的函数,它没有函数体;B)虚函数必须是一个类的成员函数

C)含有虚函数的类称为抽象类D)析构函数和构造函数都可以是虚函数

15、设有说明:

chars1[10]*s2=s1,则以下正确的语句是:

(2)

A.s1[]=”computer”B.s1[10]=”computer”

C.s2=”computer”D.*s2=”computer”

16、1.若有说明语句char*name="newspaper";则获取串中的字符's'的正确方法是

A、name[0]+3B、*name+3

C、*(name+3)D、name[4]

17、如果在main函数中定义了数组inta[15],在赋值后调用一个排序函数为a数组排序,那么下面给出的排序函数参数定义可正确地将数组a及其大小传递过来?

A、sort(intx[],intn)B、sort(intx[15])

C、sort(int&x,intn)D、sort(int&x[15])

18、若定义函数longintfunc(ints){……},该循环体中有一条语句

returns*func(s-1);则此函数是一个。

A、递推函数B、递归函数

C、迭代函数D、嵌套函数

19、关于类的下列说法中,是正确的。

A、系统在程序运行时为定义的类分配存储空间

B、只有在定义了类的对象后,系统才为类分配存储空间

C、在程序执行时,系统为类的对象分配存储空间

D、一个类的所有对象(实例)共享同一块内存区域

 

二.阅读程序,回答问题(共32分)

1.(本题3分)

#include

classA

{intx,y;

public:

A(inta,intb){x=a;y=b;cout<<"ABC"<<'\t';}

A(){x=3;y=4;cout<<"CBA"<<'\n';}

voidShow()

{cout<<"x="<

~A(){cout<<"XYZ"<<'\n';}

};

voidmain(void)

{As(1,2);s=A(2,3);s.Show();}

问题一:

本程序输出的第一行是

(1)1.ABCABC XYZ

问题二:

本程序输出的第二行是

(2)2.x=2y=3XYZ

2.(本题4分)

#include

classA{

public:

A(inta){x=a;cout<<"x="<

~A(){cout<<"-A-"<<'\n';}

private:

intx;

};

classB{

Ay;ints;

public:

B(inta,intb,intc):

y(a+b+c)

{s=c-b;cout<<"s="<

~B(){cout<<"-B-"<<'\n';}

};

voidmain(void)

{Bs(1,2,3);}

问题一:

本程序共输出(3)行   3.4行

x=6*A*

s=1*B*

-B-

-A-

问题一:

各行的输出结果依次是(4)

3.(本题3分)

#include

classnode{

intx,y;

5.(node&a)

6.node_1

node_2

x=5y=6

public:

node(inta,intb)

{x=a;y=b;cout<<"node_1"<<'\n';}

node()

{x=a.x;y=a.y;cout<<"node_2"<<'\n';}

voidShow()

{cout<<"x="<

};

voidmain(void){

nodef1(5,6);nodef2(f1);f2.Show();

}

问题一:

类中定义了两个构造函数,其中一个是缺省参数的构造函数。

但主函数中的对象要求有对应的形参,这个形参的正确定义是(5)

问题二:

当对应的形参被正确定义后,执行结果依次是(6)

 

4.程序输出的第一行是7,第三行是8。

#include

7.china

8.caaca

#include

voidfun(char*s,intm){

chartemp,*p1,*p2;

p1=s;p2=s+m-1;

cout<<"s="<

cout<<"length="<

while(p1

temp=*p1++;

*p1=*p2--;

*p2=temp;

}

voidmain(){

chars[]=”china”;

fun(s,5);

cout<

9.4行

10.2次

11.

x=1*A1*

*A2*

x=2-A-

x=1-A-

}

5.(6分)

#include

classA

{intx;

public:

A(inta)

{x=a;cout<<"x="<

A(A&s)

{x=s.x+1;cout<<"*A2*"<<'\n';}

~A(){cout<<"x="<

};

voidmain(void)

{Af1

(1),f2(f1);}

问题一:

本程序共输出(9)行,类中的析构函数被访问(10)次

问题二:

各行的输出结果依次是(11)

6.(10分)

#include

enumec{a,b,c,d,e};

charcp[]={'a','b','c','d','e'};

classRect{

private:

intwidth,hight,color;

public:

Rect(intx=10,inty=10,intc=a):

width(x),hight(y),color(c){};

voidSetRec(intw,inth,intc){width=w;hight=h;color=c;}

intArea(){returnwidth*hight;}

Rectoperator+(Rectb);

voidDisplay();

};

RectRect:

:

operator+(Rectb){

Rects;

s.width=width+b.width;

s.hight=hight+b.hight;

s.color=(color+b.color)%5;

returns;

}

voidRect:

:

Display(){

cout<<"w="<

}

12.6行

13.w=20h=40c=b

w=30h=50c=d

w=50h=70c=e

w=70h=110c=a

A:

7700

B:

3500

voidmain(){

RectA(20,40,b),B(30,50,d);

A.Display();

B.Display();

B.SetRec(50,70,e);

B.Display();

A=A+B;

A.Display();

cout<<"A:

"<

cout<<"B:

"<

}

问题一:

本程序共输出(12)行

问题二:

各行的输出结果依次是(13)

7.(5分)

#include

longintf(intn)

{

if(n>1)returnn-f(n-1);

elsereturn

(1);

}

voidmain()

{cout<

问题一:

执行以上递归函数时,执行过程包括递推和回归两个过程,其中递推过程可分为以下4个步骤:

递推:

①5-f(4)②4-f(3)③3-f

(2)④2-f

(1)

当执行回归过程时,有两个步骤产生的结果相同。

根据回归顺序,这两个步骤依次是第(14)步和第(15)步14.

15.

问题二:

当递归函数执行完毕后,将结果返回给主函数调用语句的是以上步骤中的第(16)步,它执行的return语句是:

return(17)

问题三:

程序的输出结果是(18)16.

17.5-f(4)18.3

 

三、完善程序,并回答问题:

(每空1分,共28分)

1.确定一个数(例如i)是否为素数的算法是,只要2~

之间的所有自然数都不能整除i(其中

取整数),则i必为素数。

显然,只要i能被其中任一个数整除,i必然不是素数。

以下程序用于求300以内的素数,并按每行5个素数的格式输出。

(9分)

#include

#include//A

prime(int_

(1)_,int_

(2)_){//1.a2.b

intn;

for(n=2;n<=a;n++)if(b%n==0)_(3)_;3.break

return(n);

}

voidmain(){

intk,i,j;

cout<<2<<'\t'<<3;

for(k=2,i=5;i<300;i+=2){

j=sqrt(i);

if(prime(j,i)>=_(4)_){//4.j

cout<<'\t'<

_(5)_;//5.k++

if(k%5==0)cout<<'\n';

}

}

cout<<'\n';

}

问题一:

算法中是把(6)作为待求素数

A)300以内的所有自然数B)300以内的所有奇数

C)2~300之间的所有自然数D)5~300之间的所有奇数

问题二:

算法中有一个变量用作求素数的除数,这个变量是(7),其中作为最大除数的变量是(8)7.n8.a

问题三:

与A行预处理指令有关的语句是(9)//9.j=sqrt(i)

2.ball是关于球的类定义,其数据成员包括半径和重量。

通过运算符重载实现对象的初始化(赋值)、两个对象相加和判断两个对象是否相等的运算。

#include

classball{

private:

floatradii;

floatweight;

public:

ball(floatx=0,floaty=0){_(10)_}//10.radii=x;weight=y;

floatgetr(){returnradii;}

floatgetw(){returnweight;}

intoperator==(ball);

voidoperator()(float,float);

voidoperator+=(ballB);

};

intball:

:

operator==(ballB){

if(_(11)_)//11.radii==B.radii&&weight==B.weight

return1;

else

return0;

}

voidball:

:

operator()(floata,floatb){

_(12)_=a;//12.radii

_(13)_=b;//13.weight

}

voidball:

:

operator+=(ballB){

radii+=_(14)_;14.B.radii

weight+=_(15)_;15.B.weight

}

voidmain(){

balla,b(30,500),c(40,600);

a(b.getr()+10,b.getw()+100);

cout<<"a.radii="<

b+=c;

cout<<"b.radii="<

if(a==c)cout<<"a球和c球相等!

"<

elsecout<<"a球和c球不相等!

"<

}

3.使用结构体和指针建立链式成绩表,表中每个结点中包含的信息有学号,姓名,数学成绩和链指针。

输入数据时指定学生人数,调用函数Addnew()输入每个学生的信息,新结点插在链首。

从键盘输入一个学号key,调用函数Search()在已建立的结构链表中查找该学号所在的结点,若找到则输出姓名和成绩以及该结点在链表中的序号;若找不到则返回-1,输出提示信息。

#include

structpupil{

intsnum;

charname[8];

floatmath;

pupil*next;

};

voidAddnew(pupil*&head,intk){

pupil*p=16;//16.newpupil

cout<<"输入第"<

"<

cin>>p->snum>>p->name>>p->math;

if(head==0){p->next=0;head=p;}

else{

p->next=17;17.head

head=18;18.p

}

}

intSearch(constpupil*head,constpupil*&t,intk){

constpupil*p;

inti=0;

p=head;

while(p!

=0){

i++;

if(19){t=p;returni;}//19.p.snum==k

elsep=20;//20.p->next

}

return-1;

}

voidmain()

{

pupil*s=0,*first=0;

inti,total,key;

cout<<"请输入学生人数:

";

cin>>total;

for(i=0;i

Addnew(first,i+1);

}

cout<<"请输入要查找的学号:

";

cin>>key;

i=Search(21);//21.first,s,key

if(i>=0&&s!

=0){

cout<<"学号为"<

";

cout<name<math;

cout<<"位于链表中第"<

}

elsecout<

";

return;

}

4.本程序调用构造函数实现字符串对象的初始化。

调用重载运算符”+”把两个字符串拼接,并通过重载运算符“>”来实现字符串的比较运算。

#include

#include

classstring

{char*str;

public:

string(char*s=0)

{

if(_(22)_){str=newchar[strlen(s)+1];strcpy(__(23)__);}

elsestr=0;

}

friendstringoperator+(string&,string&);

intoperator>(string&);

voidshow(){if(str)cout<

};

stringoperator+(string&s1,string&s2)

22.s!

=0

23.str,s

24.newchar[strlen(s1.str)+strlen(s2.str)+1];

strcpy(t.str,s1.str)

25.returnt

26.str,s.str

{

stringt;

t.str=____(24)_____;

strcat(t.str,s2.str);

______(25)_______;

}

intstring:

:

operator>(string&s)

{

if(strcmp(____(26)_____)>0)return1;

elsereturn0;

}

voidmain(void)

{

strings1("southeastuniversity"),s2("mechanicaldepartment");

strings3;s3=s1+s2;

s1.show();s2.show();s3.show();

cout<<(s1>s2)<<'\n';

}

sort(x,num);

Output(x,num);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2