导航:首页 > 编程语言 > c编程集合

c编程集合

发布时间:2022-02-12 06:39:49

1. 用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;

}

2. 用C语言编写集合子集的程序怎么写

首先,你的题目和举例不相符啊。题目是{ 1 ~ n },而举例是{ 0 ~ n-1};我以题目为准吧。
如果n=5;其中后面的一部分子集按顺序排是这样的:
{5}
{1 5}
{2 5}
{3 5}
{4 5}
{1 4 5}
{2 4 5}
{3 4 5}
{1 3 4 5}

{2 3 4 5}
{1 2 3 4 5}
我们可以把一个子集看成两个部分,一部分是前面的追赶者,另一部分是后面的累积者。
{1 5},{2 5},{3 5},{4 5}就像这些子集,追赶者从1一直追赶到了4,然后与累积者{5}相遇,累积者变成{4 5};追赶者从头继续从1一直追赶到了3,然后与累积者{4 5}相遇,累积者变成{3 4 5};如此反复,可以把这个全部输出来。
而累积者始终是连续的,比如{4 5}、{3 4 5}、{2 3 4 5},所以我们只用定义累积者的头和尾,就可以把累积者的范围定义。
代码如下,仅供参考:
#include <stdio.h>

void main( void )
{
int n,i,runner,start,end;
printf("请输入正整数n的值:");
scanf("%d",&n);
printf("{}\n"); //空集必定是有的
for(end=1;end<=n;end++) //累积者的尾加一,直到n
{
printf("{%d}\n",end);
for(start=end;start>0;start--) //累积者的头减一,直到1
{
for(runner=1;runner<start;runner++) //追赶者加一,直到遇到累积者的头
{
printf("{");
printf("%d ",runner); //输出追赶者
for(i=start;i<end;i++)
printf("%d ",i); //输出累积者(不包括头,因为累积者的尾后面不跟空格,而是跟})
printf("%d}\n",end); //输出累积者的尾
}
}
}
}

3. c语言里面有集合吗

你好,不清楚你说的集合是什么概念,但是c语言里面有数组,表示形式和集合很相像,你可以研究研究。学c语言会学到的。加油!
中国物联网校企联盟技术部

4. 集合A-B的C++/C编程

C++版本:
#pragma warning(disable : 4786)
#include <set>
#include <cstdio>
using namespace std;

int main(void)
{
int n, m, t;
set <int> s;
set <int>::iterator it;

while (scanf("%d%d", &n, &m), n + m)
{
while (n--)
{
scanf("%d", &t);
s.insert(t);
}
while (m--)
{
scanf("%d", &t);
if (s.count(t)) s.erase(t);
}
for (it = s.begin(); it != s.end(); it++)
printf("%d ", *it);
printf(s.size() ? "\n" : "NULL\n");
s.clear();
}

return 0;
}
C版本:
#include<stdio.h>
int main()
{
int n,m,t,b,i,j,temp,a[100];
while(scanf("%d%d",&n,&m)&&(n!=0||m!=0))
{
t=n;
while(n--)
scanf("%d",&a[n]);
while(m--)
{
scanf("%d",&b);
for(i=0;i<t;i++)
if(a[i]==b)
{
a[i]=a[t-1];
t--;
break;
}
}
if(t==0)
printf("NULL");
else
{
for(i=0;i<t-1;i++)
for(j=0;j<t-i-1;j++)
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
for(i=0;i<t;i++)
printf("%d ",a[i]);
}
printf("\n");
}
return 0;
}
http://acm.h.e.cn/showproblem.php?pid=2034

5. C语言编程 集合子集问题

#include<stdio.h>

