派生类数据类型与结构体本章主要介绍派生类数据类课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《派生类数据类型与结构体本章主要介绍派生类数据类课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 派生 数据类型 结构 本章 主要 介绍 数据 课件
- 资源描述:
-
1、第九章 派生类数据类型与结构体本章主要介绍派生类数据类型和结构体,这部分是FORTRAN90以上版本新增加的内容,它使FORTRAN语言功能得到进一步的加强,使用更加方便。9.1派生类数据类型FORTRAN90以前的FORTRAN版本,没有用户自定义的数据类型。这样给用户带来的不便,例如,我们要比较完整的表达多个学生的信息,假设学生包含的信息有:学生所在院系、学生班级、姓名、学号、年龄、性别、家庭住址、各科考试成绩等等,同时要对这些数据进行相应的处理,如 查找、插入、删除、计算、排序等。以前FORTRAN所用的方法是:将学生的每一项放在一个数组中,如:所有学生的姓名可以放在一个字符数组中,学号
2、可以存放在一个整型数组中,成绩可以存放在一个实型数组中等等,这样,要解决这个问题,需要对多个不同数组进行处理,编写程序必须注意各个学生所对应的数据项在数组中不能错位,否则将会张冠李戴。FORTRAN90在这方面有较大的改进,主要是允许字定义派生类数据类型(简称派生类型),有了它,就能较容易地描述上述问题。派生数据类型定义的一般格式为:TYPE,ACCESS:派生类名字分量表END TYPE 派生类名说明1.TYPE为关键字,是每定义一个派生类型的起点。2.ACCESS是可供选择的访问方式说明,分PRIVATE(私有的)和PUBLIC(公共的)两种,例如:REAL,PRIVATE:X1,X2该语
3、句定义了两个实型的私有派生类变量X1、X2。注意声明为PRIVATE时,外部模块不能访问它;声明为PUBLIC属性的实体,在其程序单位中用了USE语句就可以使用;默认方式为公共访问方式。“:”为作用域符。3.派生类名为一个标识符,用户可以用任意标示符命名。4.分量表可以是各种类型的数据,并且可以是多项,每项前面必须加上类型说明。5.END TYPE 派生类名为派生类定义结束的标志。下面看一个具体实例:TYPE STUDENTCHARACTER(15)NAMEINTEGER NUMLOGICAL SEXCHARACTER(30)ADDRESSEND TYPE 其中STUDENT为派生类名。该派生
4、类包含一个最多可存放15个字符的字符数组NAME、一个整型的变量NUM、一个逻辑类型变量SEX、一个最多可存放30个字符的字符数组ADDRESS,由于该派生类访问方式已经省略,因此,按照默认访问方式:公共访问方式对其进行访问。9.2 结构体的定义与引用 有时我们需要将不同类型的数据结合成一个统一的整体,以便于引用。本节介绍派生类型中一种较简单的数据类型:结构体,它是由若干个相互之间有联系的数据项构成的。结构体类型定义的一般形式为:TYPE(派生类型名):结构体名。例如第一节,定义学生派生类后,就可以用它来定义结构体变量TYPE(STUDENT):S1,S2 该语句定义了两个结构体变量S1和S2
5、,它们都包含STUDENT的所有成员:NAME、NUM、SEX、ADDRESS等5项。9.2.1结构体类型定义结构体既可以在程序中定义,也可以和其他内部数据类型一样放在另一个派生类型的定义中定义,即所谓嵌套定义。例如TYPE STUDENTRECORDCHARACTER(15)NAMEINTEGER NUMLOGICAL SEXCHARACTER(30)ADDRESSEND TYPETYPE STUDENTTOGETHERTYPE (STUDENTRECORD):STUDENTREAL MATHREALENGLISHREALCHINESEEND TYPE其中,先定义STUDENTRECORD结
6、构体,再把 TYPE (STUDENTRECORD):STUDENT语句 放 在 结 构 体 定 义 语 句 T Y P E STUDENTTOGETHER之内,这样构成嵌套定义,即用一个结构体作为另外一个结构体的成员。这时,如果定义如下结构体:TYPE (STUDENTTOGETHER):S这样,结构体变量S包含:三个实型变量MATH、ENGLISH、CHINESE和一个结构体变量STUDENT,而STUDENT又包含NAME、NUM、SEX、ADDRESS四个成员。9.2.2结构体成员的引用结构体成员的引用有两种方式:1.结构体名%成员表2.结构体名.成员表例如对上面定义个S1,S2两个结
7、构体变量,成员的引用如下:S1.NAME、S1.NUM、S1.SEX、S1.ADDRESSS2%NAME、S2%NUM、S2%SEX、S2%ADDRESS。注意:(1)两种引用方式可以交叉使用,但为了清晰起见,在一个程序中最好使用一种。(2)在含嵌套定义的结构体中,成员引用应当嵌套使用“%”或“.”,例如,对上面结构体S中成员NUM的引用方式为S%STUDENT%NUM。9.3结构体的初始化9.3.1 利用赋值语句给结构体成员赋值下面看一个完整的例子:例9.1 某单位职工工资表包含的记录有:姓名、性别、家庭住址、工资等项,现计算三个职工工资的平均值。程序如下:TYPE CLERKCHARACT
8、ER(15)NAMELOGICAL SEXCHARACTER(30)ADDRESSINTEGER SALEND TYPETYPE(CLERK):S1,S2,S3S1.SAL=800S2%SAL=900S3.SAL=700AVER=(S1%SAL+S2.SAL+S3.SAL)/3PRINT*,三个职工的平均工资为:,AVEREND其中结构体成员赋值的三个语句为:S1.SAL=800、S2%SAL=900、S3.SAL=700,这与普通变量赋值本质上是一样的,也就是说可以把某结构体变量成员的引用一起当作一个变量来使用,因此也可以用输入语句来赋值。例9.2 学生记录包含如下数据项:姓名、一门功课的成
9、绩、性别、家庭住址,要求打印学生各数据项,并求出该门成绩的平均值。程序如下:TYPE STUDENTCHARACTER(15)NAMEINTEGER GRADELOGICAL SEXCHARACTER(30)ADDRESSEND TYPETYPE(STUDENT):S1,S2,S3PRINT*,请输入三个学生的名字READ*,S1.NAME,S2.NAME,S3.NAMEPRINT*,请输入三个学生的成绩READ*,S1.GRADE,S2.GRADE,S3.GRADEPRINT*,请输入三个学生的性别READ*,S1%SEX,S2%SEX,S3%SEXPRINT*,请输入三个学生的住址READ
10、*,S1.ADDRESS,S2.ADDRESS,S3.ADDRESS P R I N T*,三 个 学 生 的 名 字 为,S1.NAME,S2.NAME,S3.NAMEP R I N T*,三 个 学 生 的 性 别 为,S1%SEX,S2%SEX,S3%SEXP R I N T*,三 个 学 生 的 住 址 为,S1.ADDRESS,S2.ADDRESS,$S3.ADDRESSAVER=(S1%GRADE+S2.GRADE+S3.GRADE)/3PRINT*,三个学生的平均成绩为:,AVEREND请输入三个学生的名字输入:ZHANG LI WANG回车请输入三个学生的成绩输入三个正整数如8
11、5 90 80回车请输入三个学生的性别输入.F.T.F.回车请输入三个学生的住址输入:CHANGSHA GUANGZHOU BEIJING 回车 最后输出结果为三个学生的名字为ZHANG LI WANG三个学生的性别为F T F三个学生的住址为CHANGSHA GUANGZHOU BEIJING三个学生的平均成绩为85 9.3.2 定义的同时赋值 在定义结构体变量的同时,给定结构体各成员的值。其格式为:TYPE(派生数据类名):结构体变量名=派生数据类名(成员初值表)其中,=后面的派生类名即为TYPE后面的派生类名;成员之间的值用“,”隔开。例如结构体如下:TYPE TEACHERCHARAC
12、TER(12)NAMELOGICAL SEXCHARACTER(15)POSIT CHARACTER(30)ADDRESSINTEGER SALEND TYPE 这样我们可以用如下方式给对应的结构体变量赋值:TYPE(TEACHER):S1=TEACHER(ZHANG,.TRUE.,PROFESSOR,”CHANGSHANG”,2000),S2,S3这样,结构体变量S1的值全部被给定。这种赋值方式应当注意:(1)赋值时,所给的值类型和个数应与结构体变量定义中各成员的类型与个数保持一致。(2)可以将一个结构体变量的值直接赋给另外一个结构体变量,INTEGER STYPE STUDENTRECOR
13、DCHARACTER(15)NAMEINTEGER NUMLOGICAL SEXCHARACTER(30)ADDRESSEND TYPE TYPE(STUDENTRECORD):S1,S2S1=STUDENTRECORD(ABCD,20,.TRUE.,CHANGSHA)S2=S1S=S2%NUM+S1%NUMPRINT*,SEND这里,通过S2=S1语句,使S1和S2两个结构体变量得到相同的值,输出S的结果为40。当结构体中包含成员较多时,可以用嵌套定义的方式,使结构体变得简洁,如例9.2中,当学生的成绩是多门时,可以将它们单独定义在一个结构体中,然后将该结构体包含到主结构体中,下面再看一个例
14、子:例9.3、学生信息包含如下数据项:姓名、性别、学号、年龄和5门功课的成绩:语文、数学、物理、化学、英语,要求输入三个学生的记录,打印出相关信息与总成绩。分析:学生的成绩有5门,可以将它们放在一个名为STUDENTSCORE的结构体中,而将学生所有记录存放在名为STUDENTRECORD的结构体中,该结构体包含结构体STUDENTSCORE,然后作相应处理,注意学生成绩输入语句。程序如下:PROGRAM XUESHENGJILUREAL AVER1,AVER2,AVER3 TYPE STUDENTSCOREREAL CHINESEREAL MATHREAL PHYSICSREAL CHEMI
15、STRYREAL ENGLISHEND TYPETYPE STUDENTRECORDCHARACTER(17)NAMELOGICAL SEXINTEGER NUMBERINTEGER BIRTHDAY TYPE(STUDENTSCORE):SCOREEND TYPETYPE(STUDENTRECORD):S1,S2,S3PRINT*,请输入3个学生的姓名READ*,S1.NAME,S2.NAME,S3.NAMEPRINT*,请输入3个学生的性别READ*,S1.SEX,S2.SEX,S3.SEXPRINT*,请输入3个学生的学号READ*,S1.NUMBER,S2.NUMBER,S3.NUMB
展开阅读全文