预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共22页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

集合和记录第一节集合3.集合间的关系:相等关系(或不相等);包含关系(子集与真子集) 4.几种重要的集合: ①空集: 没有任何成员的集合成为空集,记为{}。 空集是任何集合的子集。 ②幂集: 一个集合的所有子集组成的集合称为此集合的幂集。 例如:{1,2,3}的幂集是: {}、{1}、{2}、{3}、{1,2}、{1,3}、{2,3}、{1,2,3} 有2n个5.集合的运算: ①并: 集合A和集合B的所有成员合并起来(重复者只取一个)组成一个新的集合,这种运算称为集合的并运算,新集合称为A和B的并集。用AB表示。 ②交: 集合A和集合B共有的成员组成一个新集合,称为交运算,新集合称为A和B的交集。 用AB表示。 ③差: 集合A的成员去掉集合B中也包含的成员组成一个新的集合,称为集合的差运算,新集合称为集合A与集合B的差集。用A-B表示。二:PASCAL语言中的集合 1.集合的概念: 一个集合是由同一种有序类型的一组数据元素所组成的,这种类型称为集合类型的基类型。集合的基类型可以是任何一种顺序类型。 集合类型的定义及集合变量的说明: 2.集合类型的定义格式: type 标识符=setof基类型; 判断以下定义集合类型的对错: A.typenum=setof1..10; B.typenum2=setofinteger; C.typec=setofchar; D.typecolors=(red,blue,yellow,black,while); c1=setofcolors; 变量的说明:直接说明或说明与定义类型同时。 集合的表示:用[]括起来的一些元素。 如:[red,black,white,blue]几点注意: 1.集合的值与方括号内元素出现的次序无关。如:[1,2,3,4]和[1,2,4,3] 2.在集合中,同一元素的重复出现对集合的值没有影响。如:[1,2,3,1]和[1,2,3] 3.在集合中,若元素的值是连续的,可用子界类型表示。如:[1,2,3,4,8,11],可表示成[1..4,8,11] 4.集合中元素的个数不能超过256个,即基类型的序数值必须在0~255之间,其基类型可以是整型的子界、字符型、布尔型、枚举类型和子界类型。 5.每个元素均可用基类型所允许的表达式来表示。如:[1+10,4*2,3..6] 变量的取值: 如:typenumset=setof1..3; varn:numset; 集合n的值有8种可能:[]、[1]、[2]、[3]、[1,2]、[1,3]、[2,3]、[1,2,3] 当一个集合变量允许包含有n个元素时,不考虑有重复元素的情况,则所构成的集合有2n种可能。3.集合变量的赋值: 如:varch1,ch2:setof‘A’..‘Z’; 在程序执行部分,只能通过赋值语句来实现(ch1:=[];ch2:=[‘A’..‘D’];),不能用read(ch1,ch2)。另外要注意,不能写成(ch2:=‘A’..‘D’;)。 4.集合运算的实现 ①集合之间的并、交、差运算 +、*、- 例如:A=[1,3,4],B=[1,2,4] A+B=[1,2,3,4],A*B=[1,4],A-B=[3] 初学者常犯的一个错误是没有注意到运算符两边都必须是集合。 例如:[1,3,5,7]+[9]=[1,3,5,7,9]②集合之间的关系运算 相等或不相等:=、<> 包含或被包含:>=、<= 例如: [1,3,5]=[1,5]结果为false [1,3]<>[1,5,3]结果为true [1,3,5]<=[1,5,3,7]结果为true []<=[1,5,3]结果为true ③in运算 判断元素与集合之间的关系 1in[1,3,5,7]结果为true 1in[2,4,6,8]结果为false ④符号对照表 5.集合变量的输出: 集合的值不能直接以其书写的形式输出。为了输出必须写一段小程序,这一点类似枚举类型。 例如:用集合表示1~20之间的所有素数并输出。 通过程序已经求出:s:=[2,3,5,7,11,13,17,19];现在要将集合输出,程序如下: write(‘[’); fori:=1to20do ifiinsthenwrite(i:6); writeln(‘]’);三:应用举例 1.调用随机函数产生10个互不相同的正整数(0≤x≤40),放入集合中并一起输出(5个一行)。 var a:setof0..40; i,m,n:integer; begin a:=[];n:=0; randomize; repeat m:=random(41); ifnot(mina) thenbegina:=a+[m];n:=n+1;end; untiln=10; n:=0; fori:=0to40do ifiina thenbegin