Fortran的一些语法知识

Fortran基础知识

  1. Fortran对字母大小写不敏感。
  2. 一行语句太长可以换成多行,用 & 连接。一行代码的最后是&,表示将与下一行相连;一行代码的开头是&,表示将与上一行相连;
output = input1 + input2           ! Sum the inputs
output = input1 &
       + input2                    ! Sum the inputs
output = input1
       & + input2                  ! Sum the inputs
  1. 语句标号(statement label)是Fortran语句的名字,使用它可以在程序的其它部分引用这条语句,除此之外,语句标号没有其它作用。现代Fortran程序中很少使用语句标号,若要使用,必须是唯一的。语句标号可以是1~99999间的任一一个数字。
999 output = input1 + input2        ! Sum the inputs
  1. Fortran程序分为声明部分、执行部分、终止部分。
  2. 声明部分:由不可执行语句组成,位于程序的开头,定义程序名和程序引用的数据以及变量的类型。其第一条语句是PROGRAM语句,对编译器指定程序的名字,可以是字母、数字和下划线,但第一个字符必须是字母。
  3. 终止部分:其由STOP和END PROGRAM语句组成。STOP语句告诉计算机停止运行,它可以出现在程序的任何地方,程序执行到这个命令就会中止。除非必要,不要把STOP命令使用在主程序结束之外的其他地方。因为一个程序如果有太多的终止点会容易出错。前面提到过STOP这个命令在此并不是必要的,因为主程序的程序代码执行完毕后,程序会自动终止。本程序加上STOP命令只是为了更明确表示程序到此结束而己。END PROGRAM语句告诉编译器不再编译。END是用来封装程序代码使用的,说明程序代码已经编写完毕。 FORTRAN90标准中,可以使用下列的3种方法来表示程序代码编写结束:
END                   !FORTRAN77只使用该方法
END PROGRAM
END PROGRAM main      !main指的是PROGRAM的名字
  1. 保留字要全部大写,变量名、过程名小写。


    FORTRAN程序执行步骤

常数与变量

  1. 整型数据(INTEGER):仅可以存储整型数据值,不能表示数据的小数部分。
  2. 实型数据(REAL):由存储的实数和小数组成。
  3. 复数(COMPLEX):以a+bi形式表示的数值。
  4. 字符数据(CHARACTER):字符类型由字母字符串组成,一个字符常数是单引号‘’或双引号“”括住的字符串。字符串最少的字符个数是1。引号间的字符叫字符文本(character context)。
  5. 逻辑判断(LOGICAL):只能保存“是TRUE”,“否FALSE”。1表示TRUE,0表示FALSE。

基本命令

  1. WRITE:命令的作用是显示后面双引号中所包含的字符串。而WRITE(*,*)括号中的两个星号都有各自的意义,第一个星号代表输出的位置使用默认值,也就是屏幕;第二个星号则代表不特别设置输出格式。总归一句话,WRITE这个命令的最简单用法,就是在括号中挂上两个星号,再把所要输出的字符串用两个双引号引起来放在后面,例如:WRITE(*,*) "Hello World"上面的命令执行后会显示:"Hello World"这几个字。上面的写法是使用简写的方法所显示的描述,完整的写法应该像下面这样:WRITE(UNIT=*,FMT=*) "Hello World" 这种写法的程序执行结果不变,在 WRITE中加上了UNIT=*,FMT=*这两个描述,只是为了明确地表示输出位置使用默认值以及不限定输出格式。通常在程序中都会使用简写的方法,事实上,使用WRITE在屏幕上印字符串时,最严谨的方法应该像下面这样:WRITE(UNIT=6,FMT=*) "Hello World"因为屏幕的输出UNIT位置就是6,而UNIT=*时,就是指UNIT=6。关于WRITE还有两点要注意:(1)每一次执行 WRITE命令后,会自动换到下一行来准备做下一次的输出(2)因为双引号是用来“输出”字符串的,所以想要输出双引号时,要连用两个双引号。
  2. PRINT:PRINT用法与功能与WRITE大致相同,只是PRINT无括号,且只有一个星号,这一个星号定义的是输出格式,PRINT命令只作用于屏幕。PRINT *, "Hello World"
  3. 声明:当一个计算机程序需要调用内存空间时,对内存发出的“占位”指令。
  4. 关于字符串的一些操作
    CHARACTER(LEN=14) h,i
    CHARACTER(LEN=28) j
    h = "Good morning "
    i = "and good night"
    WRITE(UNIT=6,FMT=*) h
    h(6:12) = "evening"          !修改字符串第6到12的字符为引号里面的内容
    WRITE(UNIT=6,FMT=*) h
    h(12:12) = "@"               !修改字符串中第13个字符为#
    WRITE(UNIT=6,FMT=*) h
    j = h//i                     !连续两个除号将前后两个字符串相连
    WRITE(UNIT=6,FMT=*) j
program ex0413
  character(len=20) string 
  string = "Good morning."
  write(*,*) string
  string(6:) = "evening."         ! 重设设定从第6个字符之后的字符串
  write(*,*) string
end
program ex0415
  character(len=20) string
  character(len=5) substring
  string = "Have a nice day."
  substring = "nice"
  write(*,*) ichar('A')                 ! 输出字符A的ASCII码
  write(*,*) char(65)                   ! 输出ASCII码65所代表的字符,也就是A
  write(*,*) len(string)                ! 输出字符串string声明时的长度
  write(*,*) len_trim(string)           ! 输出字符串string内容的长度
  write(*,*) index(string, substring)   ! nice在Have a nice day的第8个位置
end

一些 Fortran 中有关字符串运行的函数 :

语法 描述
CHAR(num) 返回计算机所使用的字符表上, 数值 num 所代表的字符.(个人计算机使用 ASC II 宇符表 )
ICHAR(char) 返回所给入的 char 字符 在计算机所使用的 字符表中所代表的 编号,返回值是整数类型
LEN(string) 返回枪入字符串的声明长度,返回值是整数类型
LEN_TRIM(string) 返回字符串去除尾烙空格后的实际内容长度
INDEX(string,key) 所输入的 STRING 和 KEY 都是字符串。这个函数会返回KEY这个“子字符串”在“母字符串" STRING 中第一次出现的位置
TRIM(string) 返回把string字符串尾端多余空格清除过后的字符串
  1. 逻辑变量LOGICAL
program ex0416
  logical a,b
  a=.true.           !设忤为“真”值,注意true的前后荌加上两个点
  b=.false.          !设置为“假”值,注意false的前后要加上两个点
  write(*,*) a,b
end
  1. CYCLE命令跳过当前循环,进行下一次循环
  2. EXIT命令跳出循环,不再执行循环
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容