用fortran怎么编程?如何安装fortran
用fortran怎么编程?

代码如下。算法见绿色字体注释。

附:计算示例

如何安装fortran
*** /步骤
1、到vitualbox的官网下载fortran最新版的安装包并安装。
2、然后在网上下载虚拟机文件,并解压。
3、打开Vitualbox,选择“新建”,设置虚拟电脑名称(个人喜好);

4、单击“下一步”,设置虚拟电脑内存;

5、下一步,设置虚拟硬盘,选择“使用已有的虚拟硬盘文件”,点击右边的文件夹图标,选择刚才在网盘下载的虚拟机文件,点击“打开”;最后,选择“创建”。选择创建的虚拟机,点击启动;



6、fortran开发工具就在桌面上,双击打开。依次点击File/New/File/Fortran Free Format Source File。有时候也要新建一个Project,这样就完成了。




下面分享相关内容的知识扩展:
fortran有没有哪个函数四舍五入的取整,2.9变成3,1.2变成2
ifix floor nint int ceiling (1.1 / 1.5 / -1.1 / -1.5)
ex: ifix 针对数据类型为real型
1.000 1.000 -1.000 -1.000 (正的向下取整,负的向上取整,都往0这个方向靠拢)
ex: floor 针对real数据类型
1.000 1.000 -2.000 -2.000 (向下取整)
ex: nint 针对real数据类型
1.000 2.000 -1.000 -2.000 (四舍五入)
ex: int 针对数据类型有real,integer,complex
1.000 1.000 -1.000 -1.000 (正的向下取整,负的向上取整,都往0这个方向靠拢)
ex: ceiling 针对real数据类型
2.000 2.000 -1.000 -1.000 (向上取整)
我是工科学生,想知道为什么让我们学fortran,而不学其他的c或c++之类的语言,他们各自有什么特点?
rt对于工科学生来说学习一种语言主要是用来编制程序进行科学运算的。Fortran语法简明且严谨,易学,更大特性是接近数学公式的自然描述,可以直接对矩阵和复数进行运算,在计算机里具有很高的执行效率。因此Fortran非常适合科学计算,至今仍然是最主要的科学计算语言,你由它的全称:Formula Translator就可以看出它最初本身就是针对科学计算开发的。现在很多的商用工程软件,如著名的有限元软件MSC.Nastran就是用Fortran编制的核心算法。
所以作为工科学生学好Fortran很有用,而C语言语法过于复杂(它实际是中级语言,更接近于底层,而Fortran是高级语言),不易掌握,运算效率不如Fortran,不如Fortran适于科学计算。
其实各种语言的语法都大同小异,只要掌握了一种,再学习其它语言就很容易了,而且语言只是一种工具,更重要的是算法,对于你来说就是你的专业知识。
同时,在科学计算时具体使用哪一种语言也没有规定,应根据需要和问题的特点选取合适的语言,经常会多种语言混编。C和C++,或者C#都是很好的语言,掌握好也很有用处。
现在还有一种更为高级的语言(有人甚至将其成为软件)MATLAB,非常方便好用(几乎是傻瓜式的),是专门针对科学计算开发的,目前在学术界运用非常广,只是运行速度相对慢一些。建议你也学学,非常有用。
PS:我学机械的,主要使用MATLAB和Fortran,偶尔使用C++。
fortran语言,能否帮我解读一下这个程序,更好每行都有注释,非常感谢
PROGRAM MAINDOUBLE PRECISION A,AA,XX,XX1,XX2,TYY0,TYX0,YY0,YX0
DIMENSION A(101),AA(101)
OPEN(10,FILE='OUTPUT.TXT',STATUS='UNKNOWN')
WRITE(*,*)'此程序用于求解一元N次方程最接近给定的X0的一个解。'
WRITE(*,*)'请输入N(≤100,0=EXIT):'
2 READ(*,*)N
IF(N.EQ.0) THEN
GOTO 10000
END IF
IF((N.Lt.0).OR.(N.GT.100)) THEN
WRITE(*,*)'请重新输入N(≤100,0=EXIT):'
GOTO 2
ENDIF
WRITE(*,*)'请依次输入各项系数AN~A0(高次幂~低次幂)。'
WRITE(*,*)'每个数据后回车:'
DO 5 I=1,N+1
READ(*,*) A(I)
5 CONTINUE
IF(MOD(N,2).EQ.0) THEN
WRITE(*,*)' '
WRITE(*,*)'对N为偶数的情况,请仔细校核。'
WRITE(*,*)' '
END IF
WRITE(*,*)'请输入X0:'
READ(*,*) X0
DO 10 I=1,N
AA(I)=(N-I+1)*A(I)
10 CONTINUE
ICOUNT=0
XX=X0
DO 30 I=1,1000000
ICOUNT=ICOUNT+1
YY0=0.
YX0=0.
DO 40 J=1,N
TYY0=A(J)*(XX**(N-J+1))
YY0=YY0+TYY0
40 CONTINUE
YY0=YY0+A(N+1)
DO 50 K=1,N-1
TYX0=AA(K)*(XX**(N-K))
YX0=YX0+TYX0
50 CONTINUE
YX0=YX0+AA(N)
IF(YX0.EQ.0) THEN
XX=XX+1
ICOUNT=ICOUNT-1
GOTO 30
END IF
IF(MOD(I,2).EQ.1)THEN
XX1=XX-YY0/YX0
XX=XX1
ELSE
XX2=XX-YY0/YX0
XX=XX2
END IF
XX=.5*((XX1+XX2)-(-1)**I*(XX1-XX2))
IF(ICOUNT.GE.1000) THEN
WRITE(*,*)' '
WRITE(*,*)'此方程无实数解。'
GOTO 10000
END IF
IF((ABS(XX2-XX1).LE.1.D-15).AND.(ICOUNT.GT.1)) THEN
IF((ABS(XX).GT.1.D-6).AND.(ABS(XX).LT.9.D6)) THEN
GOTO 1000
ELSE
GOTO 1001
END IF
END IF
30 CONTINUE
1000 WRITE(*,100)XX
GOTO 1010
1001 WRITE(*,101)XX
100 FORMAT(8X,'X=',F25.6)
101 FORMAT(8X,'X=',D25.6)
1010 WRITE(*,*)' '
WRITE(*,*)'本程序计算结果仅供参考。'
WRITE(*,*)' '
PAUSE
10000 STOP
END
PROGRAM MAIN !主程序
DOUBLE PRECISION A,AA,XX,XX1,XX2,TYY0,TYX0,YY0,YX0!定义双精度变量
DIMENSION A(101),AA(101)!定义数组
OPEN(10,FILE='OUTPUT.TXT',STATUS='UNKNOWN')!建立输出文件通道
WRITE(*,*)'此程序用于求解一元N次方程最接近给定的X0的一个解。'!屏幕提示
WRITE(*,*)'请输入N(≤100,0=EXIT):'!屏幕提示
2 READ(*,*)N !从屏幕读取N
IF(N.EQ.0) THEN !判定如果N=0则程序转去标识符号10000处
GOTO 10000
END IF
IF((N.Lt.0).OR.(N.GT.100)) THEN !判定如果N小于0或N大于100 则屏幕提示重新输入N
WRITE(*,*)'请重新输入N(≤100,0=EXIT):'
GOTO 2 !转到 标识2句处执行
ENDIF
WRITE(*,*)'请依次输入各项系数AN~A0(高次幂~低次幂)。'屏幕提示
WRITE(*,*)'每个数据后回车:'屏幕提示
DO 5 I=1,N+1 输入数组A(I)
READ(*,*) A(I)
5 CONTINUE
IF(MOD(N,2).EQ.0) THEN
WRITE(*,*)' '
WRITE(*,*)'对N为偶数的情况,请仔细校核。'
WRITE(*,*)' '
END IF
WRITE(*,*)'请输入X0:'
READ(*,*) X0
DO 10 I=1,N 输入数组AA(I)
AA(I)=(N-I+1)*A(I)
10 CONTINUE
ICOUNT=0 给ICOUNT赋值
XX=X0给XX赋值
DO 30 I=1,1000000 对I循环从1到10000000
ICOUNT=ICOUNT+1 每循环一次计数加一
YY0=0.给YY0赋值
YX0=0.给YX0赋值
DO 40 J=1,N
TYY0=A(J)*(XX**(N-J+1)) 计算TYY0,YY0
YY0=YY0+TYY0
40 CONTINUE
YY0=YY0+A(N+1) 计算YY0
DO 50 K=1,N-1 套另一个循环 对K循环从1到N-1
TYX0=AA(K)*(XX**(N-K))
YX0=YX0+TYX0
50 CONTINUE
YX0=YX0+AA(N) 计算YX0
IF(YX0.EQ.0) THEN 判别 YX0如果=0 则
XX=XX+1 XX加1
ICOUNT=ICOUNT-1 计数减1
GOTO 30 结束I这一步大循环开始I的下一步循环
END IF
IF(MOD(I,2).EQ.1)THEN 判别。。。
XX1=XX-YY0/YX0
XX=XX1
ELSE
XX2=XX-YY0/YX0
XX=XX2
END IF
XX=.5*((XX1+XX2)-(-1)**I*(XX1-XX2)) 计算赋值
IF(ICOUNT.GE.1000) THEN 判别 如果计数大于等于1000则结束程序
WRITE(*,*)' ' 屏幕输出提示
WRITE(*,*)'此方程无实数解。'屏幕输出提示
GOTO 10000 则结束程序
END IF
IF((ABS(XX2-XX1).LE.1.D-15).AND.(ICOUNT.GT.1)) THEN
IF((ABS(XX).GT.1.D-6).AND.(ABS(XX).LT.9.D6)) THEN
GOTO 1000
ELSE
GOTO 1001
END IF
END IF
30 CONTINUE
1000 WRITE(*,100)XX
GOTO 1010
1001 WRITE(*,101)XX
100 FORMAT(8X,'X=',F25.6)
101 FORMAT(8X,'X=',D25.6)
1010 WRITE(*,*)' '
WRITE(*,*)'本程序计算结果仅供参考。'
WRITE(*,*)' '
PAUSE
10000 STOP
END
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。