天津大学C++期末考试样卷及答案Word格式文档下载.docx
- 文档编号:18426004
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:10
- 大小:19.91KB
天津大学C++期末考试样卷及答案Word格式文档下载.docx
《天津大学C++期末考试样卷及答案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《天津大学C++期末考试样卷及答案Word格式文档下载.docx(10页珍藏版)》请在冰豆网上搜索。
intx[10]={0,2,4};
则sizeof(x)的值为C。
A)3B)12C)40D)10
8.下列关于C++函数的叙述中,正确的是。
A)每个函数至少要有一个形参 B)C每个函数都必须有返回值
C)函数在被调用之前必须先声明 D)函数不能自己调用自己
9.下面有关重载函数的说法中正确的是C。
A)重载函数必须具有不同的返回值类型 B)重载函数形参个数必须不同
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=0)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和1
19.以下关于关键字的描述中错误的是C。
A)关键字可由元素的一个或多个数据项组成B)可以按关键字进行查找
C)不同元素的关键字值可以相同D)每个元素的关键字必须是唯一的
20.直接插入排序在被排序的数据B时效率较高。
A)完全无序B)基本有序C)逆序排列D)最大值与最小值相差不大
二.写出以下程序的运行结果(每题4分,共20分)
1.#include<
iostream.h>
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)<
endl;
}
程序运行的结果是:
1233851
2.#include<
intfun(){
staticintd2=0,d1=1;
intt=d2+d1;
d1=d2;
d2=t;
returnd2;
for(inti=0;
6;
fun()<
“”;
112358
3.#include<
classA{
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="
a<
b="
b<
Am,n(15,18);
m.print();
n.print();
m+=n;
a=10,b=10
a=15,b=18
a=25,b=28
4.#include<
intx=3,y=3;
switch(x%2){
case1:
switch(y%x){
case0:
first\n"
;
second\n"
break;
default:
cout<
hellow\n"
case2:
third\n"
first
second
third
5.#include<
#include<
string.h>
voidfun(char*str){
chart;
inti,j;
for(i=1;
strlen(str);
i++){
t=str[i];
for(j=i-1;
j>
=0&
t<
str[j];
j--)
str[j+1]=str[j];
str[j+1]=t;
chars[]="
CFBEAD"
fun(s);
s<
ABCDEF
6.#include<
classpoint{
intx,y;
point(intx1=0,inty1=0){
x=x1;
y=y1;
virtualvoidmove(intx1,inty1){
x+=x1;
y+=y1;
virtualvoiddisp(){
点:
("
x<
'
'
y<
)'
classline:
publicpoint{
intxx,yy;
line(intx1,inty1,intx2,inty2):
point(x1,y1){
xx=x2;
yy=y2;
voidmove(intx1,inty1){
point:
move(x1,y1);
xx+=x1;
yy+=y1;
voiddisp(){
disp();
-点:
xx<
yy<
linel(2,4,6,8);
pointp(l),*pp=&
l;
p.move(3,3);
pp->
move(4,4);
p.disp();
结果:
(5,7)
(6,8)-点:
(10,12)
Pressanykeytocontinue
三.程序填空(每空2分,共32分):
1.设一个数列的第1、2项分别为0和1,以后每个奇数编号的项是前两项之和,偶数编号项是前两项之差的绝对值。
下面程序的功能是生成该数列的前20项并存入一个数组x,然后将这20个数存入文本文件data.txt。
fstream.h>
math.h>
voidmain(){
intx[20],i;
x[0]=0;
x[1]=1
i=2;
do{
x[i]=;
//x[i-1]+x[i-2]
x[i+1]=abs(x[i-1]-x[i]);
i=;
//i+2
}while();
//i<
19
if(!
fout)return;
for(;
20;
j++){//i=0
fout<
x[i]<
fout.close();
2.以下程序实现将任意正整数转换成相应字符串。
例如,将1234转换为“1234”。
classCstack{//定义字符栈
chars[80];
inttop;
//栈顶指示器
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;
(ch=s1.pop())!
=0;
i++);
//str[i]=ch
str[i]=0;
voidmain(){chars[80];
itos(1234,s);
3.以下函数的功能是删除字符串最前面和最后面的所有空格。
voidDelSpace(char*s){
for(inti=strlen(s)-1;
i>
i--)if(s[i]!
='
'
)break;
//删除后面的空格
s[]=0;
//i+1
char*p=s;
while(*s!
=0)s++;
//&
*s==’‘//删除前面的空格
strcpy();
//p,s
4.以下程序输出数组a中重复出现最多的那个数以及该数重复出现的次数和首次出现的位置。
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};
M-1;
for(k=1;
j=i+1;
j<
M;
j++)
if()k++;
//a[i]==a[j]
if(n<
k){;
t=i;
}//n=k
重复最多的数是:
a[t]<
重复次数:
n<
首次位置:
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
已存在!
\n;
四.简答题(12分)
1.假设S和X分别表示进栈和出栈操作,由输入序列“ABC”得到输出序列“BCA”的操作序列为SSXSXX,则由“a*b+c/d”得到“ab*cd/+”的操作序列什么?
(4分)。
SXSSXXSSXSSXX
2.已知一个散列表如下图所示:
51
64
29
20
35
38
1
2
3
4
5
6
7
8
9
10
11
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。
在主函数中从键盘输入两个整数,调用上述函数求出它们的最大公约数并输出。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 天津大学 C+ 期末 试样 答案