#include <stdio.h>
void CreateSet();
void DispSet();
bool InSet();
void Add();
void Sub();
void InterSection();
typedef struct
{
int data[100];
int length; //定义的集合的长度
} Set; //集合的别名为Set
void CreateSet(Set &s,int a[],int n) //由数组a创建s
{
for(int i=0;i<n;i++)
{
s.data[i]=a[i];
}
s.length=n;
}
void DispSet(Set s) //输出集合s中的所有元素
{
for(int i=0;i<s.length;i++)
{
printf("%d",s.data[i]);
}
printf("\n");
}
bool InSet(Set s,int e) //判断e是否在集合s中
{
for(int i=0;i<s.length;i++)
{
if(s.data[i]==e)
{
return 1;
}
return 0;
}
}
void Add(Set s1,Set s2,Set &s3) //求集合的并集
{
int i;
for(i=0;i<s1.length;i++) //将集合s1的所有元素赋值给s3
{
s3.data[i]=s1.data[i];
}
s3.length=s1.length;
for(i=0;i<s2.length;i++) //将s2中不在s1中的元素赋值给s3
{
if(!InSet(s1,s2.data[i]))
{
s3.data[s3.length]=s2.data[i];
s3.length++;
}
}
}
void Sub(Set s1,Set s2, Set &s3) //求集合的差集
{
s3.length=0;
for(int i=0;i<s1.length;i++) //将s1中不出现在s2中的元素赋值给s3
{
if(!InSet(s2,s1.data[i]))
{
s3.data[s3.length]=s1.data[i];
s3.length++;
}
}
}
void InterSection(Set s1,Set s2,Set &s3) //求集合的并集
{
s3.length=0;
for(int i=0;i<s1.length;i++) //将s1中出现在s2中的元素赋值给s3
{
if(InSet(s2,s1.data[i]))
{
s3.data[s3.length]=s1.data[i];
s3.length++;
}
}
}
//设计应用程序SetApp主函数
int main()
{
int a[]={1,4,2,6,8}; int b[]={2,5,3,6};
Set s1,s2,s3;
CreateSet(s1,a,5);
CreateSet(s2,b,4);
printf("集合s1:");DispSet(s1);
printf("集合s2:");DispSet(s2);
printf("集合s1和s2的并集:");Add(s1,s2,s3);DispSet(s3);
printf("集合s1和s2的差集:");Sub(s1,s2,s3);DispSet(s3);
printf("集合s1和s2的交集:");InterSection(s1,s2,s3);DispSet(s3);
return 0;
}
#include<stdio.h>
void CreateSet();
void DispSet();
bool InSet();
void Add();
void Sub();
void InterSection();
typedef struct
{
int data[100];
int length; //定义的集合的长度
} Set; //集合的别名为Set
void CreateSet(Set &s,int a[],int n)//创建一个集合
{
int i;
for(i=0;i<n;i++) //遍历a[]中的数据插入到data[]中
{
s.data[i]=a[i];
}
s.length=n; //长度等于n
}
void DispSet(Set s) //打印这个集合
{
int i;
for(i=0;i<s.length;i++) //i<这个表的长度时,遍历这个表,一次打印
{
printf("%d",s.data[i]);
}
printf("\n"); //最后一行换行
}
bool InSet(Set s,int e) //判断一个元素在不在这个集合中,如果在,则返回true,否则返回false
{
int i;
for(i=0;i<s.length;i++)
{
if(s.data[i]==e)
return true;
}
return false;
}
void Add(Set s1,Set s2,Set &s3) //求集合的并集
{
int i;
for (i=0;i<s1.length;i++) //将集合s1中的元素全部复制到s3中去
{
s3.data[i]=s1.data[i];
}
s3.length=s1.length;
for (i=0;i<s2.length;i++) //将s2中不在s1中的元素复制到s3中去
{
if(!InSet(s1,s2.data[i]))
{
s3.data[s3.length]=s2.data[i];
s3.length++;
}
}
}
void Sub(Set s1,Set s2,Set &s4) //求集合的差集
{
int i;
s4.length=0;
for(i=0;i<s1.length;i++) //将s1中不在s2中的元素复制到s4中去
{
if(!InSet(s2,s1.data[i]))
{
s4.data[s4.length]=s1.data[i];
s4.length++;
}
}
}
void InterSection(Set s1,Set s2,Set &s5) //求两个集合的交集
{
int i;
s5.length=0;
for(i=0;i<s1.length;i++) //将s1中不在s2中的元素复制到s4中去
{
if(InSet(s2,s1.data[i]))
{
s5.data[s5.length]=s1.data[i];
s5.length++;
}
}
}
int main()
{
Set s1,s2,s3,s4,s5;
int a[]={1,4,2,6,8};
int b[]={2,5,3,6};
int n=5,m=4;
CreateSet(s1,a,n);
CreateSet(s2,b,m);
printf("s1:");DispSet(s1);
printf("s2:");DispSet(s2);
printf("s1和s2的并集为:");
Add(s1,s2,s3); //s1,s2,s3的并集s3
DispSet(s3); //打印并集s3
printf("s1和s2的差集s4为");
Sub(s1,s2,s4);
DispSet(s4);
printf("s1和s2的差集s4为");
InterSection(s1,s2,s5);
DispSet(s5);
return 0;
}
两个代码求解相同问题,基本步骤完全一致,但是第一个代码结果错误,第二个代码结果正确,想知道第一个代码是哪里出了问题?