fortran-自学笔记

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

INTEGER(NUM=100)REALUOC(NUM),ISC(NUM),RS(NUM)Error:Anautomaticobjectisinvalidinamainprogram.!parameter(pi=3.1415927,J=10)parameter(pi=3.1415927,J=10.0)!正确写法real::h=1.0/J!注意:real::h=1/J,这样写也是不行的doi=1,J-1!即使J=10.0循环依然可以继续u(i)=sin(i*pi*h)write(10,*)u(i)EnddoQ:为何我的u输出全是0;write(10,“(5f10.4)”)(v(i),i=1,5)!括号即为format的部分,引号为代价==write(10,100)(v(i),i=0,5)!多余的格式可以不管100format(7(e10.4,2x))write(10,('aa'))==write(10,*)‘aa’!或者write(10,*)“aa”Advance:即输出一行后不换行,但是注意输出格式必须写成一样的“(A)”启示:先输出,再换行IMSL--国际数学和统计链接库trim和adjustl:FORTRAN的标准内部函数。Adjustl的作用是将字符串里的内容左对齐,空格置于右端。trim的作用是将字符串末尾(即右端)的空格删掉。INQUIRE(FILE=DIR_APP(1IR_LEN)//‘WAVECAR.’//EXT,EXIST=junk)Q:这个句子中的两个”//”什么意思?退出关键字exit:退出循环……stop:停止整个程序的运行,不管是不是在主程序中……break:不是Fortran中的,至少我没有看到过用break的……数字型字符---数字字符串数字character(len=30)::aarealbaa=1234.5678read(aa,*)bwrite(*,*)bend数字字符串:character(len=30)::aarealbb=1234write(aa,'(I4)')bwrite(*,*)aaend带小数点的数据转换:character(len=30)::aarealbb=1234.00write(aa,*)bwrite(*,*)aaend所有第四行在进行转换时,可以把aa看是是个文本文件名数学符号DSQRT平方根LOG对数character(len=30)::aa==character*30::aa1)FreeFormat(自由格式)扩展名.F901》行:一行为132列。可以有复数条程序语句,语句间用分号“;”分开。语句没有位置规定。一行可以是0~132个字符,空格有意义语句最长不超过2640个字符最多可有511个续行2》注释行:起始用注释符“!”号,此行其后的所有字符均作为注释(字符串中的!号除外,如print*,’help!!!!’)。3》续行:当一个语句非常长以至于132列都书写不下时,允许有39个续行。在语句行最后加上续行符“&”号。如果字符串跨2行以上,则在续行的开始位置也要加&号。注意语句的有效字符是从“&”前和续行符“&”之后的位置算起。(一行程序代码的最后如果是符号&,代表下一行程序会和这一行连接。如果一行程序代码的开头是符号&,代表它会和上一行程序连接。如果把Fortran的关键字分为两行书写,则两行都要加续行符号。)4》空格:在语句名和变量名中间不能有空格。需要空格的地方必须有一个以上空格(GOTO和GOTO,ELSEIF和ELSEIF,END构造名(构造名有:DO,PROGRAM,FUNCTION,MODULE,SUBROUTINE)等有两种写法的除外),如关系运算符==,=不能写成==,=。这与F77有很大不同之处,因为F77的设计中将编译源程序的空格忽略。(二)FixedFormat(固定格式)扩展名:.F或.FOR1》标号区:第l—5列可以写l至5位整数。也可以没有标号。标号区中的空格不起作用。如lOO与100或100作用相同。标号应是无符号整数(无正负号或小数点)。标号大小顺序没有任何要求。假如第二行的标号为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列作处理。Q:fortran语句:pi=dacos(-1.D0)1.acos前面加d什么意思2.(-1.D0),.D0什么意思?dacos()是fortran中返回值是双精度(有十五位有效数字)的反余弦函数,其参数也是双精度的数.-1.D0就是双精度数。-1.D0代表的是-1.00000000000000,这是fortran的一种表示格式,它可以输出十五位有效数字,D前面的-1.表示-1.0,D后面的0代表-1.0扩大的倍数,譬如1.3D.3就表示1.3*10^3(不过表示时得换成十五位有效数字1300.00000000000替代之。)EQUIVALENCE:变量等价声明equivalence(a,b)!注意:变量a和b占用同一块内存equivalence(c(3),d)!数组c的第3个元素和变量d等价,数组名较长的时候可以用一个短名的变量等价,比较方便在module中定义了一个数组MODULEABCINTEGER,DIMENSION(:,:)::TTENDMODULEABCSUBROUTINETESTUSEABCINTEGER,DIMENSION(:)::YYEQUIVALENCE(TT(1,1),YY(1))!这里的TT想用module中的ENDSUBROUTINE编译时:Error:TheattributesofthisnameconflictwiththosemadeaccessiblebyaUSEstatement.好像是EQUIVALENCE中的TT和MODULE中的TT不代表一个数组吧,名称有冲突USEABC,ABC_TT=TTQ:fortran怎么输出向左对齐的数据PROGRAMmainimplicitnoneinteger::aa(7)=(/1,10,100,1000,10000,10000,100000/)CHARACTER(len=12)::ch(7)integer::iwrite(ch,*)aa!把数组直接写成了字符,牛逼,研究中...doi=1,7ch(i)=TRIM(ADJUSTL(ch(i)))write(*,*)ch(i)enddoendPROGRAMQ:continue和goto和break语句的区别Continue是跳出本次循环,进行下一次循环.FORTRAN中为CYCLE,而continue=enddoGoto是强制转向,高级编程语言中不提倡用goto语句FORTRAN也用Break是跳出循环体,执行循环体下面的语句.FORTRAN中对应的为EXIT1.continunemain(){inti;for(i=1;i=4;i++){if(i%2==0)continue;elseprintf(%di);}}输出为13,当i=2时第一次执行continue,进入下一次循环即i=3,不退出循环2.gotoMain(){inti;Label:for(i=1;i=4;i++){if(i%2==0)gotoLabel;elseprintf(%di);}}输出结果为1111111…………程序陷入死循环无法正常结束。当i=2时执行goto语句for循环又重新开始,i重新等于1,接着i=2,又执行goto语句……程序不停输出1.goto语句打破了正常的执行顺序容易出错不提倡使用3.breakmain{inti;for(i=1;i=4;i++){if(i%2==0)break;elseprintf(%di);}}输出为:1,当i=2是跳出for循环,i仍等于2,程序结束Q:如何在VC++中调用FORTRAN子程序我在《电脑编程技巧与维护》7期上看到有关FORTRAN(应用POWERSTATION平台)移植的文章。在FORTRAN移植过程中:一种方法是将FORTRAN程序编译成EXE文件,然后通过数据文件将数据传给通过进程生成而运行的FORTRAN可执行文件。另一法是通过POWERSTATION的编译选项将FORTRAN子程序编译成DLL来进行调用。我想编译成DLL也许更符合你的要求。在该杂志第10期上还有一篇关于NDPFORTRAN向POWERSTATION移植的文章。如果你用POWERSTATION的话,我想帮助中有关转换成DLL的参数会有说明的。Q:设置运行完程序后自动关机system(shutdownnow)fortran可以调用任何程序杂七杂八(一)integer是无法用real格式输出的WRITE(*,”(I)”)I此语法不对,不会有输出结果,可为WRITE(*,”(I2)”)I**********************************************************************PROGRAMMAININTEGERAA(22,22)DO20I=1,22!也可写成DO20I=1,22DO20J=1,2220AA(I,J)=I+I*100WRITE(*,“(22I8)”)((AA(I,J),J=1,22),I=1,3)END**********************************************************************对于字符串:FORTRAN90可以用“”来封装字符串FORTRAN77只能用单引号来封装字符串FORTRAN77:‘’:字符串;“”:引用符!如果是将AA全部输出22可以是大于22的任意个整数,输出仍然是每行22个数据,但是当只输出AA的一部分,则格式较死,必须写你需要的数字,原因未知杂七杂八(二)integer是无法用real格式输出的WRITE(*,”(I)”)I此语法不对,不会有输出结果,可为WRITE(*,”(I2)”)IWRITE(*,“(E10.4)”)”DCDT=”,DCDT不对,必须把字符串放在里面**********************************************************************DO20I=1,22DO20J=1,2220AA(I,J)=I+I*100WRITE(*,“(22I8)”)((AA(I,J),J=1,22),I=1,3)END**********************************************************************对于字符串:FORTRAN90可以用“”来封装字符串FORTRAN77只能

1 / 19
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功