計算機(jī)應(yīng)用專業(yè)上機(jī)考試數(shù)據(jù)結(jié)構(gòu)輔導(dǎo)

  • 發(fā)布時間:2024-09-15 16:21:23
  • 來源:本站整理
  • 閱讀:
導(dǎo)讀:
  編一C程序,它能讀入集合A的一串整數(shù)(以-9999為結(jié)束標(biāo)記,整數(shù)個數(shù)小于1000)和集合B的一串整數(shù)(以-9999為結(jié)束標(biāo)記,整數(shù)個數(shù)小于1000),計算出A與B的交集,
  并以由小到大的次序輸出A與B的交集中的所有整數(shù)(輸入整數(shù)時,相鄰的兩個用空格隔開。為A或B輸入時,同一個數(shù)可能出現(xiàn)多次,而A與B的交集中同一個數(shù)不能

編一C程序,它能讀入集合A的一串整數(shù)(以-9999為結(jié)束標(biāo)記,整數(shù)個數(shù)小于1000)和集合B的一串整數(shù)(以-9999為結(jié)束標(biāo)記,整數(shù)個數(shù)小于1000),計算出A與B的交集,

并以由小到大的次序輸出A與B的交集中的所有整數(shù)(輸入整數(shù)時,相鄰的兩個用空格隔開。為A或B輸入時,同一個數(shù)可能出現(xiàn)多次,而A與B的交集中同一個數(shù)不能出現(xiàn)多次)。(注:程序的可執(zhí)行文件名必須是 e2.exe)。

*/ 

//注意調(diào)試程序時要多輸入重復(fù)數(shù)據(jù)調(diào)試;本程序是根據(jù)青龍?zhí)峁┑某绦蚋木?,消除了重復(fù)數(shù)據(jù)的錯誤! 

#include  iostream.h  
#include  stdio.h  

void BuCountbbleSort(int r[],int n) 
{//冒泡排序 
 int i,j,k; 
 int exchange; 
 for(i=0;i i++) 
 { 
 exchange=0; 
 for(j=n-1;j j--) 
 if(r[j+1] r[j]) 
 { 
 k=r[j+1]; 
 r[j+1]=r[j]; 
 r[j]=k; 
 exchange=1; 
 } 
 if(!exchange) 
 break; 
 } 

int BingJi(int m[],int n[],int l[],int Countaa,int Countbb) 
{//求集合的并集 
 int i=0,j=0,k=0; 
 while(i =Countaa j =Countbb) 
 { 
 if(m[i] n[j]) 
 {//如果 m[i] n[j]則取小的值m[i],然后i++; 
 l[k]=m[i]; 
 k++; 
 i++; 
 }//endif 
 else if(m[i] n[j]) 
 {//如果 m[i] n[j]則取小的值n[j],然后j++; 
 l[k]=n[j]; 
 k++; 
 j++; 
 }//end elseif 
 else 
 {//如果 m[i]==n[j],可以任取一個值,然后i++;j++; 
 l[k]=m[i]; 
 k++; 
 i++; 
 j++; 
 }//endelse 
 }//endwhile 

 if(i Countaa) 
 {//如果i Countaa,即數(shù)組m[i]中的元數(shù)個數(shù)較少, 
 //則把n[j]中的剩余元素,都付給l[]。 
 while(j =Countbb) 
 { 
 l[k]=n[j]; 
 j++; 
 k++; 
 }//endwhile 
 }//endif 

 if(j Countbb) 
 {//如果j Countbb,即數(shù)組n[i]中的元數(shù)個數(shù)較少, 
 //則把m[j]中的剩余元素,都付給l[]。 
 while(i =Countaa) 
 { 
 l[k]=m[i]; 
 i++; 
 k++; 
 }//endwhile 
 }//endif 

return k;//返回生成的數(shù)組的元數(shù)個數(shù) 
}//end BuCountbbleSort 

int JiaoJi(int m[],int n[],int l[],int Countaa,int Countbb) 
{//求集合的交集 

 /////////////////////////////////// 
 //消除數(shù)組m[]中的重復(fù)元素 
int w,x,y; 
 for(w=0;w =Countaa;w++) 
 { 
 for(x=w+1;x =Countaa;x++) 
 { 
 if(m[w]==m[x]) 
 { 
 Countaa--; 
 for(y=x;y =Countaa;y++) 
 { 
 m[y]=m[y+1]; 
 }//endfor 
 x--; 
 }//endif 
 }//endfor 
 }//endfor 

 /* 
 //測試消除數(shù)組中的重復(fù)元素的效果用下列循環(huán)輸出 
 int z; 
 for(z=0;z =Countaa;z++) 
 { 
 printf("%d",m[z]); 
 } 
 printf("\n"); 
 */ 

 //消除結(jié)束 
 /////////////////////////////////// 
 

/////////////////////////////////// 
 //求交集 
 int i=0,j=0,k=0; 
while(i =Countaa) 
 { 
 for(j=0;j =Countbb;j++) 
 {//用集合的第一個元素分別和另一個集合的各元素相比較 
 //然后再用第二個元素(直到最后一個元素)和另一個集合的各元素相比較 
 if(m[i]==n[j]) 
 {//如果有相同的就保存到l[]中,這樣同時消掉了n[]中的重復(fù)元素 
 l[k]=m[i]; 
 k++; 
 break; 
 }//endif 
}//endfor 
 i++; 
 }//endwhile 
 //求交集結(jié)束 
 ////////////////////////////////// 
 
 return k; 

void main() 

 int a[1000], b[1000],c[2000]; 
 int exchange=0; 
 int i,CountA,CountB,CountC; 

 printf("input a\n"); 
 for(i=0;i =1000;i++) 
 { 
 scanf("%d", a[i]); 
 if(a[i]==-9999) 
 break; 
 }//endfor 
 CountA=i-1; 

 BuCountbbleSort(a,CountA);//先將集合A排序 

 printf("\ninput b\n"); 
 for(i=0;i =1000;i++) 
 { 
 scanf("%d", b[i]); 
 if(b[i]==-9999) 
 break; 
 }//endfor 
 CountB=i-1; 

 BuCountbbleSort(b,CountB);//集合B排序 

// CountC=BingJi(a,b,c,CountA,CountB); 
 CountC=JiaoJi(a,b,c,CountA,CountB); 
 
 printf("\n\n"); 
 for(i=0;i =CountC-1;i++) 
 { 
 printf("%d ",c[i]); 
 } 
 printf("\n"); 
}

相關(guān)閱讀