Microsoft PowerPoint - 07 派生数据类型

Similar documents
科学计算的语言-FORTRAN95

Microsoft PowerPoint - 03.Fortran程序设计基础1

untitled

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2

NethersoleJO89(8).indd

Chapter 9: Objects and Classes

Strings

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx

Microsoft PowerPoint - string_kruse [兼容模式]

C/C++程序设计 - 字符串与格式化输入/输出

,,,,,,,,,,,,, :,, ;,,,,, ( ),,,, : ( ) ; ( ) ; ( ) ( ) ; ( ) ( A ) ; ( ) ( ),,,,,,, 80

Microsoft Word - chap10.doc

, 即 使 是 在 昏 暗 的 灯 光 下, 她 仍 然 可 以 那 么 耀 眼 我 没 有 地 方 去, 你 会 带 着 我 么 杜 晗 像 是 在 嘲 笑 一 般, 嘴 角 的 一 抹 冷 笑 有 着 不 适 合 这 个 年 龄 的 冷 酷 和 无 情, 看 着 江 华 的 眼 神 毫 无 温

《计算概论》课程 第十九讲 C 程序设计语言应用

公開徵求廠商提供「採購專業人員訓練計畫企劃書」公告

untitled

untitled

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

第7章-并行计算.ppt

臺北市立百齡高級中學九十二學年度第一學期代理教師甄選辦法草案

第九屆全國環境保護模範社區優良事蹟.PDF


105 學 年 度 臺 中 市 立 國 民 中 學 藝 術 才 能 舞 蹈 班 學 生 招 生 暨 鑑 定 重 要 程 序 日 程 表 項 目 重 要 日 期 重 要 工 作 事 項 辦 理 單 位 簡 章 公 告 105 年 3 月 簡 章 暨 報 名 表 請 自 行 於 各 承 辦 網 站 下

C/C++语言 - 运算符、表达式和语句

B(K,J)=B(K,J)*B(K,K) do I=1,N if(i.ne.k) then do J=1,N if(j.ne.k) then B(I,J)=B(I,J)-B(I,K)*B(K,J) do I=1,N if(i.ne.k) then B(I,K)=-B(I,K)*B(K,K) do K

2006年国家公务员招录考试行测真题(A)

Strings

1.5招募说明书(草案)

BC04 Module_antenna__ doc

C/C++语言 - C/C++数据

( 二 ) 拓 展 岗 位 ( 群 ) 1. 餐 厅 服 务 岗 位 群 在 大 中 型 餐 饮 企 业 星 级 饭 店 主 要 从 事 餐 饮 服 务 的 有 关 工 作, 如 服 务 员 点 菜 师 茶 艺 师 咖 啡 师 调 酒 师 等 2. 食 品 加 工 岗 位 群 主 要 从 事 餐 饮

四川省教育厅

untitled

extend

Microsoft PowerPoint - L17_Inheritance_v4.pptx

1 CPU

CC213

CHAPTER VC#

Microsoft PowerPoint - C语言课件-9-结构体.pptx

Microsoft Word - ch04三校.doc

无类继承.key

2015年计算机二级(C语言)模拟试题及答案(三)

玉田國小100學年度上學期品德教育月主題

untitled

Microsoft Word - 物件導向編程精要.doc

Microsoft PowerPoint - OPVB1基本VB.ppt

untitled

C++ 程序设计 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

untitled

K301Q-D VRT中英文说明书141009

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii

幻灯片 1

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

Microsoft Word - 第3章.doc

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

新・解きながら学ぶJava

coverage2.ppt

C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1

<4D F736F F F696E74202D BDE1B9B9BBAFB3CCD0F2C9E8BCC D20D1ADBBB7>

数据结构与算法 - Python基础

<4D F736F F D D342DA57CA7DEA447B14D2DA475B57BBB50BADEB27AC3FEB14DA447B8D5C344>

untitled


3.1 num = 3 ch = 'C' 2

第5章修改稿

JAVA 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:/

Visual Basic D 3D

<4D F736F F F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F

untitled

instructions.PDF

Microsoft PowerPoint - 习题课2

EJB-Programming-3.PDF

Simulator By SunLingxi 2003

PowerPoint Presentation


おおさか経済の動き pwd

四川省普通高等学校

