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;it=str[i];
for(j=i-1;j>=0&&tstr[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;ifor(k=1;j=i+1;jif()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。
在主函数中从键盘输入两个整数,调用上述函数求出它们的最大公约数并输出。