类型相容及应用.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
类型相容及应用 增加了自定义类型后,给编程带来了方便,但一个程序中数据类型比较多时,就会出现不同类型之间能否互相转换和赋值的问题。这就是类型相容的问题。 例如:var a:integer;b:10..100;c:real; 则执行语句a:=b;c:=a;是正确的,整型变量a的值可以自动转化策划能够实型数据。 而执行语句b:=a;a:=c;就会出错,如果a的值为200,就会超出子界的范围。因此,我们要限定一个数值可以同时属于两个不同类型的情况。 1.类型相容性。 满足下列类型相容的定义之一,则则称为类型相容。 1)如果类型A和B是同一类型的。 例如:type 或 type int1=1..50; int1=1..50; int2=int1; int2=1..50; 类型int1和int2就是相容类型 2)如果类型A是B的子界,或B是A的子界;或A和B均为同一顺序类型的子界。 例如:type int3=10..50; int4=0..100; ch1=’a’..’z’; ch2=’A’..’Z’; 类型int3是int4的子界,则他们相容;类型ch1和ch2同是字符类型的子界,则他们相容。 3)如果类型A和B是基类型相容的集合类型,则相容。 4)如果类型A和B是任意两个字符串类型,则相容。 *对于同一个值来说,可以属于类型相容的不同类型,但不能同时属于类型不相容的两个类型。只有以下两个除外: 在集合类型中,空集可以属于任何集合类型。 在指针类型中,值nil可以属于任何指针类型。 2.赋值相容性。 赋值相容是对进行赋值操作的两个对象的类型要求。设赋值语句“:=”左边是变量类型为T,右边的类型为E,即: T类型的变量 :=E类型的表达式 若T和E类型满足下列条件之一,则称他们为类型相容。 T和E是相同的类型,且该类型不是文件类型或具有文件成分的构造类型。 T是实型,而E是整型或整型的子界。 T和E是类型相容的顺序类型,且E的值不超出T所定义的值的范围。 T和E是类型相容的集合类型,且E的值不超出T所定义的值的范围。 T和E是类型相容的字符串类型,且E的长度不超出变量T的取值长度。 T时间字符串型,E是字符数组型,且E的长度不超出变量T的长度。 当T和E是顺序类型或都是集合类型时,不仅要求这两个类型相容,而且要求E的值不超出T所定义的值的范围,否则将产生溢出,而这中错误只能在运行程序时检查,因此要避免。例如: var a:integer; b:10..100; c:real; d1:’a’..’z’; d2:char; 则程序中执行下列语句是正确的: a:=80; d2:=’t’; a:=b; c:=b; d1:=d2; *类型的相容性可以在程序的编译阶段检查出来,而赋值的相容性则不行,这是因为在编译阶段表达式的值没有被计算出来,只有在程序运行时才能确定。 [例]:某医院内科有a,b,c,d,e,f,g七位大夫,他们在一星期内每天要值一次班,排班的要求为: a大夫值班比c大夫晚一天; d大夫值班比e大夫晚两天; b大夫值班日比g大夫早三天; f大夫值班日在b,c大夫值班日之间,且在周四(thu)。 请编出程序,打印出每个大夫的值班日。 注意多个for语句和多个if语句之间的嵌套时,条件表达式的书写,枚举类型的使用。结果为,a~g大夫的值班日依次为:Sunday,Tuesday,Saturday,Wednesday,Monday, Thursday,Friday. 参考程序已上传 练习讨论 进制数的转换问题 题2023:将一个十进制数转换为二进制数。 将一个四位的十六进制数转换为十 进制数。 测试数据1a2b对应十进制数6699 将十六进制的每一位上0~9和a~z对应的十进制0~15中的数求出来,分别为d1,d2,d3,d4然后通过运算:d1*16*16*16+d2*16*16+d3*16+d4*1,得到最后的结果。 * 问题分析: 在标准类型中,长整型范围是-2147483647~2147483647,而二进制 数10000000000的十进制数仅为1024,若不考虑数据范围直接进行进制 转换很可能出现数据溢出。 可以使用数组来存储各个数位上的数,假定输入的数据是长整型,数组 设为32位也够了。 利用集合表示二进制数时,方法如下,如18的二进制数为10010,则集 合的值为[2,5],即倒数第二、五位是1,其余是0。 *

文档评论(0)

xiaozu + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档