编一C程序它能读入集合A的一串整数(以为结束标记整数个数小于)和集合B 的一串整数(以为结束标记整数个数小于)计算并以从小到大的次序输出AB 的所有元素(为A或B输入时同一个数可能出现多次而A与B的差集中同一个数不能出现多次) (注程序的可执行文件名必须是 eexe)
(注程序的可执行文件名必须是 eexe)
*/
#include
void BubbleSort(int r[]int n)
{//冒泡排序(有小到大)
int ijk;
int exchange;
for(i=;i<=n;i++)
{
exchange=;
for(j=n;j>=i;j)
if(r[j+]
{
k=r[j+];
r[j+]=r[j];
r[j]=k;
exchange=;
}
if(!exchange)
break;
}
}
int DisaSameYs(int r[]int n)
{//消除数组r[]中的重复元素并返回消除后数组剩余的元素个数
int wxy;
for(w=;w<=n;w++)
{
for(x=w+;x<=n;x++)
{
if(r[w]==r[x])
{
n;
for(y=x;y<=n;y++)
{
r[y]=r[y+];
}//endfor
x;
}//endif
}//endfor
}//endfor
return n;
}
int cha(int m[]int n[]int l[]int Countaaint Countbb)
{//求差集
int i=j=k=;
int exch;
while(i<=Countaa)
{
exch=;//交换变量为
for(j=;j<=Countbb;j++)
{//用集合的第一个元素分别和另一个集合的各元素相比较
//然后再用第二个元素(直到最后一个元素)和另一个集合的各元素相比较
if(m[i]==n[j])
{//如果相同交换变量变为
exch=;
break;
}//endif
}//endfor
if(!exch)
{//如果没有相同的就保存m[i]到l[]中
l[k]=m[i];
k++;
}
i++;
}//endwhile
return k;
}
/*
void testds(int r[]int n)
{//测试消除数组中的重复元素的效果用下列循环输出
int z;
for(z=;z<=n;z++)
{
printf(%dr[z]);
}
printf(\n);
}
*/
void main()
{
int a[] b[]c[];
int exchange=;
int ijkCountACountBCountC;
printf(input a\n);
for(i=;i<=;i++)
{
scanf(%d&a[i]);
if(a[i]==)
break;
}
CountA=i;
BubbleSort(aCountA);
CountA=DisaSameYs(aCountA);
// testds(aCountA);
printf(\ninput b\n);
for(i=;i<=;i++)
{
scanf(%d&b[i]);
if(b[i]==)
break;
}
CountB=i;
BubbleSort(bCountB);
CountB=DisaSameYs(bCountB);
//testds(bCountB);
CountC=cha(abcCountACountB);
printf(\n\n);
for(i=;i<=CountC;i++)
{
printf(%d c[i]);
}
printf(\n);
}
//////////////////////////////////////////////////////
//模式匹配
#include
#include
typedef struct{
// int ch[];
char ch[];
int length;
}SeqString;
int NaiveStrMatch(SeqString TSeqString P)
{
int ijk;
int m=Plength;
int n=Tlength;
for(i=;i<=nm;i++)
{
j=;k=i;
while(j
{
k++;j++;
}
if(j==m)
return i;
}//endfor
return ;
}//NaiveStrMatch
SeqString CreatStr(SeqString R)
{
int i;
printf(input data\n);
for(i=;i<;i++)
{
// scanf(%d&Rch[i]);
// if(Rch[i]==)
scanf(%s&Rch[i]);
if(!(strcmp(&Rch[i])))
break;
}
Rlength=i;
return R;
}
void main()
{
int n;
SeqString Str;
Str=CreatStr(Str);
SeqString Str;
Str=CreatStr(Str);
n=NaiveStrMatch(StrStr);
printf(%d\nn);
}
/*
编一C程序它能读入集合A的一串整数(以为结束标记整数个数小于)
和集合B的一串整数(以为结束标记整数个数小于)计算出A与B的交集
并以由小到大的次序输出A与B的交集中的所有整数(输入整数时相邻的两个用空格隔开 为A或B输入时同一个数可能出现多次而A与B的交集中同一个数不能出现多次) (注程序的可执行文件名必须是 eexe)
*/
//注意调试程序时要多输入重复数据调试;本程序是根据青龙提供的程序改编消除了重复数据的错误!;
#include
#include
void BuCountbbleSort(int r[]int n)
{//冒泡排序
int ijk;
int exchange;
for(i=;i<=n;i++)
{
exchange=;
for(j=n;j>=i;j)
if(r[j+]
{
k=r[j+];
r[j+]=r[j];
r[j]=k;
exchange=;
}
if(!exchange)
break;
}
}
int BingJi(int m[]int n[]int l[]int Countaaint Countbb)
{//求集合的并集
int i=j=k=;
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 Countaaint Countbb)
{//求集合的交集
///////////////////////////////////
//消除数组m[]中的重复元素
int wxy;
for(w=;w<=Countaa;w++)
{
for(x=w+;x<=Countaa;x++)
{
if(m[w]==m[x])
{
Countaa;
for(y=x;y<=Countaa;y++)
{
m[y]=m[y+];
}//endfor
x;
}//endif
}//endfor
}//endfor
/*
//测试消除数组中的重复元素的效果用下列循环输出
int z;
for(z=;z<=Countaa;z++)
{
printf(%dm[z]);
}
printf(\n);
*/
//消除结束
///////////////////////////////////
///////////////////////////////////
//求交集
int i=j=k=;<