枚举子界记录集合_第1页
枚举子界记录集合_第2页
枚举子界记录集合_第3页
枚举子界记录集合_第4页
枚举子界记录集合_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

整型,实型,字符型,布尔型枚举,子界集合,记录,数组,文件动态简单自定义类型构造指针数据类型江苏省锡山高级中学信息技术教研组

一、枚举类型

在程序中用自然语言中有相应含义的单词来代表某一状态,则程序就很容易阅读和理解。也就是说,事先考虑到某一变量可能取的值,尽量用自然语言中含义清楚的单词来表示它的每一个值,这种方法称为枚举方法,用这种方法定义的类型称枚举类型。例如,

typedays=(sun,mon,tue,wed,thu,fri,sat);

colors=(red,yellow,blue,white,black,green);

typecolortype=('red','yellow','blue','white');

numbers=(1,3,5,7,9);

ty=(for,do,while);①括号中的每一个标识符都称为枚举元素或枚举常量。②定义枚举类型时列出的所有枚举元素构成了这种枚举类型的值域(取值范围)。枚举类型的一般格式:

type枚举类型标识符=(标识符1,标识符2,…,标识符n)

性别、月份、星期几、颜色、单位名、学历、职业等江苏省锡山高级中学信息技术教研组枚举类型变量

定义了枚举类型,就可以把某些变量说明成该类型。

varholiday,workday:day;

incolor:colors;

也可以把变量的说明与类型的定义合并在一起,如:

var

holiday,workday:(sun,mon,tue,wed,thu,fri,sat);

incolor:(red,yellow,blue,white,black,green);江苏省锡山高级中学信息技术教研组枚举类型的性质

⒈枚举类型属于顺序类型

根据定义类型时各枚举元素的排列顺序确定它们的序号,第一个枚举元素的序号为0。例如:设有定义:typedays=(sun,mon,tue,wed,thu,fri,sat);

则:ord(sun)=0,ord(mon)=1,ord(sat)=6;succ(sun)=mon,succ(mon)=tue,succ(fri)=sat;pred(mon)=sun,pred(tue)=mon,pred(sat)=fri。注意:枚举类型中的第一个元素无前趋,最后一个元素无后继。江苏省锡山高级中学信息技术教研组⒉对枚举类型只能进行赋值运算和关系运算

枚举类型不能进行算术运算和逻辑运算。

在枚举元素比较时,实际上是对其序号的比较。赋值或比较时,应注意类型一致。例如,设程序有如下说明:

typedays=(sun,mon,tue,wed,thu,fri,sat);

colors=(red,yellow,blue,white,black,green);

varcolor:colors;

weekday:days;

则下列语句是合法的:

weekday:=mon;

ifweekday=sunthenwrite('rest');

weekday<>sun

下面语句是不合法的:

mon:=weekday;

mon:=1;

ifweekday=sunorsatthenwrite('rest');

sun>red

weekday<>color江苏省锡山高级中学信息技术教研组⒊枚举变量的值只能用赋值语句来获得

不能用read(或readln)读一个枚举型的值。不能用write(或writeln)输出一个枚举型的值。如write(red)是非法的,会发生编译错误。⒋同一个枚举元素不能出现在两个或两个以上的枚举类型定义中。

如:

typecolor1=(red,yellow,white);

color2=(blue,red,black);

是不允许的,因为red属于两个枚举类型。对枚举数据的输入与输出可通过间接方式进行。输入时,一般可输入一个代码,通过程序进行转换,输出时,也只是打印出与枚举元素相对应的字符串。江苏省锡山高级中学信息技术教研组1以下正确的枚举定义是:

(A)typevowel=('a','e','i','o','u');

(B)typenum=(1..3,8..10);

(C)typecolor=(red,blue,green);

(D)typerealtype=(1.5,2.5,3.5,4.5);

2若要用枚举类型表识符来表示加、减、乘、除运算,则以下正确的定义形式是:

(A)typeop=(+,-,*,/);

(B)typeop=('+','-','*','/');

(C)rypeop=(A+,B-,C*,D/);(D)typeop=(add,sub,mult,divi);

3设有如下类型定义和变量说明:

type

colors=(red,yellow,blue,white);

var

color1,color2:colors;

判断下列语句是否正确,为什么?

(1)colors:=red;

(2)color1:=yellow;(3)color2:=color1;(4)color1:='blue';(5)color2:=black;

