};
void main( void)
{ T t1(2) ; S1 t2(3,4) ;
S2 t3(5) ; S t4(6,7,8,9) , * p;
p=&t4;
p->printS( ); p->printS1( ) ; p->printS2( ) ;
cout<}
执行程序后,输出的第二行是___(5)___ ,第三行是___(6)___ ,第四行是___(7)___ 。
4.[程序]
#include
class A{
public :
int x,y;
A(int a,int b)
{x=a; y=b;}
virtual void display( ) { cout<};
class B : public A{
public :
int z;
B(int a,int b,int c) :A( a,b) { z =c; }
void display( ) { cout<< x<<'\t'<< y<<'\t'<< z<< endl; }
};
class D: public B {
public :
int m;
D(int a,int b,int c,int d) :B( a,b,c) { m = d; }
void display( ) { cout<< x<<'\t'<< y<<'\t'<< z<<'\t'<};
class E :public A{
public :
int n;
E(int a,int b,int c) :A( a,b) {n =c; }
void display1( ) { cout<<"E::"<};
void fun(A * p1) {
p1-> display ( ) ;
}
void main( void) -
A b0(10,20) , *p;
p = &b0; fun(p) ;
B b1(30,40,50) ;
D d1( 31,41, 51,61) ;
p = &b1; fun( p) ;
p = &d1; fun( p) ;
E e1(100,200 ,300) ;
p = &e1; fun(p) ;
}
执行以上程序后,输出一共___(8)___行,其中第二行是___(9)___,第四行是___(10)___ 。
三、操作题(共50分)
1.以下程序首先建立一条链表,然后按照如下顺序删除链表中的结点:以
链表的第一个结点为1号结点开始依次搜索,删除所有序号为3的倍数的结
点,即删除第3、6、9、……个结点,当搜索一遍结束后再从链表头部继续此操
作,直到链表的结点个数少于3个为止。(10分)
程序输出为:
当前链表中的结点依次为:23 12 32 54 74 25 65 94 17 72
第1轮删除的结点为:32 25 17
当前链表中的结点依次为:23 12 54 74 65 94 72
第2轮删除的结点为:54 94
当前链表中的结点依次为:23 12 74 65 72
... ...
第5轮删除的结点为:72
链表中剩余的结点为:23 12
[程序]
#include
struct node {
int data;
node *next;
};
node * insert(int x, node * head)
{
node *p;
p = new node;
p -> data = x;
p-> next= head;
return p;
}
void fun( node *head, int n)
{ node *p, *p1,*q;
int i,num =1;
if(!head) return;
while(n >2){
cout<<"当前链表中的结点依次为:";
p=head;
while(p){
cout<data<<" ";
p=p->next;
}
cout< p=head;
___(1)___ ;
i=2;
while(q) {
if(i%3==0){
cout<< q -> data<<'\t';
___(2)___ ;
delete q;
q=p->next;
n--;
i++;
}
else{
p=p->next;
i++;
__(3)___;
}
}
num++;
cout< }
cout<<"链表中剩余的结点为:";
p= head;
while(p){
cout<data<<" ";
___(4)___;
}
cout<}
void main( void)
{
int a[10] ={23, 12, 32, 54, 74, 25, 65, 94, 17, 72 } ;
node * head =0;
for(int i= 9; i >=0; i-- )
___(5)___ ;
fun(head,10);
}
【要求】
·打开T盘中MYFA. txt文件,将其复制到文件myfa.cpp中(或把上述程
序录入到文件myfa.cpp中),根据题目要求及程序中语句之间的逻辑关系对程
序进行完善。程序中的注解可以不输入。
·完善后的源程序文件myfa. cpp必须放在T盘的根目录下,供阅卷用。
2.程序改错(20分)
【题目】以下程序的功能是:求1000000以内的所有平方回文数。平方回文
数是指该整数为某一整数的平方,且该整数的各位数字呈中心对称。
正确程序的输出结果如下:
1000000以内的平方回文数为:
121 484 676 10201 12321 14641 40804 44944 69696 94249 698896
含有错误的源程序如下:
#include
int pow(int m,int n) //计算m的n次方
{ int t=0;
for(int i=0; i t*=m;
return t;
}
int pingfanghuiwen( int a)
{ int temp,k,num, sum;
int count,i,n;
n=a*a;
count=0;
while( 1){ //计算n的位数
k=n-pow(10,count);
if(k<0)
continue ;
count ++ ;
}
sum =0;
num = n;
for(i=0; i temp = num;
sum= sum+ temp*pow(10, count -i);
num= num/10;
}
if(sum==n)
return 1;
else
return 0;
}
void main()
{ int i;
cout<<"1000000以内的平方回文数为:"< for(i=10;i<1000; i++)
if( pingfanghuiwen(i))
cout< cout< }
【要求】
·打开T盘中MYFB.txt文件,将其复制到文件myfb. cpp中(或把上述程
序录入到文件myfb. cpp中),根据题目要求及程序中语句之间的逻辑关系对程
序中的错误进行修改。程序中的注解可以不输入。
·改错时,可以修改语句中的一部分内容,增加少量的变量说明、函数原型
说明或编译预处理命令,但不能增加其他语句,也不能删除整条语句。
·改正后的源程序文件myfb. cpp必须放在T盘的根目录下,供阅卷用。
3.程序编程题(20分)
【题目】字符串的并集定义为两个字符串中所包含的所有字符(并集中字符
的排列顺序不做要求,但不能重复)。试定义一个字符串类STR,求两个字符串
的并集。具体要求如下:
(1)私有数据成员
·char *p1,*p2;存放两个原始字符串。
·char *p;存放两个字符串的并集。
(2)公有成员函数
·STR( char s1[],char s2[]);初始化原始字符串并为指针p分配存储空间。
·void del(char *p);删除p指向字符串中的重复字符。
·void fun();求指针p1和p2所指向的两个字符串的并集,结果存人指针p所指向的存储空间,注意调用del()函数删除结果中的重复字符。
·void print();输出两个原始字符串及它们的并集。
·~STR();析构函数,释放动态内存。
(3)在主函数中对该类进行测试。
输出示例:
原字符串:adb12345 abcdefg23xz
它们的并集为:adb12345cefgxz
【要求】
源程序文件名必须为myfc.cpp,并放在T盘根目录下,供阅卷用。
参考答案:
一、选择题
1.A 2.B 3.D 4.C 5.B
本套试卷的视频演示见:school.njwww.net
二、填空题
1.6 15
2. 16 31
3. 50 80 80
4. 20 80 80
5. 6 7
6. 10 8
7. 5 2 2 1
8. 4
9. 30 40 50
10. 100 200
三、操作题
1 (1) q =head ->next
(2) p -> next =q ->next
(3) q =q ->next
(4) p =p ->next
(5) head =lnsert(a[i] , head)
2.
(1) 第3行的int t=0修改为 int t=1;
(2) 第16行的continue修改为 break
(3)第23行的count-i 修改为 count-i-1
(4)第34行的cout<
3.
#include
#include
class STR{
char *p1, *p2, *p;
public :
STR(char s1[ ] , char s2[ ])
{ int n1 = strlen ( s1) + 1 , n2 = strlen( s2) + 1 ;
strcpy( p1 = new char[n1] , s1) ;
strcpy( p2 = new char[n2] , s2) ;
p = new char[n1 + n2 + 1] ;
}
void fun( )
{ char *s=p1, *p0 =p;
while(*p0++=*s+);
s=p2;
p0--;
while(*p0++=*s++);
del(p);
}
void del( char * s)
{ while(*(s+1)){ //4分
for( char *s1 =s+1; *s1; s1++ )
if(*s==*s1){
*s1='\0';
strcat( s,s1 +1) ;
s1--;
}
s++;
}
}
void print()
{ cout<<"原字符串:";
cout< cout<<"它们的并集为:"<}
~STR()
{ delete []p1;
delete []p2;
delete []p;
}
};
void main( ) //2分
{ STR s1("adb12345", " abcdefg23xz") ;
s1.fun( );
s1.print( );
}
本套试卷的视频讲解见:http://school.njwww.net/kecheng/detail_921575