linux fortran 结构体,Fortran结构体

Fortran结构体

PROGRAM STUDENT_RECORDS !主程序 TYPE STUDENT CHARACTER (15) NAME INTEGER MARK INTEGER GRADE END TYPE STUDENT INTEGER, PARAMETER : STNUM= 5 ! 代表要处理的学生数 TYPE (STUDENT), DIMENSION(STNUM+1):STRE TYPE (STUDENT):NEW1 PRINT*, 请输入学生有关的信息 DO I=1, STNUM READ*,STRE (I)%NAME, STRE (I)%MARK, STRE (I)%GRADE END DO CALL SORT(STRE,stnum) PRINT*, 排序后的结果信息 DO I=1, STNUM print*, NAME,MARK,GRADE print*, STRE (I)%NAME, STRE (I)%MARK, STRE (I)%GRADE END DO PRINT*,“请输入待处理的学生有关的信息 READ(*,*) CALL END ! 删除算法 SUBROUTINE DEL(STRE, DEKEY, N) TYPE STUDENT CHARACTER(15) NAME INTEGER MARK INTEGER GRADE END TYPE STUDENT TYPE (STUDENT), DIMENSION(N):STRE TYPE (STUDENT):TEMP INTEGER I, N, J, DEKEY I=1 DO WHILE(STRE(I)%MARK .NE. DEKEY) .AND. (I. LE. N) I=I+1 ENDDO IF(I .GT. N)THEN PRINT*, 学生记录没找到,无法删除! ELSE TEMP=STRE(I) !TEMP为一个临时记录,用于存放待删记录 DO J=I, N-1 STRE (J)=STRE(J+1) ENDDO PRINT*,删除的记录为: ,TEMP%NAME,TEMP%MARK,TEMP%GRADE ENDIF END ! 顺序查找 SUBROUTINE SORT_SEARCH(STRE, N, KEY) TYPE STUDENT CHARACTER(15) NAME INTEGER MARK INTEGER GRADE END TYPE STUDENT TYPE (STUDENT):STRE (N) INTEGER I, N, KEY I=1 DO WHILE(STRE (I)%MARK.NE.KEY).AND.(I.LE.N) I=I+1 ENDDO IF(I=N)THEN PRINT*,“找到,姓名 :”, STRE (I)%NAME , 成绩 :,STRE (I)%GRADE ELSE PRINT*,查无此人 ENDIF END ! 插入算法 SUBROUTINE SORT_INSERT(STRE, NEW, N) type : student character(15) : name integer : MARK integer : grade end type student type (student):stre(N+1) ! 说明数组 , N+1=11 type (student):new Integer i, n, j i=1 do while (stre(i)% MARK new% MARK. and. i=N) i=i+1 end do do j=N, i, -1 stre(j+1)=stre(j) end do stre(i)=new end !排序算法 SUBROUTINE SORT(STRE, N) !可调数组 TYPE STUDENT CHARACTER (15) NAME INTEGER MARK INTEGER GRADE END TYPE STUDENT TYPE (STUDENT), DIMENSION(N):STRE TYPE (STUDENT):TEMP INTEGER I, J, N DO I=1, N-1 DO J=I+1, N IF(STRE (I)%MARKSTRE (J)%MARK)THEN TEMP=STRE (I) ; STRE (I)=STRE (J); STRE (J)=TEMP ENDIF END DO END DO END print*, 输入职工姓名 name do i=1, 150 read *, cl(i).name end do print*, 输入职工工资 sal do i=1, 150 read *, cl(i).sal end do do i=1, 150 if(cl(i).sal500) then ! 打印 工资 500的职工信息 及计数 k=k+1 print*, cl(i).num, , cl(i).name, , cl(i).sal end if end do Print *, k end P183 例:职工信息:职工号、职工姓名、年龄、工资,职工 150人,存储信息后统计工资低于 500元的职工数,并输出相关信息。 program clerkrecord implicit none integer : k, i type clerk ! 定义结构体类型 integer num character(15) name real sal end type clerk type (clerk), dimension(150): cl ! 定义结构体数组 k=0 Print *, 输入职工号 num: do i=1, 150 read *, cl(i).num end do 9.4 结构体数组 一般格式: TYPE (派生类型名 ), DIMENSION(维数说明符 , ) : 结构体数组名 例: TYPE(STUDENT), DIMENSION(100):STU P180 例: INTEGER S TYPE STUDENTRECORD CHARACTER (15) NAME INTEGER NUM LOGICAL SEX CHARACTER (30) ADDRESS END TYPE TYPE (STUDENTRECORD):S1, S2 S1=STUDENTRECORD(ABCD,20,.TRUE.,CHANGSHA) S2=S1 S=S2%NUM+S1%NUM PRINT*, S END 二、定义变量的同时赋值 格式: TYPE (派生数据类型名 ) : 结构体变量名 =派生数据类型名(成员初值表) 例如: TYPE TEACHER CHARACTER (12) NAME LOGICAL SEX END TYPE TYPE(TEACHER):S1=TEACHER (“WU,.TRUE.) , S2, S3 赋值时,所给的值类型和个数应与结构体变量定义中各成员的类型与个数保持一致。 可以将一个结构体变量的值直接赋给另外一个结构体变量, 9.3 结构体变量的赋值 一、用赋值语句给结构体成员赋值 P178 例 9.1 职工工资表包含的数据有:姓名、性别、家庭住址、工资等,现计算三个职工工资的平均值。 TYPE CLERK CHARACTER (15) NAME LOGICAL SEX CHARACTER (30) ADDRESS INTEGER SAL END TYPE TYPE (CLERK): S1, S2, S3 S1.SAL=800 !也可用输入语句 READ*, S1.SAL S2%SAL=900 S3.SAL=700 AVER=(S1%SAL+S2.SAL+S3.SAL)/3 PRINT*, 三个职工的平均工资为: , AVER END 若定义 STUDENTTOGETHER 结构体变量 S : TYPE ( STUDENTTOGETHER) : S 则结构体变量 S 包含:三个实型变量 MATH、ENGLISH、 CHINESE和一个结构体变量 STUDENT,而 STUDENT又包含 NAME、 NUM、 SEX、ADDRESS四个成员。 二、结构体成员的引用 结构体名 % 成员名 结构体名 . 成员名 如: S1. NAME、 S1.NUM S2%NAME、 S2%NUM S%STUDENT% NUM 结构体类型可以嵌套定义,即结构体类型的成员也可以是另一个结构体类型的变量。 P177 例: TYPE STUDENTRECORD CHARACTER (15) NAME INTEGER NUM LOGICAL SEX CHARACTER (30) ADDRESS END TYPE TYPE STUDENTTOGETHER TYPE ( STUDENTRECORD) : STUDENT REAL MATH REAL ENGLISH REAL CHINESE END TYPE P177 例: TYPE STUDENT CHARACTER (15) NAME INTEGER NUM LOGICAL SEX CHARACTER (30) ADDRESS END TYPE 9.2 结构体变量的定义与引用 一、结构体类型变量的定义 格式: TYPE(派生类型名) : 结构体变量名 例: TYPE ( STUDENT) : S1, S2 第九章 结构体 9.1 派生类数据类型 格式: TYPE, ACCESS: 派生类型名字 分量表 END TYPE 派生类名 ACCESS:访问方式, PRIVATE(私有的) PUBLIC(公共的) 默认方式为 PUBLIC 。 分量表 :该类型中的成员项,每项要有类型说明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值