(6)color1:=blue+white;

4设有如下类型定义和变量说明;

type

colors=(red,yellow,blue,white,black);

var

color1,color2:colors;

如果已经赋值:color1:=black;color2:=white;指出下列函数的值:

(1)pred(blue)

(2)pred(succ(color2))(3)succ(red)

(4)succ(pred(color1))(5)ord(color2)

(6)ord(pred(succ(yellow)))巩固练习CD2,35yellow,whiteYellow,black3,1江苏省锡山高级中学信息技术教研组

programex8_1;

typeweek=(sun,mon,tue,wed,thu,fri,sat);

var

i:integer;

day,sucday:week;

begin

write('Whatdateisit');readln(i);

caseiof{根据输入i转换成枚举型}

1:day:=mon;

2:day:=tue;

3:day:=wed;

4:day:=thu;

5:day:=fri;

6:day:=sat;

7:day:=sun;

end;Ex8-1

一周七天用sun,mon,tue,wed,thu,fri,sat表示,要求利用枚举类型编程:当输入星期几的数字,能输出它的后一天是星期几(也用英文表示)。{计算明天sucday}

if(day=sat)thensucday:=sun

elsesucday:=succ(day);

{输出明天是星期几}

write('Thenextdayis');

casesucdayof

sun:writeln('sunday');

mon:writeln('monday');

tue:writeln('tuesday');

wed:writeln('wednesay');

thu:writeln('thursday');

fri:writeln('friday');

sat:writeln('saturday');

end;

end.

评注:程序中变量day、sucday分别表示今天、明天。江苏省锡山高级中学信息技术教研组二、子界类型

子界类型的一般格式:

type<子界类型标识符>=<常量1>..<常量2>

typeage=0.5..150;

letter=0..'z';

let1='z'..'a';

都是错误的。③可以直接在变量说明中定义子界类型。②下界和上界必须是同一顺序类型(该类型称为子界类型的基类型),且上界的序号必须大于下界的序号。如:

typeletter='a'..'d';

varch1,ch2:letter;

可以合并成:

varch1,ch2:'a'..'d';

说明:①其中常量1称为子界的下界,常量2称为子界的上界。在程序中对所用的变量的值域作具体规定江苏省锡山高级中学信息技术教研组子界类型数据的运算规则

⒈凡可使用基类型的运算规则同样适用该类型的子界类型。

⒉对基类型的运算规则同样适用于该类型的子界类型。

⒊基类型相同的不同子界类型数据可以进行混合运算。例如:设有如下说明:

type

a=1..100;

b=1.1000;

c=1..500;

var

x:a;

y:b;

t:c;

z:integer;

则下列语句也是合法的:

Z:=Sqr(x)+y+t;

下列语句:

t:=x+y+z;

当X+Y+Z的值在1~500范围内时是合法的,否则会出错。江苏省锡山高级中学信息技术教研组5下列子界类型定义语句中正确的是:

(A)typenum=1.0..100.20;

(B)typenum=1..100;

(C)typenum=a..f;

(D)typenum='z'..'a';

6已知如下子界类型定义及变量声明:

type

ntype=-10..10;

var

m:ntype;

n:integer;

问下列语句哪一个可能产生错误:

(A)n:=m;(B)m:=n;(C)n:=abs(m);(D)n:=n+m;

7下列子界类型定义语句哪些是错误的:

(1)typea=10..10;

(2)typea=10..5;

(3)typea=10..sqr(10);(4)typea=10.12..10.25;

(5)typea='1'..'5';

(6)typea=1..'5'巩固练习BB1,2,3,4,6江苏省锡山高级中学信息技术教研组

ex8_2按年月日的顺序输入一日期,输出该日期是这一年中的的第几天Programex8_2;

Var

month,I:1..12;day:1:31;year,dayth;integer;BeginRead(year,month,day);

dayth:=0;ForI:=1tomonth-1doCaseIof1,3,5,7,8,10,12:dayth:=dayth+31;4,6,9,11:dayth:=dayth+30;2:if(yearmod4=0)and(yearmod100<>0)or(yearmod400=0)thendayth:=dayth+29

elsedayth:=dayth+28;End;

dayth:=dayth+day;Write(dayth);End.江苏省锡山高级中学信息技术教研组三

赋值相容1.类型相容性

类型相容是对参加同一运算的两个对象的类型要求。设有两个变量,如果满足下列条件之一,就说这两个变量的类型相容。

