天津大学C++期末考试样卷及答案.docx

上传人:b****7 文档编号:8982171 上传时间:2023-02-02 格式:DOCX 页数:12 大小:19.91KB
下载 相关 举报
天津大学C++期末考试样卷及答案.docx_第1页
第1页 / 共12页
天津大学C++期末考试样卷及答案.docx_第2页
第2页 / 共12页
天津大学C++期末考试样卷及答案.docx_第3页
第3页 / 共12页
天津大学C++期末考试样卷及答案.docx_第4页
第4页 / 共12页
天津大学C++期末考试样卷及答案.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

天津大学C++期末考试样卷及答案.docx

《天津大学C++期末考试样卷及答案.docx》由会员分享,可在线阅读,更多相关《天津大学C++期末考试样卷及答案.docx(12页珍藏版)》请在冰豆网上搜索。

天津大学C++期末考试样卷及答案.docx

天津大学C++期末考试样卷及答案

天津大学C++期末考试样卷及答案

一.单项选择题(每题1分,共20分)

1.C++源程序文件的扩展名是。

B

A).CB).CPPC).DLLD).EXE

2.下列属于C++合法的字符常量是C。

A)'\97'B)“A”)C'\t'D)“0”

3.设constintB=6;inta[12];则下列错误的是。

A

A)B+=3;B)a[5]=B+3;C)intx[B+3];D)a[B+3]=25;

4.a、b均为int型且b工0,则表达式a-a/b*b的值为C。

A)0B)aC)a被b除的余数部分D)a被b除商的整数部分

5.设inta=5,b=6,c=7;则cout<<((a+b)

=c)<<","<<((a+b)

A)0,0B)0,7C)1,0D)1,7

6.以下关于编译预处理的叙述中,错误的是C。

A)预处理命令必须以“#”始B)一条预处理命令行必须独占一行

C)一条预处理命令行必须以分号结束D)预处理命令是在正式编译之前先被处理的

7.设int型数据占4个字节,若有定义:

intx[10]={0,2,4};则sizeof(x)的值为C。

A)3B)12C)40D)10

8.下列关于C++函数的叙述中,正确的是。

A)每个函数至少要有一个形参B)C每个函数都必须有返回值

C)函数在被调用之前必须先声明D)函数不能自己调用自己

9.下面有关重载函数的说法中正确的是

C)重载函数必须有不同的形参表D)重载函数名可以不同

10.表达式strcmp("box","boss")的值是A。

A)正整数B)负整数C)0D)不确定的数

11.设inta[3][4],*p=a[0];以下不能正确访问数组元素a[i][j]的是A。

A)*(a+i+j)B)*(*(a+i)+j)C)*(a[i]+j)D)p[4*i+j]

12.当一个派生类公有继承一个基类时,基类的所有public成员成为派生类的D。

A)友元B)private成员C)protected成员D)public成员

13.设inta=3,*p=&a;则*p的值是D。

A)变量a的地址值B)无意义C)变量p的地址值D)3

14.设inti=5,f=15;则执行语句if(i=O)f-=5;后i和f的值分别是C。

A)5,15B)5,10C)0,15D)0,10

15.设int*p;以下对new运算符的正确使用形式是C。

A)p=newa[10];B)*p=newint[10];

C)p=newint[10];D)p=newint[5]={1,2,3,4,5,6};

16.下列关于动态联编的描述错误的是C。

A)动态联编在运行时选择联编函数B)动态联编也称为动态多态性

C)函数重载和运算符重载属于动态联编D)动态联编可用来选择虚函数

17.设二叉树的高度为k(k>0)若其包含的结点总数为2k+1-1,则该二叉树是B。

A)完全二叉树B)满二叉树C)二叉排序树D)普通的二叉树

18.设用一个大小为6的一维数组存储顺序循环队列,若当前front和rear的值分别为3和5,当从队列中删除一个元素,再加入两个元素后,front和rear的值分别是D。

A)5和0B)4和7C)无法完成要求的操作D)4和119.以下关于关键字的描述中错误的是C。

C)不同元素的关键字值可以相同D)每个元素的关键字必须是唯一的

20.直接插入排序在被排序的数据B时效率较高。

A)完全无序B)基本有序C)逆序排列D)最大值与最小值相差不大二.写出以下程序的运行结果(每题4分,共20分)

1.#include

voidmain(){

inta[8]={12,25,33,5,8,16,51,22},i;

int*p=a;

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

cout<<*(p+i*2)<

}

程序运行的结果是:

1233851

2.#include

intfun(){

staticintd2=0,d1=1;

intt=d2+d1;

d1=d2;

d2=t;

returnd2;

}

voidmain(){

cout<

}

程序运行的结果是:

112358

3.#includeclassA{public:

A(){a=b=10;}

A(inti,intj){a=i;b=j;}

voidoperator+=(constA&x){a+=x.a;b+=x.b;}

voidprint();

private:

inta,b;

};

voidA:

:

print(){cout<<"a="<

Am,n(15,18);

m.print();n.print();

m+=n;

m.print();n.print();

}

程序运行的结果是:

a=10,b=10

a=25,b=28a=15,b=18

4.#include

voidmain(){

intx=3,y=3;

switch(x%2){

case1:

switch(y%x){

case0:

cout<<"first\n";

case1:

cout<<"second\n";break;

default:

cout<<"hellow\n";

}

case2:

cout<<"third\n";

}

}

程序运行的结果是:

first

second

third

5.#include

#include

