fortran心得
FORTRAN实践报告
中南大学本科生课程设计(实践)设计报告(程序设计基础)题目微分方程求解实践报告学生学号1208100420学生姓名陈立湘指导教师蔡旭晖学院土木建筑学院专业班级土建类10-04班计算机基础教学实验中心2011年 06 月 30 日FORTRAN语言课程计摘要:本次实践主要是让我在独立自主的前提下发挥各种方法途径把在本学期学到的fortran知识运用起来解决实际问题,在问题伴随之下探索并努力解决,并借用了资料上的一些微分方程的解决程序以及书上的画图程序完成。
一.设计思想1.实践目标及目的最直接的目的自然是搜索资料运用所学知识编写一个大型程序来解决特定的实际问题,而众所周知fortran是世界上第一个被正式推广使用的电脑高级语言,而且电脑日益发展在生活中占据着越来越重要的地位,而程序语言又是电脑运行的基础,就像是人体上的各种细胞,组织……更甚者实践出真知,所以我们通过独立实践fortran语言来编写程序解决实际问题是锻炼自身以及学以致用,体验的最好的办法,这样能让我们独立自主,学以致用,实践知识,锻炼能力……2.问题分析当我看到课程设计任务上的三个问题时,义无反顾的选择了第二个,首先是因为微分方程在数学上比较实在(其实编程和数学不同的),问题大体内容是在意大利生物学家Ancona关于鱼类种群相互制约关系的研究前提下绘制一个食饵和鲨鱼数量随时间的变化情况图,这样的话问题就是编写一个微分方程的求解程序来解决这个题目,而在老师给予的参考资料上有一些微分方程的求解程序示范,那自然是要参考资料上的了,最后要以图的形式展现,那么fortran语言中的QuickWin就少不了了,而对于一个大程序子程序是必不可少的,这样实践的各类问题就都展现出来了,接下来就是一一解决。
二.系统设计与实现1.总体设计2.算法以及结构我的算法是以积分一步的特雷西方法为基础主程序辅之以QuickWin画图程序以及其他子程序链接在一起实行解决问题的。
关于fortran的一些学习心得
关于fortran的一些学习心得
长大以来,在学习编程语言方面,我一直被FORTRAN所吸引,也在不断地对它进行深
入的学习与研究。
FORTRAN是一门适用于数值计算和科学计算的高级编程语言,它也是一种特殊的编程语言,用于解决计算机科学中各种各样的复杂问题。
学习FORTRAN语言,最早是通过书本系统学习,书本上有很多重要的理论知识,字符
类型、常量、运算表达式、条件语句等,以及编写的一些示例程序等,这些通过书本系统
学习都是让我有基础的理论和基本的操作技巧。
接着,我又课余的时候,从事一些学习FORTRAN的实践工作,编写一些实用的小程序,包括求数据的极值、求数据的均值、求数据的方差等,以及一些求解一元非线性方程组、
矩阵运算、牛顿插值法等程序,甚至也参与了一些开发多维数值计算模型和混合数值-符
号计算模型程序的项目,这些项目都有助于我提高FORTRAN领域的实际技能。
学习FORTRAN也带给我乐趣与挑战,它需要很多的理论知识和分析能力,学习的过程中,一个是不断的收集资料,然后分析其中的每个部分,学习数学知识,总结出程序的功能,而且在编写程序的过程中,还需要考虑很多实际问题,这使我学习FORTRAN有了更多
的挑战与激励,也乐在其中。
总体来说,学习FORTRAN语言,对我成长大有裨益,我深深的欣赏这门编程语言的强
大功能,通过学习FORTRAN,也逐渐提升了自己的编程基础,以及算法一类知识的能力,
而且,今后我也会继续以实践为主,加以系统地学习,理解FORTRAN的编程模式和思想,
进一步提升自己运用FORTRAN的技能和能力。
fortran用法总结
我的Fortran基本用法小结周日, 10/14/2007 - 21:00 — gator一、说明二、概述三、数据类型及基本输入输出四、流程控制五、循环六、数组七、函数八、文件一、说明本文多数内容是我读彭国伦《Fortran 95 程序设计》的笔记。
只读到第九章,主要是3~9章,都是最基本的用法(原书共16章)。
这里主要摘录了我看书过程中总结的一些Fortran和C不同的地方,主要是语法方面。
希望这份笔记能够给学过C但没有接触过Fortran的同学带去一些帮助。
要想得更清楚些,推荐看一下原书,觉得作者真的写得很好,很清楚;如果有C语言的基础,看完前九应该很快的,花一两天就行了。
觉得如果耐心看完本文,基本功能应该也可以顺利用起来了。
外,由于我之前没有用过Fortran,这次为了赶文档看书又看得很粗浅,大多数东西看过之后都没得及仔细想,只是按着作者的意思去理解。
所以这份笔记还处于纸上谈兵的层次。
如果有不妥的方,希望大家指正。
谢谢!文中蓝色的部分是程序代码,!后面的内容为注释。
二、概述1、名词解释Fortran=For mula Tran slator/Translation一看就知道有什么特色了:可以把接近数学语言的文本翻译成机械语言。
的确,从一开始,IBM设计的时候就是为了方便数值计算和科学数据处理。
设计强大的数组操作就是为了实现这一目标。
ortran奠定了高级语言发展的基础。
现在Fortran在科研和机械方面应用很广。
2、Fortran的主要版本及差别按其发展历史,Fortran编译器的版本其实很多。
现在在广泛使用的是Fortran 77和Fortran90。
ortran 90在Fortran 77基础上添加了不少使用的功能,并且改良了77编程的版面格式,所以编程时推荐使用90。
鉴于很多现成的程序只有77版本,有必要知道77的一些基本常识,至少保证能够看77程序。
以下是77和90的一些格式上的区别。
Fortran基本用法小结
【以下文字转载自D_Atmosphere 讨论区】【原文由superjyq 所发表】我的Fortran基本用法小结高级语言和算法组heavensky目录:一、说明二、概述三、数据类型及基本输入输出四、流程控制五、循环六、数组七、函数八、文件一、说明本文多数内容是我读彭国伦《Fortran 95 程序设计》的笔记。
只读到第九章,主要是3~9章,都是些最基本的用法(原书共16章)。
这里主要摘录了我看书过程中总结的一些Fortran和C不同的地方,主要是语法方面。
希望这份笔记能够给学过C但没有接触过Fortran的同学带去一些帮助。
要想弄得更清楚些,推荐看一下原书,觉得作者真的写得很好,很清楚;如果有C语言的基础,看完前九章应该很快的,花一两天就行了。
觉得如果耐心看完本文,基本功能应该也可以顺利用起来了。
另外,由于我之前没有用过Fortran,这次为了赶文档看书又看得很粗浅,大多数东西看过之后都没来得及仔细想,只是按着作者的意思去理解。
所以这份笔记还处于纸上谈兵的层次。
如果有不妥的地方,希望大家指正。
谢谢!文中蓝色的部分是程序代码,!后面的内容为注释。
二、概述1、名词解释Fortran=Formula Translator/Translation一看就知道有什么特色了:可以把接近数学语言的文本翻译成机械语言。
的确,从一开始,IBM设计它的时候就是为了方便数值计算和科学数据处理。
设计强大的数组操作就是为了实现这一目标。
Fortran奠定了高级语言发展的基础。
现在Fortran在科研和机械方面应用很广。
2、Fortran的主要版本及差别按其发展历史,Fortran编译器的版本其实很多。
现在在广泛使用的是Fortran 77和Fortran90。
Fortran 90在Fortran 77基础上添加了不少使用的功能,并且改良了77编程的版面格式,所以编程时推荐使用90。
鉴于很多现成的程序只有77版本,有必要知道77的一些基本常识,至少保证能够看懂77程序。
Fortran学习总结 - 我不是企鹅的日志 - 网易博客
Fortran学习总结- 我不是企鹅的日志- 网易博客Fortran学习总结目录:一、说明二、概述三、数据类型及基本输入输出四、流程控制五、循环六、数组七、函数八、文件一、说明本文多数内容是读彭国伦《Fortran 95 程序设计》的笔记。
二、概述1、名词解释Fortran=Formula Translator/Translation一看就知道有什么特色了:可以把接近数学语言的文本翻译成机械语言。
的确,从一开始,IBM设计的时候就是为了方便数值计算和科学数据处理。
设计强大的数组操作就是为了实现这一目标。
fortran奠定了高级语言发展的基础。
现在Fortran在科研和机械方面应用很广。
2、Fortran的主要版本及差别按其发展历史,Fortran编译器的版本其实很多。
现在在广泛使用的是Fortran 77和Fortran90。
ortran 90在Fortran 77基础上添加了不少使用的功能,并且改良了77编程的版面格式,所以编程时推荐使用90。
鉴于很多现成的程序只有77版本,有必要知道77的一些基本常识,至少保证能够看77程序。
以下是77和90的一些格式上的区别。
Fortran 77:固定格式(fixed format),程序代码扩展名:.f或.for(1)若某行以C,c或*开头,则该行被当成注释;(2)每行前六个字符不能写程序代码,可空着,或者1~5字符以数字表明行代码(用作格式化输入出等);7~72为程序代码编写区;73往后被忽略;(3)太长的话可以续行,所续行的第六个字符必须是"0"以外的任何字符。
Fortran 90:自由格式(free format),扩展名:.f90(1)以"!"引导注释;(2)每行可132字符,行代码放在每行最前面;(3)以&续行,放在该行末或下行初。
以下都是讨论Fortran 90。
3、Fortran的一些特点,和C的一些不同其实很多,在下面涉及具体方面时可以看到。
DEFORM二次开发的一点小心得!
DEFORM二次开发的一点小心得!前一段时间闲着没事,看了DEFORM的help文件.和众位兄弟交流一下.用户子程序实现过程:第一步:所需文件准备:把DEF_SIM目录下的def_usr.f ,DEF_SIM_USR_ABsoft70.gui , DEF_SIM_P4_USR_ABsoft70.gui ,DEF_SIM_P4_USR_LIB.lib , DEF_SIM_USR_LIB.lib和lib目录下的所有.lib文件拷到工作目录下。
备份DEF_SIM.exe ,DEF_SIM_P4.exe两个文件。
第二步:编写源程序。
对于新手可以使用模版自带的子程序,对于材料流动应力子程序模版里头本身就自带有一个,所以可以不需要自己编写。
(我就利用过自带的作过模拟,把前面的常数设置为10和100分别模拟)第三步:用absoft7.0或以上版本打开DEF_SIM_USR_ABsoft70.gui 文档,指定好library files,用工作目录下的lib文件来替换原来默认的lib文件,上述做完后直接点build就ok了,自动生成了DEF_SIM.exe。
重复上面的过程打开DEF_SIM_P4_USR_ABsoft70.gui 文档生成DEF_SIM_P4.exe。
第三步:用生成的DEF_SIM.exe ,DEF_SIM_P4.exe替换原来的这两个文件。
第四步,运行模型。
对于流动应力子程序,只要在material那里选择子程序就ok 了。
注:3D中必须是DEF_SIM.exe,而DEF_SIM— P4.exe不好!(我也不知道原因,师兄是这么说的!).还有一个问题,关于DEFORM的text运行模式.在安装目录下面,有如下几个需要了解的文件:<1>DEF_PRE.EXE;<2>DEF_ARM_DEF_PRE.EXE这是前处理,DOS界面输入前处理参数设置,记录每次设置时的操作,按一定格式记录在记事本上面,这个很重要,二次开发可能需要这个文件.具体参见help.DEF_ARM_ 这是运行命令.具体格式见help.下面是关键:通过fortran子程序调用DEFORM.具体如下.我用的是visual fortran6.6.result=system('E:\DEFORM3D\V5_0\DEF_PRE.EXE') (启动前处理,弹出DEF_PRE.EXE界面)result=system('E:\DEFORM3D\V5_0\DEF_PRE.EXE<INI.TXT') (进行前处理参数设置,INI.TXT是记录每次设置时的操作命令流),譬如一个简单的操作命令流:<CR>21XXXX.KEY (key文件,需要copy到你的子程序目录下)<CR>E72XXXX.DB (生成DB文件)<CR>EY<CR>result=system('E:\DEFORM3D\V5_0\DEF_ARM_ XXXX B') (运行DB文件,XXXX为文件名,B表示batch模式运行)注意运行过程中,有可能生成临时文件,如FOR003等,会影响模拟进行,可通过fortran命令open和write操作清除.以上可以实现一些特殊的操作.如运动子程序等.上述即是我的一点小体会.很多我也不是很懂,自己的课题也不是DEFORM二次开发,也不专长编程.呵呵,希望对大家有所帮助!Re:请问能不能帖个自己二次开发加本构方程的例子这是我尝试过的关于流动应力的二次开发,希望能给没有做过二次开发的朋友一点经验~~~现在要好好研究二次开发和有限元软件的核心机制了~~~共同进步~~~program USRMTRreal YS,TEPS,EFEPS,TEMread (*,*,*)TEPS,EFEPS,TEMYS=123.5237-1.238956*TEM+3.8584*LOG10(EFEPS)+6.7852*TEPS-1.29*TEM*TEPS+52.895* LOG10(EFEPS)*TEPS+0.00088442*TEM*TEMPrint *,YSEND相信看了这个程序后,大家对二次开发肯定有个初步的了解了~呵~用户子程序具体实现心得结合论坛上各位大虾的经验和自带帮助,前段时间动手试了一下用户子程序的实现过程,现将自己的一些体会与大家共享,相信对做二次开发的新手有用用户子程序实现过程:第一步:所需文件准备:把DEF_S IM目录下的def_usr.f , DEF_S IM_USR_ABsoft70.gui ,DEF_SIM_P4_USR_ABsoft70.gui , DEF_S IM_P4_USR_LIB.lib , DEF_S IM_USR_LIB.lib和lib目录下的所有.lib文件拷到工作目录下。
FORTRAN学习中的一些小心得
FORTRAN 心得第一部分:一些小心得1Fortran不区分大小写2 Fortran有5种基本数据类型,integer,real, character, logical, complex3 fortran fixed format格式中的变量赋初值一般用DATA,因为它不能用::4 real(kind=8) a这种格式只使用于Fortran90,Fortran77中要使用real*8或real(8)5 FORTRAN中FREE与FIXED两种格式do循环的区别:Fortran 95使用end do来结束循环。
Fortran 77使用DO循环要麻烦一点,它不使用END DO来结束循环,而是使用行号来结束循环,程序代码要在DO的后面写清楚这个循环到哪一行程序代码结束。
Fortran 77中,经常会使用CONTINUE这个命令来结束循环。
因为CONTINUE这个命令没有实际的用途,刚好可以拿来做封装使用。
6 循环的流程控制:循环中的cycle命令相当于c++里的continue命令,用于结束一次循环循环中的exit命令好比c里面的break,用于结束循环7 不使用do循环,单纯用GOTO语句也能设计循环程序,但不推荐使用GOTO语句7 fortran有等价声明:即用equivalence(a,b),这样使得a,b使用同一块内存,这样可以节省内存,有时可精简代码。
8 fortran77中只能用单引号。
(还有疑问,因为fixed format能用双引号)9 逻辑运算符== /= > >= < <= !Fortran90用法.EQ. .NE. .GT. GE. .LT. .LE. !Fortran77用法9 PAUSE,CONTINUE,STOPpause 暂停程序执行,按enter可继续执行continue 貌似没什么用处,可用作封装程序的标志STOP 命令用来结束程序,要谨慎使用10 数组元素之间要用逗号分隔,而不能像matlab一样既可以用逗号也可以用空格,fortran 的数组元素之间不能用空格。
Fortran语言编程小结(五篇材料)
Fortran语言编程小结(五篇材料)第一篇:Fortran语言编程小结1.单双精度Program ex01 implicit none real(kind=4):: a real(kind=8):: b a=3.***66666666_4!确定这个数字是使用单精度 b=3.***66666666_8!确定这个数字是使用双精度 write(*,*)a,b End program ex012.判断kind值 program ex02 Implicit none!判断可以记录9个位数的整数kind值integer, parameter :: long_int = selected_int_kind(9)!判断可以记录3个位数的整数kind值integer, parameter :: short_int = selected_int_kind(3)!判断可以有3个有效位数, 指数可以记录到3的浮点数kind值integer, parameter :: long_real = selected_real_kind(10, 50)!判断可以有10个有效位数, 指数可以记录到50的浮点数kind值integer, parameter :: short_real= selected_real_kind(3, 3)integer(kind=long_int):: a = 123456 integer(kind=short_int):: b = 123 real(kind=long_real):: c = +1.23456789D45 real(kind=short_real):: d =+1230 write(*, “(I3,1X,I10)”)long_int,a write(*, “(I3,1X,I10)”)short_int, b write(*, “(I3,1X,E10.5)”)long_real, c write(*, “(I3,1X,E10.5)”)short_real, d END3.TYPE program ex0434 implicit none Type :: person!开始建立person这个类型character(len=30):: name!人名integer :: age!年龄integer :: height!身高INTEGER :: weight!体重character(len=80):: address!地址End type person type(person):: a!声明一个person类型的变量write(*,*)“NAME:” read(*,*)a%name write(*,*)“AGE:” read(*,*)a%age write(*,*)“HEIGHT:” read(*,*)a%height write(*,*)“WEIGHT:” read(*,*)a%weight write(*,*)“ADDRESS:” read(*,*)a%address write(*,100)a%name,a%age,a%height,a%weight 100 format(“Name:”,A10/,“Age:”,I3/,“Height:”,I3/,“Weight:”,I 3/,&“Addres:”,A80)End4.REAL 与 INTEGER Program ex0431 implicit noneinteger :: a=1integer :: b=2real:: cc=a/b!c=1/2=0, 虽然c是浮点数,但因为a,b是整数,计算a/b时会用整数去计算.write(*,“(F5.2)”)c End5.DATA 变量表/初值表/,变量表/初值表/,… PROGRAM ex0430 IMPLICIT NONE INTEGER A REALB COMPLEXC CHARACTER(20)STR DATA A,B,C,STR /1,2.0,(1.0,2.0), 'FORTRAN 77'/ WRITE(*,*)A,B,C,STR END6.复数实虚部Program ex0430 complex :: c =(1,2)write(*,100)real(c),'+',aimag(c),'i' 100 format(f5.1,a1,f5.1,a1)End7.逻辑输出 Program ex0416logical a,ba=.true.b=.false.write(*,100)a,bformat(L5,L4)End8.Program ex0415character(len=20)stringcharacter(len=5)substringstring = “Have a nice day.”substring = “nice”write(*,*)ichar('A')!输出字符A的ASCII码write(*,*)char(65)!输出ASCII码65所代表的字符,也就是Awrite(*,*)len(string)!输出字符串string声明时的长度write(*,*)len_trim(string)!输出字符串string内容的长度write(*,*)index(string, substring)!nice在Have a nice day的第8个位置 End9.Program ex0414character(len= 6)firstcharacter(len=10)secondcharacter(len=20)addfirst=“Happy ”second=“Birthday”add = first//second!经由两个连续的除号可以连接两个字符串write(*,100)addFORMAT('生日快乐',/,A)End10.带精度计算 Program ex0408real(kind=8):: a,ba=1b=0.1write(*,*)a,“+”,b,“=”,a+b End11.逻辑if语句 Program ex0504 implicit noneinteger rain, windspeedlogical r,wwrite(*,*)“Rain:”read(*,*)rainwrite(*,*)“Wind:”read(*,*)windspeedr =(rain>=500)!如果rain>=150, r=.true, 不然r=.false.w =(windspeed>=10)!如果windspeed>=10, w=.true, 不然w=.false.if(r.or.w)then !只要r或w有一个值是true就成立write(*,*)“停止上班上课”elsewrite(*,*)“照常上班上课” End if End12.Select Case用法 Program ex0512 implicit noneinteger :: scorecharacter gradewr ite(*,*)“Score:”read(*,*)scoreselect case(score)case(90:100)grade='A'case(80:89)grade='B'case defaultgrade='?'End selectwrite(*,“('Grade:',A1)”)grade End13.IF GOTO语句PROGRAM ex0514 IMPLICIT NONE REAL heightREAL weightWRITE(*,*)“height:” READ(*,*)heightWRITE(*,*)“weight:” READ(*,*)weightIF(weight > height-100)GOTO 200 100 WRITE(*,*)“Under control.”GOTO 300200WRITE(*,*)“Too fat!” 300 STOP END14.DO WHILE 循环 Program ex0604 implicit noneinteger, parameter :: limit=10integer counterinteger :: ans = 0counter = 2do while(counter <= limit)ans = ans + countercounter = counter + 2end dowrite(*,*)ans END15.CYCLE,EXIT 语句 Program ex0609 implicit noneinteger :: i,jloop1: do i=1,3loop2: do j=1,3if(i==3)exit loop1!跳离loop1循环if(j==2)cycle loop2!重做loop2循环write(*, “('(',i2,',',i2,')')”)i, jend do loop2end do loop1 End16.大小写字符 Program ex0612 implicit noneinteger iinteger strlencharacter(len=20):: stringwrite(*,*)“String:”read(*,*)stringstrlen = LEN_TRIM(string)do i = 1, strlenstring(i:i)= char(ichar(string(i:i))+32)end dowrite(*,“('encoded:',A20)”)string End17.循环计算 Program ex0614 implicit nonereal a,b,anscharacter :: key = 'y'!为了至少循环一次do while(key=='y'.or.key=='Y')read(*,*)a read(*,“(A1)”)key read(*,*)b select case(key)case('+')ans = a+b case('-')ans = a-b case('*')ans = a*bcase('/')ans = a/b case defaultwrite(*,“('Unknown operator ',A1)”)keystop end selectwrite(*,“(F6.2,A1,F6.2,'=',F6.2)”)a,key,b,answrite(*,*)“(Y/y)to do again.(Other)to exit.” read(*,“(A1)”)key end do End18.矩阵相加 pogram ex implicit noneinteger, parameter :: row = 2integer, parameter :: col = 2integer :: matrixA(row,col)integer :: matrixB(row,col)integer :: matrixC(row,col)integer rinteger cwrite(*,*)“Matrix A”do r=1, rowdo c=1, colwrite(*,“('A(',I1,',',I1,')=')”)r,cread(*,*)matrixA(r,c)end doend dowrite(*,*)“Matrix B”do r=1, rowdo c=1, colwrite(*,“('B(',I1,',',I1,')=')”)r,cread(*,*)matrixB(r,c)end doend dowrite(*,*)“Matrix A+B=”do r=1, rowdo c=1, colmatrixC(r,c)= matrixB(r,c)+matrixA(r,c)write(*,“('(',I1,',',I1,')=',I3)”)r,c,matrixC(r,c)end do end do end pogram ex[ write(*,“(I3,I3,/,I3,I3)”)((mc(i,j), i=1,2),j=1,2)] 19.program eximplicit noneinteger, parameter :: row = 2integer, parameter :: col = 2integer :: a(2,2)=(/ 1,2,3,4 /)!a(1,1)=1, a(2,1)=2, a(1,2)=3, a(2,2)=4integer :: b(4)=(/ 5,6,7,8 /)integer :: c(2)write(*,*)a,2)write(*,*)a(:,1)c = a(:,1)!c(1)=a(1,1), c(2)=a(2,1)write(*,*)c!c(1), c(2)c = a(2,:)!c(1)=a(2,1), c(2)=a(2,2)write(*,*)c!c(1), c(2)write(*,*)c(2:1:-1)!c(2), c(1)c = b(1:4:2)!c(1)=b(1), c(2)=b(3)write(*,*)c!c(1), c(2)End20.FORALL语句 Program ex Implicit none integer :: I,Jinteger, parameter :: size = 5integer :: a(size,size)forall(I=1:size, J=1:size, I>J)a(I,J)=1!上半部分forall(I=1:size, J=1:size, I==J)a(I,J)=2!对角线forall(I=1:size, J=1:size, I!下半部分write(*,“(5(5I5,/))”)a End21.Allocatable Program EX Implicit none integer :: size, error=0integer, parameter :: one_mb=1024*1024 !1MBcharacter, allocatable :: a(:)Dosize=size+one_mb!allocate(a(size), stat=error)if(error/=0)exitwrite(*,“('Allocate ',I10, ' bytes')”)size write(*,“(F10.2,' MB used')”)real(size)/real(one_mb)deallocate(a)End do End22.Function 函数 Program ex implicit nonereal :: a=10real :: b=20real :: addwrite(*,“(f6.2)”)add(a,b)End Function add(a,b)implicit none real :: a,breal :: addadd = a*b End23.SAVE语句 Program ex Implicit nonecall sub()call sub()call sub()End program Subroutine sub()Implicit noneInteger :: count = 1Save count!指定save变量永远活着,不会忘记它的内容Write(*,*)countcount = count+1 End[运行结果:1 2 3 ]24.生成随机数 program ex implicit noneinterface!定义函数的接口function random10(lbound, ubound)implicit none real :: lbound, ubound real :: random10(10)end functionend interfacereal :: a(10)CALL RANDOM_SEED()!系统根据日期和时间随机地提供种子a = random10(1.0, 10.0)write(*,“(10F6.2)”)aend function random10(lbound, ubound)implicit nonereal :: lbound, uboundreal :: lenreal :: random10(10)realtinteger ilen = ubound-lbound!计算范围大小do i=1,10call random_number(t)!t会是0~1之间的随机数random10(i)= lbound + len * t!把t转换成lbound~ubound 间的随机数end do End25.MODULE语句 Module globalimplicit noneinteger a,bcommon a,b End module Program ex0834use globalimplicit nonea=1b=2call sub()End program Subroutine sub()use globalimplicit nonewrite(*,*)a,breturn End subroutine26.写文件到text program ex0902implicit nonecharacter(len=20):: stringopen(unit=10, file=“test.txt”)write(10,“(A20)”)“I LOVE YOU.”!写到文件中rewind(10)read(10,“(A20)”)string!从文件中读出来write(*,“(A20)”)string!写到屏幕上 end27.随机成绩 program gendataimplicit noneinteger studentsinteger irealr(3)write(*,“(4A5)”)“座位”,“语文”,“数学”,“英语”call random_seed()write(*,*)“How many students?”read(*,*)studentsdo i=1,studentscall random_number(r)write(*,“(6I5)”)i,int(r*50+50)end do end program第二篇:Fortran语言复习大纲复习内容提纲1.FORTRAN程序的结构、书写规则FORTRAN程序的构成(主程序和子程序);FORTRAN77源程序的书写格式。
读有限元Fortran程序笔记范文
读有限元程序笔记1.ALLOCATABLE::COORD(:,:),PROPS(:,:,:) !声明两个可变大小的数组,COORD(:,:)是二维数组,PROPS(:,:,:)是三维数组。
2.Fortran程序行首为C代表改行为注释,不会被编译3.全局变量(common),不同的程序之间,也就是在不同的函数之间或者是主程序跟函数之间,除了可以通过传递参数的方法来共享内存,还可以通过“全局变量”来让不同程序中声明出来的变量使用相同的内存位置。
4.Dimensional维的,viscoplastic塑性的,elastic有弹力的,finite有限的,element元素,program程序。
5.THREE DIMENSIONAL ELASTIC-VISCOPLASTIC FINITE ELEMENT PROGRAM三维弹塑性有限元程序6.Module可以用来封装程序模块,通常是用来把程序中,具备相关功能的函数及变量封装在一起。
程序在开始定义了一个module模块,在模块中定义了MXKKK=,MXGSJ=1000,MXGSJ=1000三个常量(PARAMETER表示常量),并且每个常量都赋了值。
在module模块中定义了NELEM,NPOIN,NPROP,MXDFN,NSTEP,IDEVP,IDDP,LTYPE以及NFIX1,NPL,NVL,NSL,NHL,NTL,IDCVG,NTOTV,NKK以及DTIME,TOLER,SCALE,DSCALE这些全局变量(common表示全局变量),定义了ICM(3,8),CGAUS(2),VSHAP(8,8),DERIV(3,8,8)以及POSGP(3),COPG(3),EJ(3,3),EJACI(3,3),R(8,8)这些维数与大小都确定的全局数组变量,定义了COORD(:,:),PROPS(:,:,:)以及STRSG(:,:,:),DJ(:,:),CARTD(:,:,:,:)以及TRANJ(:,:,:,:),DJRMX(:,:,:)以及DREMX(:,:,:),DJEMX(:,:,:,:)以及CREMX(:,:,:),CJEMX(:,:,:,:)以及MELEM(:,:),MPROP(:),ISSOR(:,:),NNDEX(:)以及MPFIX(:,:),MPSJ(:),MMATP(:),MPIV(:)以及TSTIF(:)以及ADISP(:),TDISP(:),ALOAD(:)以及PSNBR(:,:,:),PSNBJ(:,:)以及PSTNR(:,:,:),PSTNJ(:,:)以及STRSP(:,:),STRSJ(:,:)这些维数确定但是大小不确定的可变大小的数组,ALLOCATABLE表示可变大小的数组变量。
Fortran闲谈
看看这篇文章对Fortran的讲解,感觉讲的很不错。
深度:Fortran闲谈1.1 始于计算,终于计算在荒莽的历史尽头,我们常常听说人类之所以能够凭借虚弱的身躯,一次又一次地打退其他凶猛动物的猖狂进攻,而终于成就为今日当之无愧的“万兽之王”,这个原因有很多种解释,比如说是劳动,说是手,说是大脑,莫衷一是,各有各的理论和证据,确实是个很难取得定论的问题,因此我想提出一种新的解释,大概是不会遭到立刻的覆灭性打击。
人类的进化始于计算,我相信。
在有关非洲黑猩猩的纪录片里面,可以看到黑猩猩也会用手使用工具,一个黑猩猩家庭为了生活也勤于劳动,一个黑猩猩群落社会里面的形形色色的政治行为,显示它们的大脑也不是很闲,但有一次我看到黑猩猩们抢香蕉时,总是把自己已经抢到手的香蕉给弄丢了而无知觉,突然觉得它们最缺乏的也许是算数的能力。
所以我想,人类的起源一定跟计算有莫大的关系。
当然这些都是戏说而已,不过如果说人类的科学是从计算开始的,应该是不会有太大的争议的。
也许有人说人类的科学活动应该是起源于观察,但从动物行为学的角度来看,观察这种行为是很难界定的,而计算则是非常好界定的行为,因为最原始的计算行为显然应该就是数数。
可以想像,当人类开始意识到自我在这个世界的孤独存在时,对于日月星辰和风雨雷电的无常和力量该是多么地恐惧啊!而人类把自己从这种恐惧当中解救出来的第一个方法应该就是算数。
算数导致了人类最早的科学活动,即天文学和几何学。
人们从对日月星辰的计数当中发现了天体的运行是有常的,而不是什么不可琢磨的妖魔鬼怪在主宰;从对土地与山河的度量中建立了明确的几何概念,从而对自己所生活的世界开始了真正的理解。
而这种理解活动一旦开始,就无法停止了,演变至今,就构成了我们人类最值得自豪的成就-科学。
科学的历史表明了它的基础,就是计算。
如果我们只是一味地观察,我们会纪录下来大量的经验,然而却无法理解这些经验的含义,更进一步,对于经验有了总结归纳之后,哪怕是进行计算的确切程度不同,也会导致不同的对于自然的理解。
Fortran用法小结
Fortran用法小结目录:一、说明二、概述三、数据类型及基本输入输出四、流程控制五、循环六、数组七、函数八、文件一、说明本文多数内容是我读彭国伦《Fortran 95 程序设计》的笔记。
只读到第九章,主要是3~9章,都是最基本的用法(原书共16章)。
这里主要摘录了我看书过程中总结的一些Fortran和C不同的地方,主要是语法方面。
希望这份笔记能够给学过C但没有接触过Fortran的同学带去一些帮助。
要想得更清楚些,推荐看一下原书,觉得作者真的写得很好,很清楚;如果有C语言的基础,看完前九应该很快的,花一两天就行了。
觉得如果耐心看完本文,基本功能应该也可以顺利用起来了。
外,由于我之前没有用过Fortran,这次为了赶文档看书又看得很粗浅,大多数东西看过之后都没得及仔细想,只是按着作者的意思去理解。
所以这份笔记还处于纸上谈兵的层次。
如果有不妥的方,希望大家指正。
谢谢!文中蓝色的部分是程序代码,!后面的内容为注释。
二、概述1、名词解释Fortran=For mula Tran slator/Translation一看就知道有什么特色了:可以把接近数学语言的文本翻译成机械语言。
的确,从一开始,IBM设计的时候就是为了方便数值计算和科学数据处理。
设计强大的数组操作就是为了实现这一目标。
ortran奠定了高级语言发展的基础。
现在Fortran在科研和机械方面应用很广。
2、Fortran的主要版本及差别按其发展历史,Fortran编译器的版本其实很多。
现在在广泛使用的是Fortran 77和Fortran90。
ortran 90在Fortran 77基础上添加了不少使用的功能,并且改良了77编程的版面格式,所以编程时推荐使用90。
鉴于很多现成的程序只有77版本,有必要知道77的一些基本常识,至少保证能够看77程序。
以下是77和90的一些格式上的区别。
Fortran 77:固定格式(fixed format),程序代码扩展名:.f 或.for (1)若某行以C,c或*开头,则该行被当成注释;(2)每行前六个字符不能写程序代码,可空着,或者1~5字符以数字表明行代码(用作格式化输入出等);7~72为程序代码编写区;73往后被忽略;(3)太长的话可以续行,所续行的第六个字符必须是"0"以外的任何字符。
FORTRAN学习中的一些小心得
FORTRAN 心得第一部分:一些小心得1Fortran不区分大小写2 Fortran有5种基本数据类型,integer,real, character, logical, complex3 fortran fixed format格式中的变量赋初值一般用DATA,因为它不能用::4 real(kind=8) a这种格式只使用于Fortran90,Fortran77中要使用real*8或real(8)5 FORTRAN中FREE与FIXED两种格式do循环的区别:Fortran 95使用end do来结束循环。
Fortran 77使用DO循环要麻烦一点,它不使用END DO来结束循环,而是使用行号来结束循环,程序代码要在DO的后面写清楚这个循环到哪一行程序代码结束。
Fortran 77中,经常会使用CONTINUE这个命令来结束循环。
因为CONTINUE这个命令没有实际的用途,刚好可以拿来做封装使用。
6 循环的流程控制:循环中的cycle命令相当于c++里的continue命令,用于结束一次循环循环中的exit命令好比c里面的break,用于结束循环7 不使用do循环,单纯用GOTO语句也能设计循环程序,但不推荐使用GOTO语句7 fortran有等价声明:即用equivalence(a,b),这样使得a,b使用同一块内存,这样可以节省内存,有时可精简代码。
8 fortran77中只能用单引号。
(还有疑问,因为fixed format能用双引号)9 逻辑运算符== /= > >= < <= !Fortran90用法.EQ. .NE. .GT. GE. .LT. .LE. !Fortran77用法9 PAUSE,CONTINUE,STOPpause 暂停程序执行,按enter可继续执行continue 貌似没什么用处,可用作封装程序的标志STOP 命令用来结束程序,要谨慎使用10 数组元素之间要用逗号分隔,而不能像matlab一样既可以用逗号也可以用空格,fortran 的数组元素之间不能用空格。
Fortran语言的优点和缺点
Fortran语言的优点和缺点选择Fortran语言的原因包括以下几种。
q 它是一种现代的表达性语言,简单且具有Ada的很多功能。
q 目前该语言既适合解决各类数值问题,又适合非数值问题。
q 该语言广泛用于教育部门和科学部门。
q 存在大量使用Fortran 77或其早期版本(如Fortran 66,也称为Fortran IV)编写的软件。
使用标准的、符合Fortran 90、95和2003规范的编译器可以重新编译这些软件的代码,这样就能保护你在已有代码方面的所有重要投资。
世界上大约有15%的代码是用Fortran编写的。
但是,Fortran也存在一些不足。
假设必须与Fortran 77保持后向兼容,那么有些语法很难简单地解释清楚。
但是,如果始终使用语言的一个子集并采用一致的风格,就能够迅速地解决当前出现的很多问题。
Fortran和c++的比较,优点和缺点本文来自大学力学论坛()随着其他程序设计语言的迅速发展,Fortran语言不再是惟一适用的程序设计语言。
然而,尽管在一些特殊领域,使用其他程序语言更为合适,但在数值计算、科学和工程技术领域,Fortran仍具有强大的优势。
其强大的生命力在于它能紧跟时代的发展,不断更新标准,每次新的文本推出都在功能上有一次突破性进展。
Fortran90不仅仅是将已有的语言进行标准化,更重要的是发展了Fortran语言,吸取了一些其他语言的优点。
所以,虽然Fortran语言历史悠久,但仍在日新月异地发展。
随着巨型计算机(向量机和并行机)的异军突起,出现了新的高性能Fortran语言(HPF),它是Fortran90的一个扩展子集,主要用于分布式内存计算机上的编程,以减轻用户编写消息传递程序的负担。
HPF-1.0的语言定义是在1992年的超级计算国际会议上作出的,正式文本是在1993年公布的。
其后几年的会议上又对它进行了修改、重定义、注释等工作,于1997年发布了HPF2.0语言定义。
Fortran基本用法小结
2、Fortran的主要版本及差别
按其发展历史,Fortran编译器的版本其实很多。现在在广泛使用的是Fortran77和Fortr
an90。 Fortran90在Fortran77基础上添加了不少使用的功能,并且改良了77编程的版面格式,
所以编程 时推荐使用90。鉴于很多现成的程序只有77版本,有必要知道77的一些基本常识,至少保
program main
!程序开始,main是program的名字,完全自定义
write(*,*)"Hello" !主程序
stop
!终止程序
end[program[main]] !end用于封装代码,表示代码编写完毕。
[]中的内容可省略,下同。
再看一段实用一些的程序,好有点感性认识。程序用于计算圆柱的表面积,要求输入底面
一、说明
本文多数内容是我读彭国伦《Fortran95程序设计》的笔记。只读到第九章,主要是3~9
章,都是 些最基本的用法(原书共16章)。这里主要摘录了我看书过程中总结的一些Fortran和C不
/?uid-1039-action-viewspace-itemid-16895
/?uid-1039-action-viewspace-itemid-16895
4/9
13-4-13
[转载] Fortran基本用法小结 - 朱文举的给排水专业博客 - 国科社区-国家科技成果网 - Powered by X-Space
interactive_loop: do
/?uid-1039-action-viewspace-itemid-16895
6/9
13-4-13
[转载] Fortran基本用法小结 - 朱文举的给排水专业博客 - 国科社区-国家科技成果网 - Powered by X-Space
fortran用法小结
Fortran用法小结目录:一、说明二、概述三、数据类型及基本输入输出四、流程控制五、循环六、数组七、函数八、文件一、说明本文多数内容是我读彭国伦《Fortran 95 程序设计》的笔记。
只读到第九章,主要是3~9 章,都是最基本的用法(原书共16章)。
这里主要摘录了我看书过程中总结的一些Fortran 和C不同的地方,主要是语法方面。
希望这份笔记能够给学过C但没有接触过Fortran的同学带去一些帮助。
要想得更清楚些,推荐看一下原书,觉得作者真的写得很好,很清楚;如果有C语言的基础,看完前九应该很快的,花一两天就行了。
觉得如果耐心看完本文,基本功能应该也可以顺利用起来了。
外,由于我之前没有用过Fortran,这次为了赶文档看书又看得很粗浅,大多数东西看过之后都没得及仔细想,只是按着作者的意思去理解。
所以这份笔记还处于纸上谈兵的层次。
如果有不妥的方,希望大家指正。
谢谢!文中蓝色的部分是程序代码,!后面的内容为注释。
二、概述1、名词解释Fortran=Formula Translator/Translation一看就知道有什么特色了:可以把接近数学语言的文本翻译成机械语言。
的确,从一开始,IBM设计的时候就是为了方便数值计算和科学数据处理。
设计强大的数组操作就是为了实现这一目标。
Fortran奠定了高级语言发展的基础。
现在Fortran在科研和机械方面应用很广。
2、Fortran的主要版本及差别按其发展历史,Fortran编译器的版本其实很多。
现在在广泛使用的是Fortran 77和Fortr an90。
Fortran 90在Fortran 77基础上添加了不少使用的功能,并且改良了77编程的版面格式,所以编程时推荐使用90。
鉴于很多现成的程序只有77版本,有必要知道77的一些基本常识,至少保证能够看77程序。
以下是77和90的一些格式上的区别。
Fortran 77:固定格式(fixed format),程序代码扩展名:.f或.for(1)若某行以C,c或*开头,则该行被当成注释;(2)每行前六个字符不能写程序代码,可空着,或者1~5字符以数字表明行代码(用作格式化输入出等);7~72为程序代码编写区;73往后被忽略;(3)太长的话可以续行,所续行的第六个字符必须是"0"以外的任何字符。
fortran学习笔记
Fortran学习笔记——吴登将2014.10.15小技巧:!写出到excelexcel的默认格式,估计是大家所期望的输出格式。
方法很简单,只要知道xls文件的分列符号是tab键就行了,于是在同行的各数据间加上" "字符(按一下tab键,在fortran 输出时两边加上英文引号)就搞定了。
1.新建项目:步骤2. 面向过程的方法--就是程序的组成单位是函数(过程),也就是说,一个程序是由若干个函数组成的。
“结构化程序设计方法”应该与“面向过程的程序设计方法”是同义词。
面向对象的方法--就是程序的组成单位是类class ,程序是由若干个类组成的。
当然类里面有成员函数,所以这2种方法并不是相互排斥的。
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。
把上面每个步骤用分别的函数来实现,问题就解决了。
而面向对象的设计则是从另外的思路来解决问题。
整个五子棋可以分为1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。
第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的i变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。
可以明显地看出,面向对象是以功能来划分问题,而不是步骤。
同样是绘制棋局,这样的行为在面向过程的设计中分散在了总多步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。
FORTRAN学习中的一些小心得
FORTRAN心得第一部分:一些小心得1Fortran不区分大小写2Fortran有5种基本数据类型,integer,real,character,logical,complex3fortran fixed format格式中的变量赋初值一般用DATA,因为它不能用::4real(kind=8)a这种格式只使用于Fortran90,Fortran77中要使用real*8或real(8)5FORTRAN中FREE与FIXED两种格式do循环的区别:Fortran95使用end do来结束循环。
Fortran77使用DO循环要麻烦一点,它不使用END DO来结束循环,而是使用行号来结束循环,程序代码要在DO的后面写清楚这个循环到哪一行程序代码结束。
Fortran77中,经常会使用CONTINUE这个命令来结束循环。
因为CONTINUE这个命令没有实际的用途,刚好可以拿来做封装使用。
6循环的流程控制:循环中的cycle命令相当于c++里的continue命令,用于结束一次循环循环中的exit命令好比c里面的break,用于结束循环7不使用do循环,单纯用GOTO语句也能设计循环程序,但不推荐使用GOTO语句7fortran有等价声明:即用equivalence(a,b),这样使得a,b使用同一块内存,这样可以节省内存,有时可精简代码。
8fortran77中只能用单引号。
(还有疑问,因为fixed format能用双引号)9逻辑运算符==/=>>=<<=!Fortran90用法.EQ..NE..GT.GE..LT..LE.!Fortran77用法9PAUSE,CONTINUE,STOPpause暂停程序执行,按enter可继续执行continue貌似没什么用处,可用作封装程序的标志STOP命令用来结束程序,要谨慎使用10数组元素之间要用逗号分隔,而不能像matlab一样既可以用逗号也可以用空格,fortran 的数组元素之间不能用空格。
Fortran程序总结
Fortran程序总结1.行的书写(行的长度、分行、续行)一行可以是0~132个字符,空格有意义,语句最长不超过2640个字符一行可以有多个语句,用“;”分隔一个语句可分行写,读行标记为&(放在尾部),但如为关键字,首尾均加&。
最多可有511个续行。
2.说明语句必须出现在可执行语句之前,格式说明语句(FORMAT语句)除外。
3.注释标志符:自由格式:!固定格式:C *语句分隔符:分号;(仅自由格式可以使用)续行符:自由格式:&申明标号: 1到5位无符号整数空格:关键字、变量、常量内部不能用空格,但相邻两者之间须用空格4.信息处理的分类:数值处理和信息处理现代计算机工作原理:程序存储和程序控制(冯·诺依曼)1、运算器——算术运算、逻辑运算2、控制器——根据指令控制计算机工作运算器、控制器和寄存器称为中央处理器CPU3、I/O设备——提供数据传输服务4、总线——数据传输的公共通道1.机器语言:二进制代码形式,可以被计算机直接执行,不可移植2.汇编语言:用助记符来代替机器指令,容易记忆,不可移植3.高级语言:接近自然语言(英语)的程序设计语言,又称算法语言,易学、易用、易维护,可移植性好例:FORTRAN、BASIC、PASCAL、C、LISP、PROLOG 等5.FORTRAN90程序是一种分块结构,由若干个程序单元块组成:主程序、外部子程序、模块、块数据单元无论是主程序单元,还是子程序单元,都是独立的程序单位,应该独立编写,它们的形式相似。
非语句行:注释语句:!后的所有字符都被编译器忽略。
可独占一行,也可在其它语句之后,空行为注释行(固定格式用C和*)6.常量的定义:常量是程序执行过程中不能变化的量。
基本数据类型有五种:整型、实型、复型、字符型和逻辑型前三种属于数值类型,后两种为非数值类型,主要用于文字处理和控制。
FORTRAN 90通过KIND值确定整数的存储开销、最大位数和取值范围,如表所示。
_FORTRAN语言程序设计_教学的几点体会
《FORTRAN语言程序设计》教学的几点体会霍 星 朱仲元(内蒙古农业大学水利与土木建筑工程学院)摘 要 《FOR TRAN语言程序设计》是工科专业的基础课程。
本文是作者多年来为水利工程专业、水文水资源专业、给水排水专业从事高级语言程序设计教学与实习的几点体会。
关键词 工科 FOR TRAN语言程序设计 教学 体会 FORTRAN语言是国际上最早出现的计算机高级语言,它结构紧凑、计算能力强。
据文献(1)介绍,目前世界上仍有90%的数值计算采用FORTRAN 语言编写的程序计算。
在科学技术发达的国家中,几乎每一个工程技术人员都会使用FORTRAN语言,我国大多数理工科院校都开设FORTRAN语言课程。
我院根据工科专业的特点,从1985年开始开设《FORTRAN语言程序设计》课程。
十多年来不断摸索,总结经验,改进教学,以适应专业的要求。
现就这门课的教学法谈几点体会。
1 培养兴趣,打好基础高级语言程序设计是一门基础课程,不但要求学生有较强的逻辑思维能力,而且要求学生有较好的数学表达能力和数值计算基础。
为了使初学者能尽快地掌握计算机知识,进入计算机的应用领域,在课程讲授过程中,我们特别注意培养学生的学习兴趣。
学生的学习兴趣和对课程的热爱程度对学习课程是十分重要的。
恩格斯说“兴趣与爱好是最好的老师”。
初接触计算机时,很多学生感到新奇、好玩,这不能说是兴趣,只是一种好奇。
随着课程的不断深入,大量的规则、定义、要求和机械的格式出现,很容易使一部分(甚至是大部分)学生产生枯燥无味的感觉。
为了把学生的好奇转化为学习兴趣,授课时我们改变过去先给出定义和规则的讲授办法,而是从具体问题入手,努力把枯燥无味的“语言”讲的生动、活泼。
在第一节课上,就给学生找一些《高等数学》、《线性代数》、《水力学》等已学课程或同行课程的问题,用算法语言来求解,使学生体会程序设计的用途和一种全新的解决问题的方法。
在课程的进行中,引导学生学一种算法,就尝试在同行课程中应用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 mainimplicit nonecharacter(len=79)::filename="number.txt",bufferinteger,parameter::field=10integer::status=0logical aliveinquire(file=filename,exist=alive)if(alive)thenopen(unit=field,file=filename)do while(.true.)read(unit=field,fmt="(A79)",iostat=status)bufferif(status/=0)exitwrite(*,"(A79)")bufferend doelsewrite(*,*)filename,"does't exist."end ifpausestopend program main=============================================附number.txt===============================1234555666879789789789789二)Fixed Format(固定格式)扩展名:.F 或 .FOR1标号区:第l-5列可以写l至5位整数。
也可以没有标号。
标号区中的空格不起作用。
如lOO与100 或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 将成绩输入date.txtmodule typedeftype studentinteger Chinese,English,Mathend typeend moduleprogram mainuse typedefimplicit noneinteger::studentstype(student),allocatable::s(:)integer,parameter::fileid=10character(len=80)::filename="date.txt"integer::iwrite(*,*)"how many students?"read(*,*)studentsallocate(s(students),stat=i)if(i/=0)thenwrite(*,*)"allocate buffer fail"stop!此处要学习跳出程序。
end ifopen(fileid,file=filename)do i=1,studentswrite(*,"('input the',I2,'th student''s scores')")iread(*,*)s(i)%Chinese,s(i)%English,s(i)%Math !Sb了,其实可以直接写成s(i)write(fileid,"('Student Number:',I2,/,'Chinese Score:',I3,'English Score:',I3,'Math Score:',I3)")i,s(i)!s(i)的三项可以分别设置各自格式,另外注意括号里封装字符用单引号end doclose(fileid)pausestopend program main程序9 3 读取date.txt并且输出module typedeftype studentinteger Chinese,English,Mathend typeend moduleprogram mainuse typedefimplicit noneinteger,parameter::fileid=10integer::studentsinteger::ntype(student)::scharacter(len=10)::filename="date.txt"logical::aliveinteger::stat=0inquire(file=filename,exist=alive)if(.not.alive)thenwrite(*,*)"file doesn'nt exist"stopend ifopen(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,statend dopausestopend program main程序9 5,跳跃读取:还是不太懂REC的用法program mainimplicit nonecharacter(len=80)::filename="list.txt"integer::fileidlogical::aliveinteger::statinteger::playerreal::scoreinquire(file=filename,exist=alive)if(.not.alive)thenwrite(*,*)"file doesn't exist"stop!体会stop的用法,用于在程序中间终止程序。
end ifopen(unit=fileid,file=filename,access="direct",&form="formatted",recl=7,status="old")do while(.true.)write(*,*)"查询第几棒?"read(*,*)playerread(fileid,"(F5.2)",rec=player,iostat=stat)score if(stat/=0)exitwrite(*,"(F5.2)")scoreend dopausestopend program main程序 9 6 内部变量的应用:本程序中invalid很好!否则我只能通过监视内层那个do的循环的次数来判断strng中的所有字母是不是检验完毕,本程序中的invalid这个变量显然更简单巧妙,先设置.true.进入外循环,然后.false.假设输入的都是正确的,可以跳出,然后用if“考验”这个假设。
很巧!另外,本计算机能接受的最大整数是4byte、32bits,即2147483647。
默认的也是长整型,即kind=4。
program mainimplicit noneinteger::iinteger,external::GetIntegeri=GetInteger()write(*,*)ipausestopend program maininteger function GetInteger()implicit nonecharacter(len=80)::stringinteger::i,codelogical::invalid=.true.do while(invalid)write(*,*)"请输入整数"read(*,"(A80)")stringinvalid=.false.do i=1,len_trim(string)code=ichar(string(i:i)) !用code代替,增加可读性 2.string(i:i)不是string(i) if(code<ichar("0").or.code>ichar("9"))thenwrite(*,*)"invalid input"invalid=.true. !invalid这个逻辑变量用得非常巧妙,认真体会。