东南大学c++第二学期期末复习二含答案.docx

上传人:b****6 文档编号:8826377 上传时间:2023-02-02 格式:DOCX 页数:20 大小:21.32KB
下载 相关 举报
东南大学c++第二学期期末复习二含答案.docx_第1页
第1页 / 共20页
东南大学c++第二学期期末复习二含答案.docx_第2页
第2页 / 共20页
东南大学c++第二学期期末复习二含答案.docx_第3页
第3页 / 共20页
东南大学c++第二学期期末复习二含答案.docx_第4页
第4页 / 共20页
东南大学c++第二学期期末复习二含答案.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

东南大学c++第二学期期末复习二含答案.docx

《东南大学c++第二学期期末复习二含答案.docx》由会员分享,可在线阅读,更多相关《东南大学c++第二学期期末复习二含答案.docx(20页珍藏版)》请在冰豆网上搜索。

东南大学c++第二学期期末复习二含答案.docx

东南大学c++第二学期期末复习二含答案

一、选择题:

(每题1分,共30分)

1.以下程序的输出结果是C

A)1B)7C)9D)11

#include<>

voidfut(int**s,intp[2][3])

{**s=p[1][1];}

voidmain()

{staticinta[2][3]={1,3,5,7,9,11};

int*p;

p=newint;

fut(&p,a);

cout<<*p<

}

2.执行以下程序后,y的值是_(B)_

A)17B)18C)10D)20

#include<>

voidmain()

{staticinta[]={2,4,6,8,10};

inty=0,x,*p;

p=&a[1];

for(x=0;x<3;x++)

y+=*(p+x);

cout<

}

3.定义一下类:

classX{

inta;

public:

X(intx=0){a=x;}

};

classY:

publicX{

intb;

public:

Y(intx=0,inty=0):

X(y)

{b=x;}

};

在下列选项的说明语句中,存在语法错误的是(C)。

A.X*pa=newY(1,2)B.Xa1=Y(1,3);

C.Xb2(2,3);Y&a2=b2;D.Yb3(10);Xa3(b3);

4.下列关于虚函数描述中正确的是(B)。

A.虚函数可以是一个static类型的静态成员

B.虚函数可以是一个非静态成员

C.虚函数实现静态多态性

D.基类中采用virtual说明一个虚函数后,派生类中定义相同的原型的虚函数时,可不必加virtual说明

5.若磁盘上已存在某个文本文件,其全路径文件名为:

d:

\dir\,下列语句中能以”读文本文件”的方式打开该文件的是 (B) 。

A.ifstreamfile(“d:

\dir\”);

B.fstreamfile(“d:

\\dir\\”);

C.fstreamfile(ios:

:

in);(“d:

\dir\”);

D.ifstream*file=newifstream(“d:

\\dir\\”);

6.定义如下变量和数组:

inti;

intx[3][3]={1,2,3,4,5,6,7,8,9};

则以下语句的输出结果是(C)。

for(i=0;i<3;i++)

cout<

A.159B.147C.357D.369

7.voidg((void*)(int,int,int),int,int)的参数个数是(A)。

A.3个B.5个C.1个D.无法确定

8.现需要对list类对象使用的逻辑运算符“==”重载,以下函数声明 (28) 是正确的。

A.list&list:

:

operator==(constlist&a);

B.listlist:

:

operator==(constlist&a);

C.bool&list:

:

operator==(constlist&a);

D.boollist:

:

operator==(constlist&a);

9.若有说明:

intt[3][2],*p=t[0];能正确表示t[2][1]的一组表达式是_(D)_

A)**(t+2)+1,*(p[0]+5),**t+3

B)**(t+2+1),*p[2][1],**(t[2]+1)

C)*(t+2)+1,*p[5],*(t[0]+2)+1

D)*(*(t+2)+1),p[5],*(t[2]+1)

10.若有说明:

intt[3][2],*p=t[0];能正确表示t[0]的一组表达式是_(27)_