Microsoft PowerPoint - 08 指针

2/80 2

<4D F736F F D C4EAB9FABCD2B9ABCEF1D4B1D0D0D5FEC4DCC1A6B2E2D1E9A3A841C0E0A3A92E646F63>


Microsoft PowerPoint - 6. 用户定义类型User-defined Datatypes.ppt [兼容模式]

epub 94-3

VB控件教程大全

致遠管理學院法規提案單


TC35短信发送程序设计

C

CC213

從 PISA 閱 讀 歷 程 談 比 較 閱 讀 敎 學 策 略 以 紙 船 印 象 背 影 為 例 行 兒 童 晨 間 閱 讀 運 動 世 界 已 進 入 知 識 經 濟 的 時 代, 一 切 的 競 爭 與 價 值 都 以 知 識 為 主, 而 一 切 知 識 的 基 礎 都 始 自 閱 讀 1

27 :OPC 45 [4] (Automation Interface Standard), (Costom Interface Standard), OPC 2,,, VB Delphi OPC, OPC C++, OPC OPC OPC, [1] 1 OPC 1.1 OPC OPC(OLE f

SSA Form SSA Form Static Single Assignment Form Å ê «ùxr y fâ Ÿx ùxnº fâÿx ³ ø ± Í r ± º g 1) SSA f f v q «un q ø ñ qfâÿx f f v q ø i ²q øfq v ü Ø v i

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

一、考試宗旨:考選風險管理人才,提升風險管理水準。

Tel: Fax: TTP-344M/246M /

(procedure-oriented)?? 2

Transcription:

能源与动力工程学院 目录 派生类型 陈 斌 固有数据类型 数值型 (numerical) 整型 INTEGER 实型 REAL 复数型 COMPLEX 非数值型 字符型 CHARACTER 逻辑型 ( 布尔型 )LOGICAL 自定义数据类型 ( 派生类型, derived type) 派生类型是指用户利用 Fortran 系统内部类型, 如整型 实型 复数型 逻辑型 字符型等的组合自行创建出一个新的数据类型, 它们实际上是由内部数据类型形成的某种结构 派生类型还可由其它派生类型创建而来 TYPE[, 访问属性说明 ::] 派生类型名成员 1 类型说明 成员 n 类型说明 [ 派生类型名 ] 1

TYPE STUDENT CHARACTER(20) NUNMBER LOGICAL GENDER INTEGER BIRTHDAY CHARACTER(20), DIMENSION(4) ::ADDRESS CHARACTER(10) TELEPHONE REAL, DIMENSION(20) ::MARKS TYPE(STUDENT) STUDENT1, STUDENT2 TYPE(STUDENT), DIMENSION(100) ::CLASS01 派生类型成员可以和同类型的变量一样使用, 引用派生类型成员时, 须使用成员操作符 % Student1%Birthdate = 711107 Class%Gender =.TRUE. 或者使用. Student1.Birthdate = 711107 Class.Gender =.TRUE. 同一派生类型的两个变量可以相互赋值 : Student2 = student1 派生类型的成员也可以是派生类型 TYPE point REAL :: x, y point TYPE circle TYPE (point) :: position INTEGER :: radius REAL :: area circle TYPE[, 访问属性说明 ::] 派生类型名访问属性说明 [ 派生类型名 ] 访问属性 PUBLIC( 缺省 ) PRIVATE: 该数据类型只能在模块内使用 cir%position%x = 5.0 2

MODULE MATTER TYPE, PRIVATE :: DATA... DATA END MODULE MATTER MODULE MATTER TYPE ELEMENTS integer A, B PRIVATE INTEGER C, D END MODULE MATTER 初始化 缺省初始化 在声明的同时进行初始化 显式初始化 : 利用赋值语句给派生数据类型成员赋值 利用结构构造函数在定义派生数据类型变量的同时, 给定派生数据类型各成员的值 用 DATA 语句进行显式初始化 缺省初始化 TYPE STUDENT REAL ::MARK = 60 character(20) tel 利用赋值语句 TYPE(STUDENT) ::STU1 STU1%MARK = 100 MODULE STU_TYPE TYPE STUDENT REAL ::MARK = 60 character(20) tel END MODULE 利用结构构造函数在定义派生数据类型变量的同时, 给定派生数据类型各成员的值 或者 DATA 语句赋初值 PROGRAM MAIN USE STU_TYPE TYPE(STUDENT) ::STU1 = STUDENT(" 王小二 ",49, "029-82660925") TYPE(STUDENT) ::STU2 DATA STU2/STUDENT(" 张小三 ",86, "029-82660926")/ PRINT*, STU1 PRINT*, STU2 END 3

