};
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