A)*(t+0),pB)**t,*p

C)p[0],**tD)**t+0,*p[0]

11.若有说明:

intt[3][2];则表达式:

&t[0]+1表示_(B)_

A)第1行的行指针,一级指针B)第1行的行指针,二级指针

C)元素t[0][1]的地址D)元素t[1][0]的地址

12.设有说明:

int*p,*q,*t,x=5;运行以下程序段,输出结果是_(C)_

A)5随机数B)随机数5C)出错D)55

p=newint;

q=&x;

t=p;p=q;q=t;

deletep;

cout<<*p<<'\t'<<*q<

二、阅读程序题

1.以下程序运行后,输出结果是

(1)

(2)(3)(4)。

(8分)

4*

24*

4*

24*

#include<>

intf(inta,intb){

if(a>b)returnb+a;

elsecout<

returna*f(a,b);

}

voidmain(){

intn;

n=f(1,3);

cout<

2.程序

#include""

voidfun(int*s,intn){

intf=10;

1

5

x=25

if(n==1||n==2)*s=1;

else{

fun(&f,n-2);

*s=f*5;

cout<

}

}

voidmain(){

intx=20;

fun(&x,5);

cout<<"x="<

}

程序输出的第一行是4,第二行是5,第三行是6。

3.程序

#include<>

#include<>

Doublex,u,v,f(double),g(double),t(double,double(*)(double));

voidmain(){

x=;

u=t(x,f);

v=t(x,g);

cout<<"u="<

cout<<"v="<

}

doublet(doublea,double(*f)(double)){return(*f)(a*a);}

doublef(doublex){returnx+;}

doubleg(doublex){return;}

程序输出的前2行分别是:

_7,8u=18v=14

4.程序

#include""

classbase{

inti;

public:

base(intI=0):

i(I){}

virtualintsum(){returni;}

};

classD:

publicbase{

intj;

public:

D(intI=0,intJ=0):

base(I),j(J){}

intsum(){returnbase:

:

sum()+j;}

};

voidcall(baseb){cout<<"sum="<<()<

voidmain()

sum=10

sum=10

sum=10

{baseb(10),*pb;

Dd(10,47);

pb=&d;

call(b);

call(d);

call(*pb);

}

程度输出的第一行9,是第二行是10第三行是11。

5.

3

5

7

程序

#include<>

intf(intx){

ints=0;

for(intj=2;j<=x;j++)

if(x%j==0){

x/=j;

s+=j;

}

returns;

}

voidmain(void){

for(inti=3;i<10;i++)

if(i==f(i))cout<

}

程序运行后输出的第一行是12第二行是13第三行是14。

6.程度

#include""

voidf(intj){

if(!

j){cout<

if(j%2){f(j/10);cout<

else{cout<

}

voidmain(){

f(0);cout<<'\n';

f(1357);cout<<'\n';

f(2468);cout<<'\n';

}

程序运行后输出的第一行是第二行是第三行是

7.程序

#include<>

classX{

public:

voidvirtualf(){cout<<"X:

11"<

voidvirtualg(){cout<<"X:

22"<

};

B:

:

55

B:

:

44

X:

:

22

classA:

publicX{

public:

voidf(){cout<<"A:

:

33"<

};

classB:

publicA{

public:

voidf(){cout<<"B:

44"<

voidg(inti=10){cout<<"B:

55"<

};

voidmain(void)

{

Bb;

X*px=&b;

()

px->f();

px->g();

}

程序输出的第一行是,第二行是,第三行是_。

8.程序

#include<>

classA

x=1A_1

A_2

A_2

2~A

A_2

3~A

A_2

4~A

4~A

3~A

{intx;

public:

A(inta)

{x=a;

cout<<"x="<

}

A(A&s){

x=+1;cout<<"A_2"<<'\n';

}

~A(){cout<

};

voidmain(void)

{

Af1

(1),f2(f1);

f2=A(f1);f1=A(f2);f2=A(f1);

}

程序共输出行,第一行是,第四行是,第六行是。

9.程序

x=4,y=10

x=4,y=16

x=4,y=6

i=34

x=8,y=7

#include<>

classA{

inty;

staticintx;

public:

operatorint(){returnx+y;}

Aoperator++(int){returnA(x++,y++);}

A(intx=2,inty=3){A:

:

x=x+x;A:

:

y=y+y;}

voidprint(){cout<<"x="<

};

intA:

:

x=23;

voidmain(void)

{Aa(30,5),b(10,8),c;

();

();

();

inti=a+b;cout<<"i="<

c++;

();

}

程序输出的第一行是,第二行是,第三行是,第四行是,第五行是。

10.#include<>

inti=1;

intfac(intn)

{staticintf=1;

6

6,6

f=f*n;return(f);

}

voidmain()

{inti,p=0;

for(i=1;i<=3;i++)p=fac(i);

cout<

p=0;

for(i=1;i<=3;i++)p=p+:

:

i++;//A

cout<

p=1;

for(i=1;i<=3;i++)p=p*--:

:

i;//B

cout<

}

问题1:

该程序的第一行输出为(,第二行输出为

11.下列程序的输出结果是。

#include""

inta=100;

voidfun(inti,intj,int*k){

j+=i;

*k=j-i;

}

voidmain(){

inta,b,c;

fun(17,18,&a);

fun(19,a,&b);

18,18,18

fun(a,b,&c);

cout<

}

12.以下程序运行后,输出结果是。

#include<>

classA{

public:

inti;

voidprint(){cout<

};

classB:

publicA{

public:

virtualvoidprint(){cout<

};

classC:

publicB{

3insertC

3insertA:

:

i

3insertC

3insertA:

:

i

10insertA

public:

C(){A:

:

i=10;}

inti;

voidprint()

{

cout<

cout<

:

i\n";

}

};

voidmain(){

Aa;

A*pa;

Bb,*pb;

Cc,*pc;

=1+=1+=1));

pc=&c;

pc->print();

pb=&c;

pb->print();

pa=&c;

pa->print();

}

三、完善程序

1.

1.下面程序的功能是:

先输入一行字符串,并从输入的字符串中找到最小的字符(其ASCII值最小),用min保存该字符。

然后将该字符前的所有字符顺序向后移动一个字符的位置。

最后,将保存的字符放在该字符串的第0个位置上。

例如:

设输入的字符串为“bcdfae”,其中字母a为最小字符,经移动处理后,输出的字符串为“abcdfe”。

#include<>

voidfun(){//char*str

charmun,*q,*p;

;//p=q=str

min=*p++;

while(*p!

=0){

if(){min=*p;q=p;}//*p

p++;

}

p=q;

While(){*p=*(p-1);;}//q>str//p--,q--

*q=min;

}

voidmain(){

charstr[80];

(str,80);

fun(str);cout<

}

2.本程序被完善后输出以下结果。

C++langugeprogramming

Theendatthistimeofday!

#include<>

#include<>

classA{

public:

staticinti;

char*ps;

A(char){//*s

ps=newchar[strlen(s)+1];

strcpy(,s);//ps

}

~A(){

if()cout<<"Theend";//i==0

elsecout<<"atthistimeofday!

\n";

if(ps)delete[]ps;

i++;

}

A&operator=(A&b){

if{

ps=newchar[strlen()+1];//

strcpy(ps,;

}

elseps=0;

return;//*this

}

};

intA:

:

i;

voidmain(){

As1("programming"),s2("C++languge");

cout<<<<'\t';

s2=s1;

cout<<<<'\n';

}

3.以下程序功能是:

从一个字符串str中删除或添加一个指定的字符,若指定的字符c出现在str中,则从str中删除第一个值为c的字符;否则把字符c添加到str的尾部。

在程序中,函数dele()从字符串中删除一个字符;函数add()添加一个字符到字符尾部;函数search()用于查找指定的字符是否在字符串中,若在,则返回所在位置,否则返回0。

#include<>

#include<>

char*sercher(char*s,charch){

while(*s)

if(*s++==ch)return;//s-1

return0;

}

voiddele(char*s,charch){

char*p1=search(s,ch),*p2=p1+1;

while(*p2)*p1++=//*p2++

*p1='\0';

}

voidadd(char*s,charch){

while(*s)s++;

=ch;*s='\0';//*s++

}

voidmain(){

charstr[80]="abc12123",c;

cout<

cin>>c;

void;if(search(str,c))fp=dele;//(*p)(char*,char)

elsefp=add;

fp();cout<

}

4.班主任根据全班n个学生某课程的考试成绩建立一个链表,每个节点包括学号、成绩和该成绩在全班的名次。

最后按排名顺序输出学号和成绩。

[程序10分]

#include<>

structnode{

intgrade,n;

longnum;

node*point;

};

node*trans(node*h,intn){//建立含报名者的档案链表

node*p;

p=newnode;

cin>>p->num>>p->grade;

p->n=0;;//node*h=p

for(inti=0;i

p->point=newnode;;//p=p->point;

cin>>p->num>>p->grade;

p->n=0;

}

p->point=NULL;

returnh;

}

node*sort(node*head,intn){//按成绩排名次并输出

node*p,*q;

intt=0,k=1;

p=head;

while(k<=n){

p=head;

while(p!

=NULL)

if(&&p->grade>t){//p->n==0

t=p->grade;q=p;p=p->point;

}

elsep=p->point;

q->n=k;

;//k++;

;//t=0;

cout<num<<'\t'<grade<<'\t'<n<<'\n';

}

returnhead;

}

voidmain(){

node*student;intn;

student=NULL;cin>>n;

student=trans(student,n);

cout<<"\nnumber:

"<<'\t'<<"grade:

"<<'\t'<<"排名:

\n";

student=sort(student,n);

}

5.以下程序定义了一个二维坐标点类Point,派生矩形类Square。

矩形左下角坐标从基类继承,矩形类只定义右上角坐标,还定义表示颜色的字符串。

执行下面的主程序将得到结果:

矩形s1:

x=1y=3width=5,high=6,color=red

矩形s2:

x=1y=3width=5,high=6,color=redYellow

[程序10分]

#include<>

#include<>

classPoint{

private:

doublex,y;

public:

Point(doublexv=0,doubleyv=0){x=xv;y=yv;}

doublegetx(){returnx;}

doublegety(){returny;}

voidShow(){cout<<"x="<

};

classSquare:

publicPoint{//带颜色的矩形(square)类

doublehx,hy;

char*color;

public:

Square(){hx=0;hy=0;}

Square(doublexv,doubleyv,doublehxv,doublehyv,char*s):

(11){

hx=hxv;hy=hyv;

color=newchar[9];

strcpy(color,s);

}

Square():

Point(rr){//拷贝构造函数//Square&rr

hx=;hy=;

color=newchar[strlen()+6];//

strcat(strcpy(),"");//color,

//Yellow

}

voidShow();

};

voidSquare:

:

Show(){//输出矩形的左下角坐标、宽度、高度和颜色

Point:

:

;//Show()

cout<<"\twidth="<

cout<<",color="<

}

voidmain(){

Squares1(1,3,6,9,"red"),s2(s1);

cout<<"矩形s1:

"<<'\t';

();

cout<<"矩形s2:

"<<'\t';

();

}

6.以下程序实现一个由动态数组构成的线性表的类,在该类的线性表中存放若干个实数。

通过重载运算符实现两个线性对应元素间的赋值,重载提取运算符完成线性表的输入,重载插入运算符完成线性表的输出。

[程序10分]

#include<>

classList{

intsize;//表示动态线性

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

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1