}
执行程序后输出的第一行是(12),第二行是(13)。
9.【程序】(3分)
#include
char*str(char*p1,char*p2)
{
char*p=p1;
while(*p)p++;
*p++='';
while(*p++=*p2++);
*p++='';
returnp1;
}
voidmain(void)
{
chars1[200]={"NanJing"};
chars2[200]={"is"};
chars3[]={"good"};
cout<cout<cout<'<'<}
执行程序后输出的第一行是(14),第二行是(15),第三行是(16)。
10.【程序】(2分)
#include
classA{
intx,y;
public:
A(inta,intb){x=a;y=b;}
virtualvoidfun1(){cout<<"x+y="<};
classB:
publicA{
intm,n;
public:
B(inta,intb,intc,intd):
A(c,d){m=a;n=b;}
voidfun1(){cout<<"m*n="<};
voidprint(A&ra){ra.fun1();}
voidmain()
{
Aa(10,20),*pa;
B*p;
p=newB(20,30,40,50);
p->fun1();
pa=&a;pa->fun1();
pa=p;pa->fun1();
print(a);
deletep;
}
执行程序后输出的第二行是(17),第三行是(18)。
●完善程序题(共12分)
11.设有一条环形铁路,共有n个车站。
现有检查组去检查各个车站的服务质量,从第i个车站开始检查,每隔m(已检查过的车站不计算在内)个车站作为下一个要检查的车站序号,直到所有车站都检查完为止。
下列程序的功能是:
按以上要求计算出一次检查的车站序号,并输出计算的序号序列和检查循环的圈数。
例如:
共有20个车站,车站的序号依次为:
1,2,3~20;若要求从第3个车站开始检查,间隔5个车站,则检查车站的顺序为:
3->8->13->18->4->10->16->2->11->19->7->17->9->1->15->14->20->6->12->5。
函数check()中的count记录检查完所有车站时要绕环形铁路的圈数。
【程序】(4分)
#include
#defineN100
intcheck(intx[],inty[],intn,inti,intm)
{
intk=0,k1,count=0;
x[0]=n;
for(intj=1;jx[j]=j;
y[k++]=i;
x[i]=-1;
j=i;
while((19))
{
k1=0;
while(k1j++;
if(j>=n){
count++;
j=(20);
}
if(x[j]!
=-1)k1++;
}
y[k++]=(21);
x[j]=-1;
}
returncount;
}
voidmain(void)
{
intA[N],B[N],n,m,i,j,k=0,num;
cout<<"输入车站个数n,第一个开始检查的车站号i,间隔的车站数m:
";
cin>>n>>i>>m;
num=(22);
cout<<"检查顺序:
"<for(j=0;jcout<";
cout<
cout<<"全部检查完各个车站,共要循环的圈数为:
"<}
12.以下程序的功能是求满足以下条件的所有三位数:
(1)该三位数是某一个二位数的平方;
(2)该三位数的个位数、十位数和百位数各不相同,即1到9这九个数字在该数中至多只允许出现一次。
要求每行输出五个数。
例如,满足以上条件的所有三位数有13个,分别为:
169196256289324
361529576625729
784841961
【程序】(4分)
#include
intf(inty)
{
inti,j,k;
i=y%10;
j=(23);
k=y/100;
if((24))
return0;
for(i=11;i<31;i++)
if((25))return1;
return0;
}
voidmain(void)
{
intx[22]={0},count=0;
for(inti=102;i<987;i++){
if(f(i)){
(26);
count++;
}
}
for(i=0;icout<if((i+1)%5==0)cout<<'\n';
}
cout<<'\n'<<"共有:
"<}
13.在以下程序中,函数creat()根据键盘一次输入的整数建立一条单向无序链表,链表上的每一个结点包含一个整数;函数sort()根据链表结点的数据按从小到大的顺序将链表调整为一条有序链表;函数print()将链表上的整数依次输出;函数del()将链表删除。
排序算法提示:
(1)初始时,使p指向链表的首结点;
(2)从p之后的所有结点中找出data值最小的结点;(3)让p1指向该结点,并将p指向结点的data值与p1指向结点的data值进行交换,让p指向下一个结点;(4)重复步骤
(2)(3),直至p指向链表的最后一个结点为止。
【程序】(4分)
#include
structNode{
intdata;
Node*next;
};
Node*sort(Node*head)
{
Node*p=head,*p1,*p2;
if(p==NULL)returnhead;
while(p->next!
=NULL){
p1=p;
(27);
while(p2!
=NULL){
if(p2->datadata)(28);
p2=p2->next;
}
if(p!
=p1){
intt;
t=p->data;
p->data=p1->data;
p1->data=t;
}
p=p->next;
}
returnhead;
}
Node*creat(void)
{
Node*h=NULL,*p,*p1;
intdata=1;
while(data){
cout<<"输入一个整数,0表示输入结束:
";
cin>>data;
if(data){
p=newNode;
p->data=data;
p->next=NULL;
if(h==NULL)
h=p1=p;
else{
(29);
p1=p;
}
}
}
returnh;
}
voidprint(Node*p)
{
while(p){
cout<data<<'\t';
p=p->next;
}
cout<<'\n';
}
voiddel(Node*h)
{
Node*p;
while(h){
p=h;
(30);
deletep;
}
}
voidmain(void)
{
Node*head;
head=creat();
cout<<"链表上的数据为:
";
print(head);
head=sort(head);
cout<<"排序后链表上的数据为:
";
print(head);
del(head);
cout<}