fortran心得

更新时间:2023-05-07 03:31:09 阅读: 评论:0

Read 的规则:
按行读取,每次读一行,读完后光标自动跳到下一行的开头,空格和逗号代表结束(所以空格和逗号也是读取的一部分的话,需要使用“输入输出格式”)
如果想要将一行数据读入数组,代码为:
Read(10,*) s(:,:,:)
不用规定输入输出格式,因为会根据s(:,:,:)确定需要读入的数字的个数,然后fortran会按部就班的读取,甚至文件中当前这一行的数字个数不足以填满s(:,:,:)的时候,read会自动跳到下一行继续搜索数字,直到填满s(:,:,:)为止。
但是需要注意给数组赋值的顺序:read会把它搜索到的第一个数字给s(1,1,1),第二个给s(2,1,1),第三个给s(3,1,1)…
程序9 1:   read(unit=field,fmt="(A79)",iostat=status)buffer  中的A79改为A2,结果只输出每行的前两个字符,说明read是按整行整行读取的。
中间空了几行之后,空行之后的内容还是能被读取和输出,这说明,空行和空白是不一样的:空行也算是一种文本内容,因此不会终止读取,而空白意味着结束。
!读取文件
program main
implicit none
character(len=79)::filename="",buffer
integer,parameter::field=10
integer::status=0
logical alive
inquire(file=filename,exist=alive)
if(alive)then
  open(unit=field,file=filename)
  do while(.true.)
    read(unit=field,fmt="(A79)",iostat=status)buffer
    if(status/=0)exit
    write(*,"(A79)")buffer
  end do
el
  write(*,*)filename,"does't exist."
end if
pau
stop
end program main
=============================================
===============================
1234555666
879789789789789   
二)Fixed Format(固定格式)
扩展名:.F .FOR
1标号区:第l-5
    可以写l5位整数。也可以没有标号。标号区中的空格不起作用。如lOO100  1 0 0
作用相同。标号应是无符号整数(无正负号或小数点)。标号大小顺序没有任何要求。假如第二行的标号为1000,第三行的标号可以是10,也可以是99999
    标号区内不得出现标号以外的内容,但注释行例外。注释行的内容可以写在标号区内,一行中第一列为C*的,该行即被认为注释行,编译时对该行内容不作翻译,对程序运行不产生任何影响。如果在第一列上出现的不是数字、空格或C*的字符,编译时按出错处理。
2续行区:第6
    如果在一行的第6列上写一个非空格和非零的字符,则该行作为其上一行的续行。注意在某些系统中,这个字符可以不限于上面所列的,如 @ } ] ~ 等字符均可使用。F77允许一个语句有19个续行(即一个语句最多可以写成20)。有的程序中第6列上用“l”,“2”,…表示该行是第1个或第2个续行,但用数字字符容易与第7列的数字形成连续的数字串而引起错觉,故最好使用固定的特殊字符。
3语句区:第7-72
    不要求一定从第7列开始写语句,可以从第7列以后(72列以前)的任何一列开始写,但一行只能写一个语句。如果写满了72列,一旦在终端上修改程序时在该行又插入了一些字符,就会使本行最后几个字符超出语句区而引起意料不到的错误。特别注意到语句最后的空格将可能溢出72列,在某些计算机系统上将导致难以查出的错误。应注意,引号内的字符串中所包括的空格是有效的,不能忽略。
4注释区:第73-80
    在卡片输入法时代,程序员一般利用此8列为程序行编序号以便查找。注释区只对程序员提供辨别信息,不是语句的一部分,在编译时不对72-80列作处理。
程序 9 2 将成绩输入
module typedef
  type student
    integer Chine,English,Math
  end type
end module
program main
u typedef
implicit none
integer::students
type(student),allocatable::s(:)
integer,parameter::fileid=10
character(len=80)::filename=""
integer::i
write(*,*)"how many students?"
read(*,*)students
allocate(s(students),stat=i)
if(i/=0)then
  write(*,*)"allocate buffer fail"
  stop !此处要学习跳出程序。   
end if
open(fileid,file=filename)
do i=1,students
  write(*,"('input the',I2,'th student''s scores')")i
  read(*,*)s(i)%Chine,s(i)%English,s(i)%Math !Sb了,其实可以直接写成s(i)
  write(fileid,"('Student Number:',I2,/,'Chine Score:',I3,'English Score:',I3,'Math Score:',I3)")i,s(i)!s(i)的三项可以分别设置各自格式,另外注意括号里封装字符用单引号
end do
clo(fileid)
pau
stop
end program main

程序9 3 读取并且输出
module typedef
  type student
    integer Chine,English,Math
  end type
end module
program main
u typedef
implicit none
integer,parameter::fileid=10
integer::students
integer::n
type(student)::s
character(len=10)::filename=""
logical::alive
integer::stat=0
inquire(file=filename,exist=alive)
if(.not.alive)then
  write(*,*)"file doesn'nt exist"
  stop
end if
open(unit=fileid,file=filename)
do while(stat==0)
  read(fileid,"(16XI2,/,14XI3,14XI3,11XI3)",iostat=stat)n,s !不知道为什么不能写作unit=fileid
  write(*,"('序号:',I2,'语文:',I3,'英语:',I3,'数学:',I3,I3)")n,s,stat
end do
 
pau
stop
end program main

程序9 5,跳跃读取:还是不太懂REC的用法
program main
implicit none
character(len=80)::filename=""
integer::fileid
logical::alive
integer::stat
integer::player
real::score
inquire(file=filename,exist=alive)
if(.not.alive)then
  write(*,*)"file doesn't exist"
  stop  !体会stop的用法,用于在程序中间终止程序。
end if
open(unit=fileid,file=filename,access="direct",&
      form="formatted",recl=7,status="old")
do while(.true.)
  write(*,*)"查询第几棒?"
  read(*,*)player
  read(fileid,"(F5.2)",rec=player,iostat=stat)score
  if(stat/=0)exit
  write(*,"(F5.2)")score
end do
pau
stop
end program main

程序 9 6  内部变量的应用:本程序中invalid很好!否则我只能通过监视内层那个do的循环的次数来判断strng中的所有字母是不是检验完毕,本程序中的invalid这个变量显然更简单巧妙,先设置.true.进入外循环,然后.fal.假设输入的都是正确的,可以跳出,然后用if“考验”这个假设。。。。。。。很巧! 另外,本计算机能接受的最大整数是4byte32bits,即2147483647。默认的也是长整型,即kind=4
program main
implicit none
integer::i
integer,external::GetInteger
i=GetInteger()
write(*,*)i
pau
stop
end program main
integer function GetInteger()
implicit none
character(len=80)::string
integer::i,code
logical::invalid=.true.
do while(invalid)

本文发布于:2023-05-07 03:31:09,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/863663.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:程序   字符   数字   标号   语句   空格
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图