voidfun(char*str){

chart;

inti,j;

for(i=1;i

t=str[i];

for(j=i-1;j>=0&&t

str[j+1]=str[j];

str[j+1]=t;

}

}

voidmain(){

chars[]="CFBEAD";

fun(s);

cout<

}

程序运行的结果是:

ABCDEF

6.#include

classpoint{

private:

intx,y;

public:

point(intx1=0,inty1=0){

x=x1;

y=y1;

}

virtualvoidmove(intx1,inty1){y+=y1;

virtualvoiddisp(){

cout<<"点:

("<

}

};

classline:

publicpoint{

private:

intxx,yy;

public:

line(intx1,inty1,intx2,inty2):

point(x1,y1){

xx=x2;

yy=y2;

}

voidmove(intx1,inty1){

point:

:

move(x1,y1);

xx+=x1;

yy+=y1;

}

voiddisp(){

point:

:

disp();

cout<<"-点:

("<

}

};

voidmain(){

linel(2,4,6,8);

pointp(l),*pp=&l;

p.move(3,3);

pp->move(4,4);

p.disp();

cout<

pp->disp();

cout<

}

结果:

点:

(5,7)

点:

(6,8)-点:

(10,12)

Pressanykeytocontinue

三.程序填空(每空2分,共32分):

1.设一个数列的第1、2项分别为0和1,以后每个奇数编号的项是前两项之和,偶数编号项是前两项之差的绝对值。

下面程序的功能是生成该数列的前20项并存入一个数组x,然

后将这20个数存入文本文件data.txt。

#include

#include

voidmain(){

intx[20],i;

x[0]=0;x[1]=1

i=2;

do{

x[i+1]=abs(x[i-1]-x[i]);

i=;//i+2

}while();//i<19if(!

fout)return;

for(;i<20;j++){//i=0

fout<

fout.close();

1234”。

}

2.以下程序实现将任意正整数转换成相应字符串。

例如,将1234转换为

#include

classCstack{//定义字符栈

chars[80];

inttop;//栈顶指示器

public:

Cstack(){top=-1;}//把栈置为空

voidpush(charch){//将ch入栈

if(top==79)return;

s[++top]=ch;

}

charpop(){//出栈并返回栈顶元素值(栈空时返回0)

if(top==-1)return0;

return;//s[top--]

};

voiditos(intnum,char*str){//将num转换为字符串并存入str

Cstacks1;

while(num!

=0){

s1.push();//'0'+num%10

num/=10;

}

charch;

for(inti=0;(ch=s1.pop())!

=0;i++);//str[i]=ch

str[i]=0;

}

voidmain(){chars[80];itos(1234,s);cout<

3.以下函数的功能是删除字符串最前面和最后面的所有空格。

#include

voidDelSpace(char*s){

for(inti=strlen(s)-1;i>=0;i--)if(s[i]!

='')break;//删除后面的空格

s[]=0;//i+1

char*p=s;

while(*s!

=0)s++;//&&*s==删除'前面‘的/空/格

strcpy();//p,s

}

4.以下程序输出数组a中重复出现最多的那个数以及该数重复出现的次数和首次出现的位置。

#include

voidmain(){inti,j,k,t,,n(0);//M=20

inta[20]={1,2,3,4,5,6,7,8,4,5,4,5,4,6,7,1,2,3,4,5};

for(i=0;i

for(k=1;j=i+1;j

if()k++;//a[i]==a[j]

if(n

}

cout<<"重复最多的数是:

"<

"<

"<

}

5.在Chain类中增加成员函数Insertx,函数的功能是:

在表中查找有无值为x的元素,若

有,则显示“已存在”,否则,将值为x的元素插到表头

voidinsertx(charx){

Node*p=head->next,*q;

while()p=p->next;//p!

=NULL&&p->data!

=x

if(p==NULL){

q=;//newNode

q->data=x;

=head->next;//q->next

head->next=q;

}

else

cout<

"\n;

四.简答题(12分)

1.假设S和X分别表示进栈和出栈操作,由输入序列“ABC”得到输出序列“BCA”的操

作序列为SSXSXX,则由“a*b+c/d”得到“ab*cd/+”的操作序列什么?

(4分)。

SXSSXXSSXSSXX

2.已知一个散列表如下图所示:

51

64

29

20

35

38

0

12

34

5

6

78

91011

12

其散列函数为h(key)=key%13,处理冲突的方法为现行地址序列探查法。

请回答下列问题:

(1)将关键字35,20,33,38,51,64存入哈希表。

(3分)

(2)对表中关键字29和64进行查找时,所需进行的比较次数各为多少?

(1分)

291次,643次

3.以下是两个重载函数的原型声明:

voidoverload(inta,intb,doublec=5.5);

voidoverload(intx,inty);请问此函数重载正确吗?

如果不正确请说明原因。

(4分)

不正确,因为第一个函数的第三个参数有缺省值,调用时也可以给两个实参;而第2个函数与第1个函数形成重载,调用时也需要2个参数,此时,将会产生二义性,系统无法判断应该调用哪一个函数。

五.编写程序。

(12分)

编写函数用辗转相除法求整数a和b的最大公约数。

算法为:

将较大的数放在变量a中,较

小的数放在b中。

然后求a除以b的余数r。

如果r为0,则除数b即为最大公约数;否则,将b存入a,将r存入b,反复求a和b的余数,直到余数为0。

在主函数中从键盘输入两个整数,调用上述函数求出它们的最大公约数并输出。

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

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

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

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