好文档 - 专业文书写作范文服务资料分享网站

广东省汕头市金山中学高中信息技术 竞赛班第二阶段培训 第四课 自定义数据类型教案

天下 分享 时间: 加入收藏 我要投稿 点赞

§4 自定义数据类型

Pascal语言允许用户按语法规则自己定义一些数据类型。 数据类型定义的一般形式为:

TYPE <类型标识符> = <类型>;

§4.1 枚举类型

在程序设计中常用到一些非数值的数据,如:月份、星期、颜色、科目等。在程序中直接用自然语言来代表这些数据,将使程序易读易理解。

枚举类型是用户自定义类型,用户能够直接用标识符来依次列举枚举类型的每一种可取值。

1.枚举类型定义的一般形式为:

TYPE <类型标识符> = (标识符表);

其中标识符表是一串用逗号隔开的标识符,它列举了枚举类型所有可取的值。 2.上面仅仅是类型的定义,使用枚举类型的变量还需进行类型说明: VAR <变量名> : <类型标识符>;

例如: type days = (sun , mon , tue , wed , thur , fri , satur); colors = (red , yellow , blue , green , black , white); operator = (plus , minus , times , divide)

var today , holiday : days; f : colors;

p1 , p2 , p3 : operator;

上例中,首先进行类型定义,days定义了一星期中的各天,由星期日、一、二、…、六共七各成份组成;命名为colors的枚举类型由红、黄、蓝、绿、黑、白六种颜色;operator型由加、减、乘、除四个成份组成。接下来的变量说明中,today、holiday被说明为days类型,即这两个变量只能在组成days的七种成份中取值。f被说明为colors型,p1、p2、p3被说明为operator型。

枚举型的定义可以不预先在类型定义中定义类型标识符,而在说明中直接定义枚举类型,如上例中,可省去type类型定义,将变量说明改为:

var p1 , p2 , p3 : (plus , minus , times , divide) 【注意】

① 每个枚举类型所允许的枚举值,必须全部列在其后的括号中;

② 枚举值只能是标识符(单个字符或以字母开头的字母数字组合);

③ 每个枚举值只能出现在一个枚举类型定义中,并且只能在该定义中出现一次; ④ 枚举变量只能在该枚举类型定义的值中取,即变量的取值受变量的类型限制; 如下列枚举类型定义都是错误:

type

zm = (‘a’ , ‘b’ , ‘c’ , ‘d’ ); ② sz = ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ); ②

t1 = (sum , mon , tue , wed , sun ); t2 = ( wed , thu , fri , sat ); ③ 3.枚举类型的变量不能用read或write语句直接读写。

如: read (p1); 或 write (p2); 都是错误的。 但枚举变量可以赋值,如: f := blue; p1:= plus; p2:= p1;

4.枚举类型是有序类型,即在类型定义中列出的值是有序的。

它的序号从0开始,按自左至右,从小到大的顺序编排。如在days类型中, sun的序号为0,mon为1,……,satur为6。

因此枚举类型的量可以进行关系比较运算,如mon < wed 。 可用于枚举类型的标准函数有:pred、succ、ord。

如: pred (green) = blue; { green 的前驱元素为blue} succ (red) = yellow; {red的后继元素为yellow} ord (Wed) = 3; {Wed对应的序号为3} 【例1】取球问题

黑箱中有红、黄、蓝、白、黑五种颜色的球(数量均有多个),现从箱中依次取三个球,求取出三种颜色的球的所有可能。 思路分析:

我们穷举出所有的可能,从中输出符合条件的方案,并统计方案总数。

设每次取出的球依次为i,j,k,它们分别是五种色球之一。当第2次取出的球与第1次取出的球颜色不同时,才看第3次取出的球,若三次取出的球颜色互不相同,则输出该方案。但枚举变量不能直接输出,我们利用case语句来输出“red”、“yellow”等字符串。为了避免重复写三个结构相似的case语句(分别用来输出i、j、k),设一中间变量p来存放某一球的颜色,循环三次,p依次代表i、j、k的颜色,每次根据p值来输出相应的字符串。

program type

color = ( red , yellow , blue , while , black ); var

i , j , k , pri : clolor; loop , n : integer; begin n:=0;

for i := red to black do {列举第1次取球的所有可能} for j := red to black do {列举第2次取球的所有可能}

if (i<>j) then

for k:=red to black do {列举第3次取球的所有可能}

if (k<>i) and (k<>j) then begin

n:=n+1;

write(n ,’ : ’);

for loop :=1 to 3 do begin

case loop of

1 : pri:=i; 2 : pri:=j; 3 : pri:=k; end;

case pri of {根据pri的值输出对应字符串}

red : write (‘red’) ; yellow : write (‘yellow’); blue : write (‘blue’); white : write (‘white’); black : write (‘black’); end;

end; {for} writeln;

end; {if}

writeln (‘total: ’,n); {输出方案总数} end.

§4.2 子界类型

Pascal语言允许说明变量的范围,通过定义子界类型来限定数据的取值范围。 1.子界类型定义的一般形式为:

TYPE <子界类型标识符> = <下界> . . <上界>;

其中下界必须小于等于上界,且属于同一有序类型的常量(可以是整型、布尔型、字

符型、枚举型,但不能是实型)。 2.子界类型变量说明:

VAR <变量表> : <子界类型标识符>; 例如:

type month = 1 . . 12;

letter = ‘A’ . . ‘Z’;

var m1 , m2 : month;

c1 , c2 , d1 , d2 : letter;

我们对子界类型变量(如m1,c1等)的赋值和运算必须在子界类型所定义的范围内,否则程序运行时会出错。

子界类型是有序的,其元素序号是该元素在宿主类型中的序号。如对枚举子界变量求序数,得到的是相应枚举型数据本身的序号;而字符子界变量的序数是对应的ASCII码(十进制数)。

【例2】字符判别。

输入一字符,判别属于数字、大写字符、小写字符或其它字符。 Program zf;

var c : char;

begin

readln (c); case c of

‘0’ . . ‘9’ : writeln (‘digits’);

‘a’ . . ‘z’ : writeln (‘upper-letter’); ‘A’ . . ‘Z’ : writeln (‘lower-letter’); else writeln (‘other’);

end;

end.

练 习 四 1. 下列哪组类型的变量可以作为for循环中的循环控制变量 ( ) A.枚举型和实数型 B. 枚举型和记录型变量中的子界型域 C.字符型和集合型 D. 子界型和记录型 2.下列类型定义中,合法的是 ( )

A.TYPE p=(1,2,3,4) B. TYPE p=(‘a’, ‘b’, ‘c’, ‘d’) C.TYPE p=(1..4) D. TYPE p=(a,b,c,d)

3.从键盘读入年、月、日,输出该日期是当年的第几天。(用子界类型)

广东省汕头市金山中学高中信息技术 竞赛班第二阶段培训 第四课 自定义数据类型教案

§4自定义数据类型Pascal语言允许用户按语法规则自己定义一些数据类型。数据类型定义的一般形式为:TYPE=;§4.1枚举类型在程序设计中常用到一些非数值的数据,如:月份、星期、颜色、科目等。在程序中直接用自然语言来代表这些数据,将使程序易读易理解。枚举类
推荐度:
点击下载文档文档为doc格式
2kmfr43rqj1xep036fj71ujtp7zqyg019fw
领取福利

微信扫码领取福利

微信扫码分享