#defineA5//数组的大小采用宏定义,方便修改
#defineB3
voidContain(inta[],intnum);
voidCompare(inta[],intb[]);
intmain()
{
inta[A]={1,2,3,4,5};//数组的元素可以自己设置去验证
intb[B]={1,2,6};
intflag=0;

printf("Inputanum:");
scanf("%d",&flag);
Contain(a,flag);
Compare(a,b);
return0;
}
/*
a∈A?
*/
voidContain(inta[],intnum)
{
inti;
for(i=0;i<A;i++)
{
if(num==a[i])
{
printf("%d∈A ",num);
break;
}
}
//printf("i=%d ",i);
if(i==5)
printf("%d!∈A ",num);
return;
}
/*判断集合B是否为集合A的子集*/
voidCompare(inta[],intb[])
{
inti,j;

//如果b数组大小比a数组大
if(sizeof(b)>sizeof(a))
{
printf("B不是A的子集. ");
return;
}
for(i=0;i<B;i++)
{
for(j=0;j<A;j++)
{
if(b[i]!=a[i])
{
printf("B不是A的子集. ");
return;
}
}
}
printf("B是A的子集. ");
}

6. C语言求集合运算

可以用线性表模拟集合,把两个线性表中一样的数提取出来就是交集,所有元素组成的就是并集,还可以用C++重载运算符实现+就求并集之类的。

7. c语言编程,集合

动态规划.

#include<stdio.h>
/*#include<stdlib.h>*/
#include<memory.h>

#defineN5050

intmain(intargc,char*argv)
{
intd[N];
intn,s;
while(scanf("%d",&n)!=EOF){
s=n*(n+1)>>1;
if(s&1){
printf("0 ");
}
else{
s=s>>1;
inti,j;
memset(d,0,N*sizeof(d[0]));
d[0]=1;
for(i=1;i<=n;i++){
for(j=s;j>=i;j--){
d[j]=d[j]+d[j-i];
}
}
printf("%d ",d[s]>>1);
}
}
return0;
}

8. 用C语言编写一个集合的交,并和差运算的程序怎么写啊

/*第一,你的题意不明,我只能输入两个集合了【互异性由输入保证】*/
#include<stdio.h>
#include<string.h>
void main()
{
char temp[60]="",str1[30]="",str2[30]="",i,j,l1,l2,ch;
printf("STR1:");
gets(str1);
printf("STR2:");
gets(str2);
l1=strlen(str1);
l2=strlen(str2);
//交集
printf(" 交集: {");
for(i=0;i<l1;i++)
for(j=0;j<l2;j++)
if(str1[i]==str2[j]) printf("%c,",str1[i]);
printf("} ");

//并集 偷懒的算法: 合并->排序->删除相同
printf(" 并集: {");

/*合并*/sprintf(temp,"%s%s",str1,str2);
/*排序*/
for(i=0;i<l1+l2-1;i++)
for(j=i+1;j<l1+l2;j++)
if(temp[i]>temp[j])
{
char ch;
ch=temp[i];
temp[i]=temp[j];
temp[j]=ch;
}
/*删除相同字符*/
for(i=j=1;i<l1+l2;i++)
if(temp[i]!=temp[j-1]) temp[j++]=temp[i];
temp[j]=''
for(i=0;i<j;i++)
printf("%c,",temp[i]);
printf("} ");
//CuA
printf(" CuA: {");
for(ch='a'ch<='z'ch++)
{
for(i=0;i<l1;i++)
if(ch==str1[i]) goto NOT;
printf("%c,",ch);
NOT:if(0);
}
printf("} ");
//CuB
printf(" CuB: {");
for(ch='a'ch<='z'ch++)
{
for(i=0;i<l2;i++)
if(ch==str2[i]) goto NOT2;
printf("%c,",ch);
NOT2:if(0);
}
printf("} ");
}

9. 怎样用语言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]<<"
";
}

阅读全文

与c编程集合相关的资料

热点内容
看帧率app如何使用 浏览:523
从DHC服务器租用IP地址 浏览:473
编译怎么学 浏览:329
数码管显示0到9plc编程 浏览:665
服务器是为什么服务的 浏览:765
java定义数据类型 浏览:874
安卓pdf手写 浏览:427
什么是app开发者 浏览:284
android闹钟重启 浏览:101
程序员失职 浏览:518
在云服务器怎么改密码 浏览:586
服务器pb什么意思 浏览:940
51驾驶员的是什么app 浏览:670
php静态变量销毁 浏览:886
编程买苹果电脑 浏览:762
flac算法 浏览:499
reactnative与android 浏览:665
程序员是干什么的工作好吗 浏览:258
kbuild编译ko 浏览:471
条件编译的宏 浏览:566