文档库 最新最全的文档下载
当前位置:文档库 › 集合的交并差补C++实现

集合的交并差补C++实现

#include

using namespace std;

class Set

{

private:

int n;

int *pS;

public:

Set() {n=0;pS=NULL;}

Set(Set &s)

{

n=s.n;

if(n!=0)

{

pS=new int[n+1];

for(int i=1;i<=n;i++) pS[i]=s.pS[i];

}

}

~Set()

{

if(pS)

{

delete []pS;

pS=NULL;

n=0;

}

}

void ShowElement()const

{

cout<<"{";

for(int i=1;i

cout<

cout<

}

bool IsEmpt() {return n?false:true;}

int size() {return n;}

bool IsElement(int e)const;

bool IsSubset(const Set &s)const;

bool IsEqual(const Set &s)const;

Set & insert(int e);

Set Union(const Set &s)const;

Set intersection(const Set &s)const;

Set difference(const Set &s)const;

};

bool Set::IsElement(int e)const

{

for(int i=1;i<=n;i++)

if(pS[i]==e)

return true;

return false;

}

bool Set::IsSubset(const Set &s)const {

if(s.n>n)

return false;

for(int i=1;i<=s.n;i++)

if(!IsElement(s.pS[i]))

return false;

return true;

}

bool Set::IsEqual(const Set &s)const {

if(n!=s.n)

return false;

if(IsSubset(s))

return true;

return false;

}

Set &Set::insert(int e)

{

if(IsElement(e))

return *this;

Set tempe;

for(int i=1;i<=n;i++)

tempe.insert(pS[i]);

n++;

if(pS!=NULL)

delete[]pS;

pS=new int[n+1];

for(int i=1;i

pS[i]=tempe.pS[i];

pS[n]=e;

return *this;

}

Set Set::Union(const Set &s)const {

Set Rs;

for (int i=1;i<=n;i++)

Rs.insert(pS[i]);

for(int i=1;i<=s.n;i++)

{

if(!IsElement(s.pS[i]))

Rs.insert(s.pS[i]);

}

return Rs;

}

Set Set::intersection(const Set &s)const

{

Set Rs;

for(int i=1;i<=s.n;i++)

if(IsElement(s.pS[i]))

Rs.insert(s.pS[i]);

return Rs;

}

Set Set::difference(const Set &s)const

{

Set Rs;

for(int i=1;i<=n;i++)

if(!(s.IsElement(pS[i])))

Rs.insert(pS[i]);

return Rs;

}

void main()

{

Set s1;

s1.insert(1);

if(!s1.IsElement(3))

s1.insert(3);

s1.insert(1);s1.insert(2);

cout<<"s1=";

s1.ShowElement();

cout<<"size:"<

Set s2;

s2.insert(1);s2.insert(3);s2.insert(5);s2.insert(6);

cout<<"s2=";

s2.ShowElement();

Set s3(s1);

cout<<"s3=";

s3.ShowElement();

cout<<"s1==s2?";

cout<<((s1.IsEqual(s2))?"YES":"NO")<

cout<<"s1==s3?";

cout<<((s1.IsEqual(s3))?"YES":"NO")<

Set s4;

s4.insert(1); s4.insert(3);

cout<<"s4=";

s4.ShowElement();

cout<<"s4 is a subset of s1?";

cout<<((s1.IsSubset(s4))?"YES":"NO")<

cout<<"s1 Union s2=";

s1.Union(s2).ShowElement();

cout<<"s1 intersection s2=";

s1.intersection(s2).ShowElement();

cout<<"s1 difference s2=";

s1.difference(s2).ShowElement();

system("pause");

}

集合交并补练习题

) 1.1.3 集合的基本运算----交集、并集补集练习题 1. 设全集{}01234I =,,,,,集合{}0123A =,,,,集合{}234B =,,,则I I C A C B ?等于( ) A .φ B .{}4 C .{}01, D .{}01 4,, 2.设A 、B 、I 均为非空集合,且满足,A B I ??则下列各式中错误的是( ) A 、() I A B I ?= B 、()() I I A B I ?= C 、()I A B ?=? D 、()() B I I I A B ?= 3、已知{}232,,M x x a a a R =∣=-+∈{} 2,N x x b b b R =∣=-∈,则M 、N 的关系是( ) A .M N M ?= . B M N M ?= . C M N = D.不确定 ( 4.已知集合{}1M y y x =|=+,(){} 22,1N x y x y =|+=,则集合M N ?中元素的个数是( ) A 、0 B 、1 C 、2 D 、多个 5.已知集合{}1M x y y x =|=+(,),(){}22,1N x y x y =|+=,则集合M N ?中元素的个数是 ( ) A 、0 B 、1 C 、2 D 、多个 6.P ,Q 为两个非空实数集合,定义{},p Q a b a P b Q +=+|∈∈{}{}0,2,5,1,2,6P Q ==,则P+Q 中元素的个数是( ) A 、9 B 、8 C 、7 D 、6 7、全集U={1,2,3,4,5},集合A 、B ≠?U ,若{}4,A B ?=(){}2,5U A B ?=,则集合B 等于( ) {}.2,4,5A {}.2,3,5B {}.3,4,5C {}.2,3,4D 8、设,M P 是两个非空集合,规定{} ,M P x x M x P -=∈?且,则()M M P --等于( ) ()A M , ()B P , ()C M P , ()D M P 9、若集合M 、N 、P 是全集S 的子集,则图中阴影部分表示的集合是( ) A.P N M )( B .P N M )( — C .P C N M S )( D .P C N M S )( 10.设集合11,,,2442k k M x x k Z N x x k Z ????=|= +∈=|=+∈????????,则( ) . B.M C.M D.M N=A M N N N ≠≠ =???? 11、已知全集{}20U =不大于的质数,A,B 是U 的两个子集,且满足 (){}U A C B 3,5=,(){}U C A B 7,19=,()(){}U U C A C B 2,17=, 则=A ;=B 。 12.已知{}{} 2222,,2,,M y y x x x R N y y x x x R =∣=--∈=∣=--∈则M N ?= ' 13.已知全集U R =,{}|112A x x =-≤-≤,{}|0B x x a a R =-≥∈, 若{|u u C A C B x x ?=〈0 },{|u u C A C B x x ?=<1或x >3},则a ∈________ 14.设集合{}{}2,21,4,5,1,9A x x B x x =--=--,若{}9,A B ?=求A B ?。 # 15.设集合{}{} 12,A x x B x x a =∣-≤<=∣≤,若,A B ?≠?求实数a 的集合。 M N P 第9题

C语言实现集合的交,并,差

C语言实现集合的交,并, 差 公司内部编号:(GOOD-TMMT-MMUT-UUPTY-UUYY-DTTI-

【问题描述】 编制一个能演示执行集合的并、交和差运算的程序【基本要求】 (1)集合的元素限定为小写字母字符[ 'a'......'z' ] (2 )演示程序以用户和计算机对话的方式执行 【测试数据】 【实现提示】 以有序链表表示集合 【代码过程】 1。先定义集合的数据类型 .{ ElemType data; LNode *next; }*Link, *Position; typedef struct...{ Link head,tail; int len; }LinkSet; .{ .{ .{

if(h1->data < (link->data) && h2->data > (link->data) ) .{ .{ .{ .{ pre = h; h=h->next; j++; } if(j==0) return NULL; return pre; } Status PrintSets(LinkSet &ls)...{ .{ printf("%c ",h->data); h = h->next; } printf(" ] "); return OK; } Position GetHead(LinkSet &ls)...{ .{ .{ .{

.{ .{ .{.{ .{ int result = Compare(pa,pb); .{ DelFirst(lsa,node);Append(lsc,node); pa = NextPos(ha); .{ .{ DelFirst(lsb,node); pb = NextPos(hb);.{ DelFirst(lsa,node);Append(lsc,node); } while(!Empty(lsb))...{ DelFirst(lsb,node);Append(lsc,node); } return OK; } Status IntersectionSets(LinkSet &lsa,LinkSet &lsb, LinkSet &lsc)...{ .{ int result = Compare(pa,pb); if( result<0) ...{ DelFirst(lsa,node);pa = NextPos(ha);

集合的交并运算

#include #include #include #define ListSize 100 //允许的最大长度 typedef char ListData; typedef struct List { ListData data[ListSize]; int Length; //当前元素个数 }*SeqList; void menu() //建立菜单 { printf("|--------集合的交并运算--------|\n"); printf("|-------------菜单-------------|\n"); printf("| 1、初始化集合A |\n"); printf("| 2、初始化集合B |\n"); printf("| 3、显示集合A、B |\n"); printf("| 4、集合的并运算|\n"); printf("| 5、集合的交运算|\n"); printf("| 6、退出|\n"); printf("|———————————————|\n"); printf("\n"); } //模块1 建立 void Creat(SeqList&L) { L=(SeqList)malloc(sizeof(List)); if(L==NULL) { printf("存储空间分配失败!\n"); exit(1); } L->Length=0; } int Length(SeqList&L) { return L->Length; } //模块2 初始化 void Begin(SeqList&L) { int i=0; printf("请输入集合中的元素,按#结束。\n"); fflush(stdin); //清除缓存

集合的并、交运算C语言

题目一:集合的并、交运算 1设计思想 首先,建立两个带头结点的有序单链表表示集合A和B。须注意的是:利用尾插入法建立有序单链表,输入数值是升序排列。 其次,根据集合的运算规则,利用单链表的有序性,设计交、并和差运算。根据集合的运算规则,集合A∩B中包含所有既属于集合A又属于集合B的元素。因此,须查找单链表A和B中的相同元素并建立一个链表存于此链表中。 根据集合的运算规则,集合A∪B中包含所有或属于集合A或属于集合B的元素。因此,遍历两链表的同时若元素相同时只将集合A中的元素存于链表中,若集合A中的下一个元素小于B中的元素就将A中的元素存于新建的链表中。反之将B中的元素存于链表中。 2所用数据结构 线性结构利用链式存储结构实现集合的基本运算。 3源代码分析 #include #include #define ERROR 0 #define OK 1

typedef int Status; typedef char Elemtype; typedef struct LNode{ 线性表的链式存储结构 Elemtype data; struct LNode *next; }Lnode,*Linklist; #include"text.h" LNode* Greatlist(int *N,int n) //建立一个带有头结点的单链表 { Linklist p,q,L; L=p=(LNode *)malloc(sizeof(LNode)); L->next=NULL; if(n!=0) { for(int i=0;idata=N[i]; p->next=q; //指针后移 p=q; }

数据结构课程设计_集合的并、交和差运算

数据结构课程设计 学院:信息科学与工程学院 专业:计算机科学与技术 班级: 学号: 学生姓名: 指导教师: 2009 年12 月25 日

一、实验内容 实验题目:编制一个演示集合的并、交和差运算的程序。 需求分析: 1、本演示程序中,集合的元素限定为小写字母字符[“a”…”z”]。集合输入的形 式为一个以“回车符“为结束标志的字符串,串中字符顺序不限。 2、演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信 息“之后,由用户在键盘上输入演示程序中规定的运算命令;相应的输入数据和运算结果显示在其后。 3、程序执行的命令包括: 1)构造集合1;2)构造在集合2;3)求并集;4)求交集;5)求差集;6)返回;7)结束。“构造集合1”和“构造集合2”时,需以字符的形式键入集合元素。 二、数据结构设计 为了实现上述程序的功能,应以有序链表表示集合。为此,需要两个抽象数据类型:有序表和集合。 1、有序表的抽象数据类型定义为: readdata(pointer head) 初始条件:head是以head为头节点的空链表。 操作结果:生成以head为头节点的非空链表。 pop(pointer head) 初始条件:head是以head为头节点的非空链表。 操作结果:将以head为头节点的链表中数据逐个输出。 2、集合的抽象数据类型定义为: and(pointer head1,pointer head2,pointer head3) 初始条件:链表head1、head2、head3已存在 操作结果:生成一个由head1和head2的并集构成的集合head3。 or(pointer head1,pointer head2,pointer head3) 初始条件:链表head1、head2、head3已存在 操作结果:生成一个由head1和head2的交集构成的集合head3。

集合的并、交、补集测试题(含答案)

集合的并、交、补集 一、单选题(共12道,每道8分) 1.设集合,,则=( ) A.{0} B.{0,2} C.{-2,0} D.{-2,0,2} 答案:D 解题思路: 试题难度:三颗星知识点:并集及其运算 2.若集合,,则=( ) A. B. C. D. 答案:D 解题思路:

试题难度:三颗星知识点:交集及其运算 3.已知集合,,若={2,5},则a+b的值为( ) A.10 B.9 C.7 D.4 答案:C 解题思路: 试题难度:三颗星知识点:交集及其运算 4.设集合,,若,则a的值为( ) A.0 B.1 C.-1 D.±1 答案:C 解题思路: 试题难度:三颗星知识点:交集及其运算 5.已知全集,集合,则( )

A. B. C. D. 答案:C 解题思路: 试题难度:三颗星知识点:补集及其运算 6.若集合,集合,则( ) A.) B. C. D. 答案:B 解题思路: 试题难度:三颗星知识点:补集及其运算 7.设集合,,则满足的集合有( ) A.1个 B.2个 C.3个 D.4个

答案:B 解题思路: 试题难度:三颗星知识点:交集及其运算 8.满足,且的集合M有( ) A.1个 B.2个 C.3个 D.4个 答案:B 解题思路: 试题难度:三颗星知识点:子集与真子集 9.若,则满足条件的集合共有( )个. A.1 B.2 C.3 D.4 答案:D 解题思路:

试题难度:三颗星知识点:并集及其运算 10.如图,U是全集,A,B,C是U的3个子集,则阴影部分所表示的集合是( ) A. B. C. D. 答案:A 解题思路: 试题难度:三颗星知识点:Venn图表达集合的关系及运算 11.已知全集,,那么下列结论中不成立的是( ) A. B. C. D. 答案:D 解题思路:

集合的特征函数交并补运算c语言

用集合的特征函数实现集合间的运算 一、实现功能:利用集合的特征函数实现集合间的运算。 二、实验说明:本程序用C语言编写,具体实现了集合的交并补运算。 三、程序思路(流程图表示): Main()函数 输入全集U元素个 数和各元素 输入全集A元素个数和 各元素 输入全集B元素个数和 各元素 获得A和B的特征函数 值 调用子函数进行交并补 运算 结束 四、子函数功能 Equal()判断集合A和集合B是否相等

Intersect()求集合A和集合B的交集Union()求集合A和集合B的并集Complement()求集合A或集合B的补集五、测试举例

六、程序源码 /*------------------------------------------- -----作者:随心无羁---------------------------- -----编译环境:VC6.0------------------------- -----时间:2013.12.3------------------------*/ #include #include int Equal(int m[100],int n[100],int num){//子函数:判断集合A和集合B是否相等 int i,flag = 1; for(i=0;i

集合的并交运算C语言

集合的并交运算C语言集团文件版本号:(M928-T898-M248-WU2669-I2896-DQ586-M1988)

题目一:集合的并、交运算 1设计思想 首先,建立两个带头结点的有序单链表表示集合A和B。须注意的是:利用尾插入法建立有序单链表,输入数值是升序排列。 其次,根据集合的运算规则,利用单链表的有序性,设计交、并和差运算。 根据集合的运算规则,集合A∩B中包含所有既属于集合A又属于集合B的元素。因此,须查找单链表A和B中的相同元素并建立一个链表存于此链表中。 根据集合的运算规则,集合A∪B中包含所有或属于集合A或属于集合B的元素。因此,遍历两链表的同时若元素相同时只将集合A中的元素存于链表中,若集合A中的下一个元素小于B中的元素就将A中的元素存于新建的链表中。反之将B中的元素存于链表中。 2所用数据结构 线性结构利用链式存储结构实现集合的基本运算。 3源代码分析 #include #include #define ERROR 0 #define OK 1

typedef int Status; typedef char Elemtype; typedef struct LNode{ 线性表的链式存储结构 Elemtype data; struct LNode *next; }Lnode,*Linklist; #include"text.h" LNode* Greatlist(int *N,int n) //建立一个带有头结点的单链表{ Linklist p,q,L; L=p=(LNode *)malloc(sizeof(LNode)); L->next=NULL; if(n!=0) { for(int i=0;idata=N[i]; p->next=q; //指针后移 p=q; }

集合的交并差

集合的交并差 班级:网工一班姓名:陈小龙学号:14051113 题目:编写一个演示集合的交并差运算的计算机程序 一、需求分析 1. 本次实验中要求输入的集合的元素类型为小写字母a到z,集合输入结束的标志是以“回车符”为标志的,集合的输入不限字符输入的顺序且允许重复输入和输入非法字符。 2. 本次实验中输出的集合中不包含重复的元素,集合中的元 素按ASCII从小到大排列输出且将自动过滤输入的非法字符。 3. 本次实验的程序可以计算用户输入的两个集合的交集、并集和补集; 4. 本次实验的测试数据有: 输入的集合为Set1=“magazine”,Set2=“paper”, 输出的集合为并集为“aegimnprz”, 交集为“ae”, 差集为“gimnz”; 输入的集合为 Set1=“012oper4a6tion89”,Set2=”error data”,输出的集合为并集为“adeinoprt”,并集为“aeort”,差集为“inp”。 二、概要设计 为实现上述程序的功能,用有序链表表示集合。因此,需要有两个抽象数据类型:有序表和集合。 1. 有序表的抽象数据类型定义:

ADT OrderedList{ 数据对象:D={ai|ai∈CharSet,i=1,2...,n,n>=0} 数据关系:R1={|ai-1,ai∈D,ai-1

集合练习题交并补

例1 判断下列集合间的关系: (1){|32} A x x =->与{|250} B x x =-≥; 变式1:若集合{|} A x x a =>,{|250} B x x =-≥,且满足A B ?,求实数a的取值范围. 变式2:已知集合{|5} A x a x =<<,{|2} B x x =≥,且满足A B ?,求实数a的取值范围. 变式3:已知集合 {}4 3 |≤ ≤ - =x x A,{}1 1 2|+ < < - =m x m x B且B A? 求实数m的取值范围.

例2、已知{}023|2=+-=x x x M ,{} 02|2=+-=a x x x N ,若M N ?, 求实数a 的取值范围. 变式:设{} 0158| 2=+-=x x x A ,{}01|=-=ax x B .若A B ?,求实数a 构成的集合M 。

例3、已知集合??????=1,,a b a A ,{}0,,2b a a B +=且A=B,求a,b 的值。 变式2. 已知2{|0}A x x px q =++=,2{|320}B x x x =-+=且A=B ,求实数p 、q 的值。

巩固练习: 1、已知集合{}21|<<-=x x A ,{}10|<<=x x B ,则( ) A .A> B 真包含于B C. A 真包含B D. B A ? 2、集合{}N x x x A ∈<≤-=且,31|的真子集的个数( ) A .16 B 8 C.7 3、满足{}{}d c b a M a ,,,??的集合M 共有( ) A .6 B 7 C.8 4、已知集合{}x A ,3,1=,{}1,2x B =,且A B ?,则满足条件的实数的个数为 A .1 B 2 C.3 5、已知{} 02|2=++=a x ax x A ,若集合A 中有且只有2个子集,则由a 的 取值组成的集合为 。 6、集合{}与0φ的关系 7、已知{} 01|2=++= ax x x A ,{}2,1=B ,且B A ?,求实数a 的取值范围.

集合 的交并和差的运算与实现

#include #include #include #include #include #include // 顺序表定义 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define IN_THIS_LIST 1 #define NOT_IN_THIS_LIST 0 //宏定义 typedef char Elemtype; typedef int Status; typedef struct List { Elemtype data; struct List *next; }LNode,*LinkList; //结构体定义 Status InitList(LinkList &L) { L=(LinkList)malloc(sizeof(LNode)); if(!L) exit(OVERFLOW); L->data=NULL;L->next=NULL; return OK; } //构造表头 Status PrintList(LinkList L) { LinkList PrintList=L->next; if(!L->next) {cout<<"该集合为空!"<next) { cout<data<<","; PrintList=PrintList->next; } cout<data; cout<

关于集合的交并补运算

关于集合的交并补运算 我们来看这样一个例题. 【例】已知集合U ={x ∈R |1<x ≤7},A ={x ∈R |2≤x <5},B ={x ∈R |3≤x <7}.求: (1)(U C A )∩(U C B ); (2)U C (A ∩B ); (3)(U C A )∪(乙B ); (4)U C (A ∪B ).. 利用数形结合的思想,将满足条件的集合在数轴上一一表示出来,从而求集合的交集、并集、补集,既简单又直观,这是最基本最常见的方法.本例题可先在数轴上画出集合U 、A 、B ,然后求出A ∩B ,A ∪B ,U C A ,U C B ,就能逐一写出各小题的结果,有条件的还可以设计多媒体教学课件,展现这一全过程. 解:利用数轴工具。画出集合U 、A 、B 的示意图,如下图. 可以得到,A ∩B ={x ∈R |3≤x <5}, A ∪ B ={x ∈R |2≤x <7}, U C A ={x ∈R |1<x <2}∪{x |5≤x ≤7}, U C B ={x ∈R |<x <3}∪{7}. 从而可求得 (1)(U C A )∩(U C B );{x ∈R |1<x <2}∪{7}. (2)U C (A ∪B )={x ∈R |1<x <2}∪{7}. (3)(U C A )∪(U C B )={x ∈R |1<x <3}∪{x ∈R |5≤x ≤7}. (4)U C (A ∩B )={x ∈R |1<x <3}∪{x ∈R |5≤x ≤7}. 认真观察不难发现: U C (A ∪B )=(U C A )∩(U C B );

U C (A ∩B )=(U C A )∪(U C B ). 这个发现是偶然的呢?还是具有普遍的意义呢? 为了提高学生分析问题和解决问题的能力,培养他们探索研究的思维品质和创新意识,同时也让学生体验数形结合思想方法解题的要领和重要性,我们可以做两方面的工作: (1)让学生自己编拟一道集合运算的例题,并验证上述等式是否成立; (2)设计一套韦恩图来验证上述等式(有条件的可设计一多媒体课件来展示并验证). 第(1)方面的工作让学生自己尝试,我们来做第(2)方面的工作. 我们来看四个图: (1) (2) (3) (4) 细心观察、领会,我们能够看出: 图(1)的阴影部分是A ∩B ; 图(2)的阴影部分是B ∩(U C A ); 图(3)的阴影部分是A ∩(U C B ); 图(4)的阴影部分是U C (A ∪B ),或者是(U C A )∩(U C B ). 从图(4)我们已经得到U C (A ∪B )=(U C A )∩(U C B ); 从图(1)我们也可得到U C (A ∩B )=(U C A )∪(U C B ). 一般地,对于任意集合A 、B ,下列等式成立. (1)U C (A ∩B )=(U C A )∪(U C B ); (2)U C (A ∩B )=(U C A )∩(U C B ). 这就是著名的德·摩根定律,它可以叙述为:A 、B 交集的补集等于A 、B 的补集的并集;A 、B 并集的补集等于A 、B 的补集的交集.

实验 二 集合的并、交和差运算C++

实验二集合的并、交和差运算 // 在写代码的过程中,没有注意头结点~~~ 导致出现了很多野指针~~~ ,几乎重写. 。o 0 ~~~ // 经同学检查,发现有错误~~~ 红色部分代码已经修正 //集合的并、交和差运算 /* 选作内容 (1)集合元素的判定和子集判定运算 (2)求集合的补集 (3)集合的混合式运算表达求值 (4)集合的元素类型推广到其他类型,甚至任意类型 */ /* 测试数据: (1)Set1 ="magazine",Set2 ="paper", Set1∪Set2 ="aegimnpra",Set1∩Set2 ="ae",Set1 - Set2 ="gimnz" (2)Set1 =012oper4a6tion89",Set2 ="error date", Set1∪Set2 ="adeinoprt",Set1∩Set2 ="aeort",Set1 - Set2 ="inp" */ #include #include #include using namespace std; #define Elem Type char typedef struct ElemNode { Elem Type elem; struct ElemNode *next; }ElemNode, *Set; //-------------FunctionList------------------------------ //---------------函数原型-------------------------------- int LengthOf(Set src);//返回一个集合的长度 void CreateSet(Set dest);//创建一个新的字母集合,限定a-z void EmptySet(Set dest);//清空一个集合,保留头结点 void DestroySet(Set dest);//销毁集合

集合的交并差运算

《数据结构》 课程设计说明书 题目集合的并交差运算 学号 姓名 指导教师 日期

内蒙古科技大学课程设计任务书

附录:程序代码 #include #include #include typedef struct LNode //定义单链表结点类型{ char data; struct LNode *next; } LinkList; class jihe { int length; LinkList *L; public: jihe() { L=(LinkList*)malloc(sizeof(LinkList)); length=0; L->next=NULL; } ~jihe() { LinkList *p; while (L->next) { p = L->next; L->next = p->next; free(p); } } void ListCreat(int i); void ListDisp(int i); void BingJi(); void JiaoJi(); void ChaJi(int i); void ListInsert(int i); void ListDelete(int i);

jihe a[3];jihe b; /*************************长度****************************************/ int jihe::ListLength(int i) { LinkList *p; p = a[i].L; while (p->next != NULL) { p = p->next; a[i].length ++; } return a[i].length; } /****************************输入*************************************/ void jihe::ListCreat(int i) /*尾插法插入元素*/ { cout<<"请为集合输入数值(以回车键结束):"; char c; LinkList *p,*r; a[i].L=(LinkList*)malloc(sizeof(LinkList)); a[i].L->next=NULL; r=a[i].L; cin>>c; while(c!='\n') { p=(LinkList*)malloc(sizeof(LinkList)); if(c==' ') {} else { p->data=c; r->next=p; r=p; } c=cin.get(); } r->next=NULL; cout<<"输入完毕,请按回车键返回主菜单!"<

c语言的集合的交并补

通过键盘,分别输入两个数据元素类型为正整数的集合A和B,以负数输入为结束条件,输出两个集合的交、并、差。从程序完善性上考虑,集合元素输入时,要有检查元素重复的功能。集合可以用数组也可以用链表存储。 输入: A={1,2,3,4,5} B={3,4,5,6,7} 输出 A交B={3, 4, 5} A并B={1,2,3,4,5,6,7} A-B={1, 2} 作者lyc #include #include//包含memcyp() #define N 20//数组长度 //遍历数组函数 void bianli(int a[2*N],int num){ for(int i=0;i

scanf("%d",&c); if(c<0) break; a[i]=c; count1=i; } printf("请输入第二个集合:\n"); for(int i=0;i

集合的并,交和差运算

石河子大学 《集合的并,交和差运算》程序设计基础课程设计报告 二OO八年六月二十一日

目录 一.编程目的: (2) 二.设计要求 (2) 三.各函数功能说明: (2) 四.函数框架图: (6) 五.总结: (7) 参考书目……………………………………………………………….8.

一.编程目的: 编写数学程序,能够演示执行集合的集合的并,交和差运算的程序,可以任意对两个集合进行集合之间的运算。 通过该程序的编写,我学会了如何更加熟练的掌握类和动态链表,我觉得程序设计很有难度,同时我学会了不会的一定要自己去找资料和问自己的同学或者询问自己的师兄师姐,那样有助于自己的自主学习。 经过自己的查找和询问,让自己对书上的知识理解的更加透彻一点了,该程序让我们把书上的知识灵活运用,让我们把书上的知识变活了,不至于掌握死的知识。 二.设计要求: 用类、数组建立数据库(最少包含3条记录以及具有下列功能) 1.集合的限定:集合元素必须为小写字母(元素为小写字母‘a~z’)2.能够进行集合之间的并集,交集以及差集运算。 3.可以进行最简单的提示(例如输入数据有误时候会进行提示) 三.各函数功能说明: 函数源代码以及函数的功能: #include #include

typedef struct pointer { //定义一个结构体变量pointer char dat; struct pointer *link; } pointer; void readdata(pointer *head){ //读集合 pointer *p; char tmp; printf("input data ('0' for end):"); //输出结果以‘0’结尾 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的并

集合的并、交和差运算

集合的并、交和差运算 实习报告 题目:编制一个演示集合的并、交和差运算的程序 班级: 姓名: 学号: 完成日期: 一、需求分析 1.本演示程序中,集合的元素限制在小写字母‘a’-‘z’之间。集合的大小不限制,集合的输入形式为一个以“回车符”为结束标志的字符串,串中字符顺序不限,且允许出现重复字符或非法字符,程序运用时自动过滤去,输出的运算结果中将不含重复字符和非法字符。 2.演示程序以用户和计算机对话的形式进行,即在计算机终端中显示提示信息之后,有用户自行选择下一步命令,相应输入数据和运算结果在其后显示。 3.程序的执行命令有:1)选择操作2)任意键清屏 4.数据测试 (1)Set1=”magazine”, Set2=’paper”, Set1∪Set2=”aegimnprz”,Set1∩Set2=”ae”,Set1-Set2=”gimnz”; (2) Set1=”012oper4a6tion89”,Set2=”error data”, Set1∪Set2=”adeinoprt”,Set1∩Set2=”aeort”, Set1-Set2=”inp”. 二、概要设计 为实现上述功能,需要顺序表这个抽象数据类型。 1.顺序表抽象数据类型定义 ADT sqlist{ 数据对象:D={ai|a i∈Elemset,i=1,2,3,…n,n>=0} 数据关系:R1={|ai-1,ai∈D,i=2, … n} 基本操作: InitList(&l) 操作结果:构造一个空的顺序表l。 ListLength(l) 初始条件:顺序表l已存在。 操作结果:返回l中的元素个数。 ListInsert_Sq(&L, i, e) 初始条件:顺序表l已存在。 操作结果:在l中第i个元素前面插入元素e。 CreatSqList(&l, a[],n) 初始条件:顺序表l已存在。 操作结果:将数组a[n]每个元素赋给顺序表l。 GetElem(L, i, &e) 初始条件:顺序表l已存在。 操作结果:返回l中第i个元素的值

集合的交并补运算

、集合的交、并、补运算

————————————————————————————————作者:————————————————————————————————日期:

集合的交、并、补运算练习题 1、设(1,3]A =-,[2,4)B =,则A B =I . 2、已知全集{}5,4,3,2,1,0=U ,集合2 {|320}A x x x =-+=,{|2}B x x a a A ==∈,, 则集合)(B A C u ?= 3、设全集{}22,3,23U a a =+-,{}21,2A a = -,{}5U C A =,则a 的值为 。 4、设集合(){},|6A x y x y =+=,集合(){},|4B x y x y =-=,则A B I = . 5、已知全集U 为实数集R, }51{≤≤=x x A ,}30{><=x x x B 或, 求:B A ?, )(B C A U ?,)()(B C A C U U ?. 6、设全集{}71≤<=x x S 、{}52<≤=x x A ,{} 73<≤=x x B , 求①A B I ②B A Y ③S C A 7、设集合A =????? x ∈R |? ?? ?????? ?x +1≥0,x -3≤0,B ={x ∈Z |x -2>0},则A ∩B =________. 8、如图所示的韦恩图中,,A B 是非空集合,定义集合#A B 为阴影部分表示的集合,即#A B =},|{B A x B x A x x ??∈∈,且或.若 }5,4,3,2,1{=A ,}7,6,5,4{=B ,则#A B = . 变式 :若}3|{x x y x A -+== ,[)2,B =+∞,则#A B = . 9、设全集{|17Z}{2,3}{1,6}U U U x x x A B A B =≤≤∈==I I ,,,痧, {4}U A B =I e,则集合B = . 10、设{} 22,1,1A a a =--+,{},7,1B b a =+ ,A B =I {}1,7M =-. (1)设全集U A =,求M C U ; (2)求a 和b 的值. 11、已知函数()4f x x =-的定义域为A ,{}|231B x x =+≥. ⑴求A B I ; ⑵设全集U R =,求()U C A B I ; ⑶若{}|211Q x m x m =-+≤≤,,P A B Q P =?I ,求实数m 的取值范围.

专题1.2+求同存异解决集合的交、并、补运算问题含答案

考纲要求: 1、理解两个集合的并集与交集的含义,会求两个简单集合的并集与交集. 2、理解在给定集合中一个子集的补集的含义,会求给定子集的补集. 3、能使用韦恩(Venn)图表达集合的关系及运算. 基础知识回顾: 1、集合的基本运算 集合的并集集合的交集集合的补集 符号表示A∪B A∩B 若全集为U,则集合A的补集为?UA 图形表示 意义{x|x∈A,或x∈B} {x|x∈A,且x∈B} {x|x∈U,且x?A} 2、集合的运算性质 ①A∪B=A?B?A,A∩B=A?A?B; ②A∩A=A,A∩?=?; ③A∪A=A,A∪?=A; ④A∩?U A=?,A∪?U A=U,?U(?U A)=A,?U(A∪B)=?U A∩?U B,?U(A∩B)=?U A∪?U B 应用举例: 类型一:已知集合中的元素,求其交集、并集或补集 例1.【四川省成都市第七中学2018届高三下学期三诊】已知集合,,则

A. B. C. D. 【答案】C 例2.【延安市2018届高三高考模拟】全集{}2,1,0,1,2U =--, {}2,2A =-, 2 {|10}B x x =-=,则图中阴 影部分所表示的集合为( ) A. {}1,0,1- B. {}1,0- C. {}1,1- D. {}0 【答案】D 【解析】试题分析:根据韦恩图得到表示的是()U C A B ?,根据题意求得集合B ,再求集合A 并B ,再求补集即可. 详解: {} {}2 |1011B x x =-==-,,阴影部分表示的集合为()U C A B ?, {}2,1,1,2A B ?=--, (){}0U C A B ?= 故答案为:D. 点睛:这个题目考查了韦恩图的应用,一般先读懂韦恩图所代表的集合的含义,再将区域用集合的交并补形式表示出来,最终求解即可. 例3.【郑州外国语学校2018届高三第十五次调研】已知全集 ,集合 , ,则中元素的个数是( ) A. 0 B. 1 C. 2 D. 3

相关文档
相关文档 最新文档