logo

咨询热线

15020086924 (点击在线咨询)
您现在的位置:山东自考网>复习资料 > 正文
自考攻略

计算机应用专业上机考试数据结构辅导

时间:2022-04-21 10:05:33 作者:储老师

自考助学

  编一C程序,它能读入集合A的一串整数(以-9999为结束标记,整数个数小于1000)和集合B的一串整数(以-9999为结束标记,整数个数小于1000),计算出A与B的交集,

  并以由小到大的次序输出A与B的交集中的所有整数(输入整数时,相邻的两个用空格隔开。为A或B输入时,同一个数可能出现多次,而A与B的交集中同一个数不能出现多次)。(注:程序的可执行文件名必须是 e2.exe)。

*/ 

//注意调试程序时要多输入重复数据调试;本程序是根据青龙提供的程序改编,消除了重复数据的错误! 

#include  
#include  

void BuCountbbleSort(int r[],int n) 
{//冒泡排序 
 int i,j,k; 
 int exchange; 
 for(i=0;i<=n;i++) 
 { 
  exchange=0; 
  for(j=n-1;j>=i;j--) 
  if(r[j+1] 
  { 
   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] 
  {//如果 m[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,即数组m[i]中的元数个数较少, 
  //则把n[j]中的剩余元素,都付给l[]。 
  while(j<=Countbb) 
  { 
   l[k]=n[j]; 
   j++; 
   k++; 
  }//endwhile 
 }//endif 

 if(j>Countbb) 
 {//如果j>Countbb,即数组n[i]中的元数个数较少, 
  //则把m[j]中的剩余元素,都付给l[]。 
  while(i<=Countaa) 
  { 
   l[k]=m[i]; 
   i++; 
   k++; 
  }//endwhile 
 }//endif 

return k;//返回生成的数组的元数个数 
}//end BuCountbbleSort 

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

 /////////////////////////////////// 
 //消除数组m[]中的重复元素 
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 

 /* 
 //测试消除数组中的重复元素的效果用下列循环输出 
 int z; 
 for(z=0;z<=Countaa;z++) 
 { 
  printf("%d",m[z]);  
 } 
 printf("n"); 
 */ 

 //消除结束 
 /////////////////////////////////// 
  

/////////////////////////////////// 
 //求交集 
 int i=0,j=0,k=0;  
while(i<=Countaa) 
 { 
  for(j=0;j<=Countbb;j++) 
  {//用集合的第一个元素分别和另一个集合的各元素相比较 
   //然后再用第二个元素(直到更后一个元素)和另一个集合的各元素相比较 
   if(m[i]==n[j]) 
   {//如果有相同的就保存到l[]中,这样同时消掉了n[]中的重复元素 
    l[k]=m[i]; 
    k++; 
    break; 
   }//endif 
}//endfor 
  i++; 
 }//endwhile 
 //求交集结束 
 ////////////////////////////////// 
  
 return k; 
} 

void main() 
{ 
 int a[1000], b[1000],c[2000]; 
 int exchange=0; 
 int i,CountA,CountB,CountC; 

 printf("input an"); 
 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 bn"); 
 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("nn"); 
 for(i=0;i<=CountC-1;i++) 
 { 
  printf("%d ",c[i]); 
 } 
 printf("n"); 
}

声明:

(一)由于考试政策等各方面情况的不断调整与变化,本网站所提供的考试信息仅供参考,请以权威部门公布的正式信息为准。

(二)本网站在文章内容来源出处标注为其他平台的稿件均为转载稿,免费转载出于非商业性学习目的,版权归原作者所有。如您对内容、版权等问题存在异议请与本站联系,我们会及时进行处理解决。

考试提醒

准考证打印:10月21-26日

  • 考生交流群
  • 微信公众号
  • 考生交流群 扫一扫加入微信交流群

    与考生自由互动、并且能直接与专业老师进行交流解答。

  • 微信公众号 扫一扫加关注微信公众号

    与考生自由互动、并且能直接与专业老师进行交流解答。

关注公众号

回复“免费资料”领取复习资料

微信公众号

微信公众号

微信公众号

微信交流群

<<点击收起

在线咨询

在线咨询

联系方式
联系
微信
学习群
微信
学习群
反馈建议
反馈
建议
回到顶部
回到
顶部
APP下载
微信客服
微信交流群