派生数据类型不能直接使用 Fortran 自带的操作符来操作 操作符重载 需要我们自己编写程序, 重新定义已有操作符的功能或者声明新的操作符 赋值操作符重载 对已有的操作符赋予多重含义, 使同一操作符作用于不同类型的数据时产生不同的行为 其它操作符重载 赋值操作符重载 INTEFACE ASSIGNMENT( = ) interface_code 重新定义前面的 student 派生类型, 达成如下简洁操作 : 将姓名字符串直接赋给派生类型变量 Type (student_type) stu Stu = " 王小二 " 从派生类型中提取姓名, 即将派生类型变量直接赋给姓名字符变量 stuname = Stu MODULE STUDENTMODULE TYPE STUDENT_TYPE REAL MARK! 派生类型定义 program overload USE STUDENTMODULE TYPE(STUDENT_TYPE)::STUDENT = STUDENT_TYPE(" 王小二 ",50) CHARACTER(20) STUNAME INTERFACE ASSIGNMENT(=)! 赋值操作符重载必须使用接口块, 接口块须以 assignment 命名 MODULE PROCEDURE NAME_FROM_STUDENT, STUDENT_FROM_NAME SUBROUTINE NAME_FROM_STUDENT(STRING, STUDENT)! 从派生类型中提取姓名, 即将派生类型变量直接赋给姓名字符变量 CHARACTER(*), INTENT(OUT) ::STRING TYPE(STUDENT_TYPE), INTENT(IN) ::STUDENT STRING = STUDENT%NAME END SUBROUTINE SUBROUTINE STUDENT_FROM_NAME(STUDENT, STRING)! 将姓名字符串直接赋给派生类型变量 CHARACTER(*), INTENT(IN) ::STRING TYPE(STUDENT_TYPE), INTENT(OUT) ::STUDENT STUDENT%NAME = STRING END SUBROUTINE END MODULE PRINT*, STUDENT pause STUDENT = " 张小三 " PRINT*, STUDENT pause STUNAME = STUDENT PRINT*, STUNAME pause END 4

MODULE cartesian TYPE point REAL :: x, y point INTERFACE ASSIGNMENT( = ) MODULE PROCEDURE max_point SUBROUTINE max_point( a, pt ) REAL, INTENT(OUT) :: a TYPE(point), INTENT(IN) :: pt a = MAX( pt%x, pt%y ) END SUBROUTINE max_point END MODULE cartesian program assignexample USE cartesian REAL :: a a = point(1.7, 4.2) PRINT*, a END MODULE strings INTERFACE OPERATOR ( / ) MODULE PROCEDURE num INTEGER FUNCTION num( s, c ) CHARACTER(len=*), INTENT(IN) :: s CHARACTER, INTENT(IN) :: c num = 0 DO i = 1, LEN( s ) IF( s(i:i) == c ) num = num + 1 END DO END FUNCTION num END MODULE strings program string use strings print*, 'hello world' / 'l! print*, num("hello world", "z") end 可以像重载现有操作符一样定义新的操作符, 这在处理派生类型时特别有用 形式 :.name. 同样需要接口块 可以像重载现有操作符一样定义新的操作符, 这在处理派生类型时特别有用 形式 :.name. 功能 : 由 function 定义 同样需要接口块 5

MODULE cartesian TYPE point REAL :: x, y point INTERFACE OPERATOR (.DIST. ) MODULE PROCEDURE distance FUNCTION distance( a, b ) real distance TYPE(point), INTENT(IN) :: a, b distance = SQRT( (a%x-b%x)**2 + (a%y-b%y)**2 ) END FUNCTION distance END MODULE program distance use cartesian implicit none real d,e Type(point) ::p1 = POINT(1.0,1.0) Type(point) ::p2 = POINT(2.0,2.0) d = p1.dist. p2 print*, d end 6