(1)两个变量的类型相同

a.两个变量被同一类型说明。例如:vara,b:1..30;

b.两个变量的类型是同一类型标识符。例如:vara:1..30;

b:1..30;

c.两个变量的类型是不同的类型标识符,但在类型定义中已经说明两个标识符相同。例如:typedate=1..100;

range=date;

varm:data;

n:range;

(2)一个变量的类型是另一个变量的子界。

(3)两个变量的类型都是同一基类型的子界。

(4)两个变量的类型是基类型相容的集合类型。

(5)两个变量的类型是成分相同的串类型。江苏省锡山高级中学信息技术教研组2.赋值相容性

赋值相容是对赋值操作的两个对象的类型要求。设赋值语句“:=”左边的变量类型为T,右边表达式的类型为E,若类型T和类型E满足下列条件之一,则称他们是赋值相容的。

(1)T和E是相同的类型,而且类型不是文件类型,也不是具有文件类成分的构造类型。

(2)T是实型,而E是整型或整型的子界。

(3)T和E是类型相容的顺序类型,并且E的值不超出T所定义的值的范围

(4)T和E是类型相容的集合类型,并且E的值不超出T所定义的值的范围

(5)T和E是类型相容的串类型。

当T和E是顺序类型或都是集合类型时,不仅要求这两个类型是相容的,而且要求E的值不超出T所定义的值的范围;否则将产生类型溢出,而这种错误只能在你运行程序时进行检查,因此你必须要避免不发生这种错误。

江苏省锡山高级中学信息技术教研组三、集合

定义:type类型名=setof基类型------------------------------------type

num=setofchar;

var

n:num;---------------------------------------var

n:setofchar;由具有某些共同特征的元素构成的一个整体江苏省锡山高级中学信息技术教研组表示:用一对方括号表示,元素之间用逗号分隔。

[red,green,black,white]--有四个枚举量的集合

['A','B','C','D']--有四个字符的集合

[1..20]--包含了1到20中所有整数的集合

[0]--只有一个元素0的单元素集

[]--空集

①在集合中,如果元素的值是连续的,则可用子界型的表示方法表示。例如:[1,2,3,4,5,7,8,9,10,15]可以表示成:[1..5,7..10,15]

②集合的值与方括号内元素出现的次序无关。例如,[1,5,8]和[5,1,8]的值相等③在集合中同一元素的重复出现对集合的值没有影响。例如,[1,8,5,1,8]与[1,5,8]的值相等。

④每个元素可用基类型所允许的表达式来表示。如[1,1+2,4]、[ch]、[succ(ch)]。江苏省锡山高级中学信息技术教研组运算

p126(1)赋值(:=):jihe1:=[‘A’..‘C’]

(2)并(+):[0..7]+[0..4]的值为[0..7]

(3)交(*):[0..7]*[0..4]的值为[0..4]

(4)差(-):

[0..7]-[0..4]的值为[5..7]

(5)相等(=):[0..7]=[0..4]的值为false

(6)不等(<>):[0..7]<>[0..4]的值为true

(7)包含于(<=):[0..7]<=[0..4]的值为false

(8)包含(>=):

[0..7]>=[0..4]的值为true

(9)成员(in)

1in[0..4]的值为true江苏省锡山高级中学信息技术教研组练习设有如下说明:

typeweekday=(sun,mon,tue,wed,thu,fri,sat);

week=setofweekday;

subnum=setof1..50;

写出下列表达式的值:

⑴[sun,sat]+[sun,tue,fri]

⑵[sun,fri]*[mon,tue]

⑶[sun,sat]*[sun..sat]

⑷[sun]-[mon,tue]

⑸[mon]-[mon,tue]

⑹[sun..sat]-[mon,sun,sat]

⑺[1,2,3,5]=[1,5,3,2]

⑻[1,2,3,4]<>[1..4]

⑼[1,2,3,5]>=[1..3]

⑽[1..5]<=[1..4]

⑾[1,2,3]<=[1..3]

⑿2in[1..10]⑴[sun,sat,tue,fri]

⑵[]

⑶[sun,sat]

⑷[sun]

⑸[]

⑹[tue..fri]

⑺TRUE

⑻FALSE

⑼TRUE

⑽FALSE

⑾TRUE

⑿TRUE江苏省锡山高级中学信息技术教研组注意(1)集合运算相当快,在程序中常用集合表达式来描述复杂的测试。如

