您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> C语言 >> 辅导 >> 正文    
  全国计算机等级考试C语言上机考试专业辅导二 【注册男护士专用博客】          

全国计算机等级考试C语言上机考试专业辅导二

www.nanhushi.com     佚名   不详 

编一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]) 中国公务网 2004-5-27 22:11:50
 {//如果 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 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);
 }

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目