1. 怎样用语言c语言实现集合的合并,交集
通过你描述的问题,正确的交集代码如下:
void
bing(char
a[],char
b[],int
m,int
n)
{
char
d[400];
int
i=0,j=0,s=m;
for(i=0;i<m;i++)
d[i]=a[i];
for(i=0;i<n;i++){
for(j=0;j<m;j++)
{
if(b[i]==a[j])
break;
}
if(j==m)
d[s++]=b[i];
}
cout<<"集合并集是:";
for(i=0;i<s;i++)
cout<<d[i]<<"
";
}
2. 用c语言编写两个集合的运算
记得采纳哦
集合
#include "stdafx.h"
#include <stdio.h>
int fun(int a,int M[])//判断元素是否在集合里 在返回1 不在返回0
{
int i=0;
for(i=0;M[i]!=0;i++)
if(a==M[i]) return 1;
return 0;
}
void get(int M[])//输入集合元素
{
int i=0;
printf(" ");
do
{
scanf("%d",&M[i++]);
}
while(M[i-1]!=0);
}
void print(int M[])//打印集合
{
int i=0;
printf(" ");
while(M[i]!=0)
{
printf("%d ",M[i++]);
}
printf(" ");
}
void clear(int M[])
{
int i=0;
do
{
M[i++]=0;
}
while(M[i]!=0);
}
void fun_sum(int A[],int B[],int C[])//集合A和集合B的并集
{
int i,j;
for(i=0;A[i]!=0;i++)
{
C[i]=A[i];
}
for(j=0;B[j]!=0;j++)
{
if(!fun(B[j],C)) C[i++]=B[j];
}
}
void fun_sub(int A[],int B[],int C[])//集合A和集合B的差集
{
int i,j=0;
for(i=0;A[i]!=0;i++)
{
if(!fun(A[i],B)) C[j++]=A[i];
}
}
void fun_J(int A[],int B[],int C[])//集合A和集合B的交集
{
int i,j=0;
for(i=0;A[i]!=0;i++)
{
if(fun(A[i],B)) C[j++]=A[i];
}
}
int main(int argc, char* argv[])
{
int A[50]={0},B[50]={0},C[100]={0};
printf("请输入集合A以0结束 ");
get(A);
printf("请输入集合B以0结束 ");
get(B);
fun_sum(A,B,C);
printf("集合A与集合B的并: ");
print(C);
clear(C);
fun_sub(A,B,C);
printf("集合A与集合B的差: ");
print(C);
clear(C);
fun_J(A,B,C);
printf("集合A与集合B的交: ");
print(C);
return 0;
}
3. 如何用C语言做出“完成集合运算的并集,交
定义两个数组存放这两个集合,再定义一个数组存放它们的集合,用类似冒泡排序的算法,遍历数组1中的第一个元素和数组2中每一个元素,若有相同的,则把这个元素放入第三个数组,继续遍历,知道数组1遍历完所有元素,那数组3中的元素,即为两个数组(集合)的交集。
4. 用C语言实现集合的并集
用两个数组表示集合元素
对于AUB=C
先把A的数据
复制到C里面
然后
遍历B数组,每个元素和A对比,如果存在
则略过,否则添加到C中。
等到的C
即为并集
5. 怎么用C语言实现多个文件进行汇总到一个文件功能
看你的汇总依据了。
如果不需要数据处理
只是单纯性的集合起来
那么可依次打开每个文件,然后写入到一个新文件中。
如果需要数据处理
就需要先打开一个文件,提取并统计需要汇总的数据
再打开第二个,提取,并叠加到第一个的数据上
以此类推
最后一次性写入。
这个要麻烦的多。
6. 怎样用C语言实现集合的并交呢
#include<stdio.h>
#include<stdlib.h>
typedef struct pointer{
char dat;
struct pointer *link;
} pointer;
void readdata(pointer *head)
{ //读集合
pointer *p;
char tmp;
printf("input data ('0' for end):");
scanf("%c",&tmp);
while(tmp!='0')
{
if((tmp<'a')||(tmp>'z'))
{
printf("输入错误!必须为小写字母!\n");
return;
}
p=(pointer *)malloc(sizeof(struct pointer));
p->dat=tmp;
p->link=head->link;
head->link=p;
scanf("%c",&tmp);
}
}
void disp(pointer *head)
{ //显示集合数据
pointer *p;
p=head->link;
while(p!=NULL)
{
printf("%c ",p->dat);
p=p->link;
}
printf("\n");
}
void bing(pointer *head1,pointer *head2, pointer *head3)
{ //计算集合1与集合2的并
pointer *p1,*p2,*p3;
p1=head1->link;
while(p1!=NULL)
{
p3=(pointer *)malloc(sizeof(struct pointer));
p3->dat=p1->dat;
p3->link=head3->link;
head3->link=p3;
p1=p1->link;
}
p2=head2->link;
while(p2!=NULL)
{
p1=head1->link;
while((p1!=NULL)&&(p1->dat!=p2->dat))
p1=p1->link;
if(p1==NULL)
{
p3=(pointer *)malloc(sizeof(struct pointer));
p3->dat=p2->dat;
p3->link=head3->link;
head3->link=p3;
}
p2=p2->link;
}
}
void jiao(pointer *head1,pointer *head2, pointer *head3)
{ //计算集合1与集合2的交
pointer *p1,*p2,*p3;
p1=head1->link;
while(p1!=NULL)
{
p2=head2->link;
while((p2!=NULL)&&(p2->dat!=p1->dat))
p2=p2->link;
if((p2!=NULL)&&(p2->dat=p1->dat))
{
p3=(pointer *)malloc(sizeof(struct pointer));
p3->dat=p1->dat;
p3->link=head3->link;
head3->link=p3;
}
p1=p1->link;
}
}
main()
{
pointer *head1,*head2,*head3;
head1=(pointer *)malloc(sizeof(struct pointer));
head1->link=NULL;
head2=(pointer *)malloc(sizeof(struct pointer));
head2->link=NULL;
head3=(pointer *)malloc(sizeof(struct pointer));
head3->link=NULL;
printf("输入集合1:\n");
readdata(head1);
getchar();
printf("输入集合2:\n");
readdata(head2);
printf("集合1为:\n");
disp(head1);
printf("集合2为:\n");
disp(head2);
printf("集合1与集合2的并为:\n");
bing(head1,head2,head3);
disp(head3);
head3->link=NULL;
printf("集合1与集合2的交为:\n");
jiao(head1,head2,head3);
disp(head3);
}
7. C语言求集合运算
可以用线性表模拟集合,把两个线性表中一样的数提取出来就是交集,所有元素组成的就是并集,还可以用C++重载运算符实现+就求并集之类的。
8. 如何利用c语言实现集合的运算
这种集合问题,一般是使用链表来处理。
比如说有两个链表list1,list2,它们分别用来存储集合A,B
如果要对A,B进行并运算,
那么可以首先定义一个新的链表list3,然后让list1和list2的值进行循环的比较,如果有相同的值,那么就将这个值放入list3中,直到没有相同的值为止。
大致的算法就是这样了。
9. 数据结构 用c语言写的 集合的并、交和差运算的程序
可以用二个一维数组,
再用两个for循环来判断结果:交,并,差
在for循环中,用一个if来判断一下,是不是a[0]==b[j],只要有相等的,就令之放在c[0]
这就是交集!!
并集就好求吧,
只要令c[i]=a[i],再来一个就是c[i+j+1]=b[j](因为我这里是考虑j=0开始的,然后自加差就是在交上改动一下就可以了,只要是a[0]!=b[j],就把它放到c[]这个数组里面去~!!!!
1:并集的程序。
求集合LA和集合LB的并集
#define NULL 0
struct JD
{ int data;
struct JD *next;
};
int find(int number,struct JD *h)
{ while(h->data)
{ if(h->data!=number)
{ h=h->next;
continue;
}
else
return 0;
}
return 1;
}
struct JD * make()
{ struct JD *h=NULL,*p=NULL;
int number,tf;
h=(struct JD *)malloc(sizeof(struct JD));
scanf("%d",&h->data);
p=h;
while(p->data)
{ p->next=(struct JD *)malloc(sizeof(struct JD));
p=p->next;
p->data=0;
scanf("%d",&number);
tf=find(number,h);
if(tf)
p->data=number;
else
continue;
}
return h;
}
void print(struct JD *h)
{ while(h->data)
{ printf("%d ",h->data);
h=h->next;
}
}
struct JD * change(struct JD *la,struct JD *lb)
{ struct JD *h,*p,*s,*q;
int number,tf;
p=lb;
while(p->data)
{ number=p->data;
tf=find(number,la);
p=p->next;
if(tf)
{ s=(struct JD *)malloc(sizeof(struct JD));
s->data=number;
s->next=la;
la=s;
}
else
continue;
}
return la;
}
void del(struct JD *h)
{ struct JD *p=h->next;
while(h->data)
{ free(h);
h=p;
p=p->next;
}
free(h);
}
main()
{ struct JD *la,*lb;
printf("\n\nGive the number to LA :\n\n");
la=make();
printf("\nLA is: ");
print(la);
printf("\n\nGive the number to LB :\n\n");
lb=make();
printf("\nLB is: ");
print(lb);
la=change(la,lb);
printf("\n\n\nThe new LA=LA||LB is: ");
print(la);
del(la);
del(lb);
printf("\n\n\nPass any key to exit...!\n");
getch();
}
********** 程序运行结果 **********
Give the number to LA :
1↓
2↓
3↓
5↓
0↓
LA is: 1 2 3 5
Give the number to LB :
6↓
7↓
3↓
2↓
9↓
0↓
LB is: 6 7 3 2 9
The new LA=LA||LB is: 9 7 6 1 2 3 5
--------------------------------------------------
Pass any key to exit...!
10. 如何用C语言表示离散数学上的集合,并输出输入
最简单的是bit set(又称为Bit array、bit vector),例如用 typedef unsigned bitset[N / sizeof(unsigned)]表示一个集合(其全集的元素量为N),每个bit代表某个元素是否存在于该集合中。
这个数据结构的好处是,可用位操作(&、|、~)实现并集、交集、补集,非常适合计算机运作。
缺点是空间和时间复杂度和全集的元素数量 N 成正比,而不是集合实际的元素量。例如全集是32位整数,每个集合就需要2^32 bit = 512MB的空间。如果集合中的元素比较少,可以使用有序序列,例如排序数组(Sorted array)、二叉查找树等实现集合。它们的缺点是修改集合不是常数时间。
数据类型关键字
short:修饰int,短整型数据,可省略被修饰的int。(K&R时期引入)
long:修饰int,长整型数据,可省略被修饰的int。(K&R时期引入)
long long:修饰int,超长整型数据,可省略被修饰的int。(C99标准新增)
signed:修饰整型数据,有符号数据类型。(C89标准新增)
unsigned:修饰整型数据,无符号数据类型。(K&R时期引入)
restrict:用于限定和约束指针,并表明指针是访问一个数据对象的初始且唯一的方式。