A)条件表达式:(ch=‘T’)or(ch=‘t’)or(ch=‘Y’)or(ch=‘y’)可用集合表达式表示为:chin[‘T’,‘t’,‘Y’,‘y’]

B)if(ch>=20)and(ch<=50)then...;可写成:ifchin[20..50]then...;(2)集合元素是无序的,所以ord,pred和succ函数不能用于集合类型的变量(3)TurboPascal规定集合的元素个数不超过256个(当实际问题所需的元素个数大于256时,可采用布尔数组代替集合类型)。如下定义是错误的:vari:setofinteger;

(4)集合类型变量不能进行算术运算,不允许用读/写语句直接输入/输出集合。集合的建立:

A)要通过赋值语句实现;

B)

先初始化一个集合,然后通过并运算向集合中逐步加入各个元素.江苏省锡山高级中学信息技术教研组例ex8_3输入一系列字符,对其中的数字字符、字母字符和其它字符分别计数。输入'?'后结束。programex8_3;

varid,il,io:integer;ch:char;letter:setofchar;digit:setof'0'..'9';begin

letter=['a'..'z','A'..'Z'];

digit:=['0'..'9'];id:=0;il:=0;io:=0;repeat

read(ch);

ifchinletter

thenil:=il+1

elseifchindigit

thenid:=id+1

elseio:=io+1;

untilch='?';writeln('letter:',il,'digit:',id,'Other:',io);end.江苏省锡山高级中学信息技术教研组Ex8_4编制用筛法求1-n(n≤200)以内素数的程序。分析:由希腊著名数学家埃拉托色尼提出的"筛法",步骤如下:

①将所有候选数放入筛中;

②找筛中最小数(必为素数)next,放入集合primes中;

③将next的所有倍数从筛中筛去;

④重复②~④直到筛空。

江苏省锡山高级中学信息技术教研组

j:=0;

{打印出所有素数}请同学们补充

gramex8_3;

constn=200;

varsieve,primes:setof2..n;

next,j:integer;

begin

sieve:=[2..n];{“筛子”,将元素全都放进集合}

;{存放素数的集合,开始时为空}

next:=2;

repeat

{找筛sieve中最小一个数}

whilenot(nextinsieve)and(next<=n)do

;{如果next不在集合中,将集合中的next增加1,直到是集合中的元素}

;{将最小数放入素数集合中}

j:=next;

whilej<=ndo

begin

;

;

end

untilsieve=[];

primes:=[];next:=succ(next);primes:=primes+[next];{将这个素数的倍数从筛中删去}

sieve:=sieve-[j];j:=j+next江苏省锡山高级中学信息技术教研组上机练习例1:建立两个集合,然后对它们进行多种集合运算,并且输出结果。

例2:运用集合完成筛法找素数。

江苏省锡山高级中学信息技术教研组记录定义

type类型标识符=record

字段名1:类型1;

字段名2:类型2;

...

字段名n:类型n;

end;如:type

studata=record

num:string[6];

name:string[8];

sex:boolean;

s:array[1..5]ofreal;

end;

var

student:studata;

students:array[1..10]ofstudata;在实际问题中可能会遇到另一类数据,它是由性质各不相同的成份组成的,即它的各个成份可能具有不同的类型。例如,有关一个学生的数据包含下列项目:

学号字符串类型

姓名字符串类型

年龄整型

性别字符型

成绩实型数组江苏省锡山高级中学信息技术教研组①域名也称域变量标识符,应符合标识符的语法规则。在同一个记录中类型中,各个域不能取相同的名,但在不同的记录类型中,两个类型中的域名可以相同。

②记录类型的定义和记录变量可以合并为一个定义,如:

typedate=record

year:1900..1999;

month:1..12;

day:1..31

end;

varx:date;

③对记录的操作,除了可以进行整体赋值,只能对记录的分量──域变量进行操作。

④域变量的表示方法:记录变量名.域名

如前面定义的记录X,其3个分量分别为:x.year,x.month,x.day。

可以合并成:

varx:record

year:1900..1999;

month:1..12;

day:1..31

end;说明江苏省锡山高级中学信息技术教研组⑤域变量的使用和一般的变量一样,即域变量是属于什么数据类型,便可以进行那种数据类型所允许的操作。⑥开域语句:with。

with记录名do语句;或wit

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论