求错误……
集合交并差,然后的结果就是差这部分出现错误,可是怎么调呢……到底为什么呢……#include"stdio.h"
#include"stdlib.h"
typedef struct{
int * elem;
int length;
}Sqlist;
void main()
{
int i,j,t,e;
Sqlist la,lb,lc;
la.elem=(int *)malloc(100*sizeof(int));
lb.elem=(int *)malloc(100*sizeof(int));
lc.elem=(int *)malloc(100*sizeof(int));
printf("请输入集合A、集合B的元素个数\n");
scanf("%d %d",&la.length,&lb.length);
printf("请输入集合A的元素\n");
for(i=0;i<la.length;i++)
scanf("%d",&la.elem[i]);
printf("请输入集合B的元素\n");
for(i=0;i<lb.length;i++)
scanf("%d",&lb.elem[i]);
//求A与B的交集
t=0;
for(i=0;i<lb.length;i++)
{
e=lb.elem[i];
j=0;
while((j<la.length)&&(la.elem[j]!=e))
j++;
if(j!=la.length)
{
lc.elem[t]=e;
t++;
}
}
if(t==0)printf("这两个集合没有交集");
else
{
printf("交集中的元素为:\n");
for(i=0;i<t;i++)
printf("%4d",lc.elem[i]);
}
printf("\n");
void ListDelete_Sq (Sqlist &L, int i);
for(i=0;i<la.length;i++)
{
e=la.elem[i];
j=0;
while((j<lb.length)&&(lb.elem[j]!=e))
j++;
if(j!=lb.length)
ListDelete_Sq(la,i);
}
printf("A-B中的元素为:\n");
for(i=0;i<la.length;i++)
printf("%4d",la.elem[i]);
printf("\n");
//求A与B的并集
for(i=0;i<lb.length;i++)
{
e=lb.elem[i];
j=0;
while((j<la.length)&&(la.elem[j]!=e))
j++;
if(j==la.length)
{
la.elem[la.length]=e;
la.length++;
}
}
printf("并集中的元素为:\n");
for(i=0;i<la.length;i++)
printf("%4d",la.elem[i]);
printf("\n");
//求A-B
void ListDelete_Sq (Sqlist &L, int i);
for(i=0;i<la.length;i++)
{
e=la.elem[i];
j=0;
while((j<lb.length)&&(lb.elem[j]!=e))
j++;
if(j!=lb.length)
ListDelete_Sq(la,i+1);
}
printf("A-B中的元素为:\n");
for(i=0;i<la.length;i++)
printf("%4d",la.elem[i]);
printf("\n");
}
void ListDelete_Sq (Sqlist &L, int i)
{
L.elem=(int*)malloc(100*sizeof(int));
int*p,*q;
p = &(L.elem[i-1]); // p为被删元素的位置
q = L.elem + L.length-1; // 表尾元素的位置
for ( ++p; p<=q; ++p)
*(p-1) =*p ; // 被删除元素之后的元素左移
L.length--;
}