fortran常用算法的程序设计举例
Fortran77教程-4逻辑运算和选择结构
read(*,*) grade if(grade.ge.80.) write(*,*) 'A' if(grade.ge.70.) write(*,*) 'B' if(grade.ge.60.) write(*,*) 'C' write(*,*) 'D' end
24
C
单价850,100以上95折优惠,求货款。 price=850 read(*,*) n if(n.ge.100) price=price*0.95 amount=n*price write(*,*) 'n=',n,' amount=',amount end
read(*,*) grade if(grade.le.60.) then write(*,*) ‘D ' else if(grade.le.70.) then write(*,*) ‘C' else if(grade.le.80.) then write(*,*) ‘B' else write(*,*) ‘A' end if end
read(*,*) grade if(grade.ge.80.) then write(*,*) 'A ' else if(grade.ge.70.) then write(*,*) 'B' else if(grade.ge.60.) then write(*,*) 'C' else write(*,*) 'D' end if end
if(grade.ge.60.) then else print *, ’No.’, num print *, ’grade’, grade end if
FORTRAN编程演示
2-4 输入输出语句 PRINT语句是Fortran中较为常用的一种输 出语句,用它来完成表控输出的语法格式如 下所示。 PRINT *[, 输出项,……] 在PRINT语句中不能指定输出设备,只能向 系统隐含指定的设备输出数据(隐含指定的 输出设备一般是指计算机屏幕);语句中的 星号“*”表示“表控格式输出”,即按照 计算机默认的格式进行数据的输出;输出项 可以有多个,每个输出项之间用逗号“,”分 隔;当语句中没有输出项时,命令将输出一 个空白行。
输入语句 使用READ语句来完成表控输入的语法形式 如下所示。 READ *[, 输入项,……] 在这种形式中,不能指定输入设备,只能由 系统隐含指定的设备上输入(系统隐含指定 的设备一般是指键盘);语句中的星号“*” 表示“表控输入”,即按照数据合法的格式 进行输入;输入项可以有多个,每个输出项 之间用逗号“,”分隔;当语句中没有输入项 时,系统将挂起程序的运行直到用户键入回 车符。
2.编写程序已知园半径分别为1、3、12时,对应的 园周长为多少? 示例4
C MAIN PROGEAM !注释下面为主程序 PROGRAM EX2 PRINT *,“R=”,1.0,“C=”,C(1.0) !显示半径周长 PRINT *,"R=",3.0,"C=",C(3.0) PRINT *,“R=”,12.0,“C=”,C(12.0) !未解释C END C SUBPROGRAM !下面为子程序 FUNCTION C(R) !C(R) 是一个函数名字 PI=3.1415926 C=2*PI*R RETURN END !编写了函数的内容
示范举例1。
2- 2 编程修改程序
FORTRAN 程序设计01
一, Fortran 简介 二,程序流程 三,循环结构 四,数据类型 五,数组 六,过程和模块 七,输入,输出,文件 八,复习,总结
Fortran是目前国际上广泛流行的一种高级语言, 适用于科学计算.Fortran是英文FORmula TRANslation的缩写,意为"公式翻译".它 是为科学,工程问题中的那些能够用数学公式 表达的问题而设计的语言,主要用于数值计算. 这种语言简单易学,因为可以像抄写数学教科 书里的公式一样书写数学公式,它比英文书写 的自然语言更接近数学语言.Fortran语言是 第一个真正推广的高级语言.
Fortran77 (I ~ N)规则; 以(I,j,k,m,l,n)字母开头的 变量为整型. 建议编程时使用声明语句,并在 程序中加入implicit non 语句, 屏蔽(I ~ N)规则;
asb exp sin cos Asin Acos Sqrt ……
asb(x) |x| 指数运算 exp(x) exp(x) 正弦函数 sin(x) sinx 余弦函数 cos(x) cosx 反正弦 Asin(x) arcsinx 反余弦 Acos(x) arccosx 开平方 Sqrt(x) x ………………
系统为每一个常量,变量分配一个存储单元,放它的 值.
6, 数据类型
整型:(数学上的整数集合) integer(n),属性列表,变量列表 例:integer (kind=4) i,t2,pop -2147483638 ~ 2147483637 例:integer (1):: k,m -128 ~127
实型(数学上的实数集合) real(n),属性列表,变量列表 单精度: real(4), real 双精度: real(8), double real(4),:: dx,dy real(8),:: d_p,y2
循环结构的Fortran程序设计
3 Fortran循环结构程序设计的其它问题
implicit none integer m,i,j read*,m j=sqrt(real(m)) do i=2,j if(mod(m,i).eq.0) exit end do if(i>>1)then print*,m,'是素数' else print*,m,'不是素数' end if End
三、do while循环举例
例1:输入一个整数,输出其位数。
分析:输入的整数存入变量m中,用变量n来统计m的位数,程序为:
Integer:: m,n=0 read*,m Do while (m>0) n=n+1 m=m/10 end do print*,‘n=’,n End 比如:129 ↙ n=3
(4)对于循环次数确定的循环问题也可以使用do while语句来实现,比如:求5!
integer:: m=1,n=1 do while (m<=5) n=n*m m=m+1 end do print*,n End
二、do while循环的执行过程
Do while循环的执行过程可示意为右图,说明如下:
分析:最大公约数在[1,min(m,n)]范围内,且同时能被m和n整除,因此利用do i=min(m,n),1搜寻,一旦mod(m,i)=0、mod(n,i)=0则此时的i就是最大公约数,并利用exit退出循环。然后利用最大公约数,求出最小公倍数。程序为:
If(条件)exit
表示条件为真执行exit终止循环,为假时exit不执行,将继续执行循环。
(2)循环变量与参数表达式数据类型不一致时,其处理方法与赋值语句相同,即先计算参数表达式、并把结果转换成循环变量类型,然后进行处理。比如,“do i=1.3,5.9,2.6”相当于“do i=1,5,2”
FORTRAN语言程序设计
n 是一个十进制数字(0~9)序列。
Kind值为:1、2、4、8之一。分别表示1、2、4、8个字节个数。
FORTRAN 90/95标准中整型常量的范围没有明确规定。
例如:122、0、-36、559_2
均为合法的整型常量
100.0、100,000、100 0、1002 均为非法的整型常量
5.6.2.2 实型常量
5.5 程序的书写格式 (1)固定格式:将一个语句行分为若干个区域,如下图所示
:
5.6 数据类型
5.6.1 基本概念 1.内部数据类型 FORTRAN语言将内部数据划分为以下类型: 整型 实型 算术型 数据类型 复型 逻辑型 字符型 2.种别 一个数据在内存中均占有一定字节个数的存储单元。上述每类数据都有 其不同的种别(即Kind)特性,即上述每类数据根据其种别特性(即 Kind值)的不同分别拥有不同字节个数的存储单元。 3.数据对象 1)常量:程序运行时,其值不能改变的量,称为常量。如:5,3等等。 2)变量:程序运行时,其值可以改变的量,如:变量a, a是一个存储单元
第四章 FORTRAN语言开发环境
详见教材:3.3 FORTRAN语言 开发环境
第五章 FORTRAN 语言基础知识
5.1 字符集
FORTRAN语言允许使用的字符集为:
fortran常用算法程序集
fortran常用算法程序集Fortran是一种广泛用于科学和工程计算的编程语言。
由于其强大的数值计算能力,Fortran在许多领域,如物理、数学、工程和生物信息学中,仍然被广泛使用。
在Fortran中,有许多常用的算法可以用来解决各种计算问题。
下面是一些常用的Fortran算法程序集的示例。
1.冒泡排序算法```fortranPROGRAMBubbleSortIMPLICITNONEINTEGER,DIMENSION(:),ALLOCATABLE::arrINTEGER::i,j,tempALLOCATE(arr(10))!分配数组空间!填充数组数据arr=[9,8,7,6,5,4,3,2,1,0]DOi=1,SIZE(arr)-1DOj=i+1,SIZE(arr)IF(arr(j)>arr(j-1))THEN!交换相邻元素temp=arr(j)arr(j)=arr(j-1)arr(j-1)=tempENDIFENDDOENDDOPRINT*,"排序后的数组:"PRINT*,arr(:)ENDPROGRAMBubbleSort```这个程序使用冒泡排序算法对一个整数数组进行排序。
冒泡排序是一种简单的排序算法,通过重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
2.二分查找算法```fortranPROGRAMBinarySearchIMPLICITNONEINTEGER::arr(10),low,high,found=0INTEGER::mid=0PRINT*,"请输入要查找的元素:"INPUT(INTEGER)::xlow=0high=SIZE(arr)-1DOWHILE(found==0)!直到找到元素或数组遍历完为止mid=(low+high)/2!计算中间位置IF(arr(mid)==x)THEN!如果中间元素等于要查找的元素,则找到found=1!设置found标志为1,表示找到元素ELSEIF(arr(mid)>x)THEN!如果中间元素大于要查找的元素,则在左半部分查找high=mid-1!将high指向中间元素的左边的位置ELSE!如果中间元素小于要查找的元素,则在右半部分查找low=mid+1!将low指向中间元素的右边的位置ENDIFENDDOIF(found==0)PRINT*,"元素未找到。
Fortran计算实例
do 20 i=1,(im+1)/2
d1(i)=u1(i)=0.d0 20
t1(i)=1.d0
do 30 i=(im+1)/2+1,im d1(i)=1.d-1 u1(i)=0.d0 设定初值
30
t1(I)=1.d0
tim=0.d0
dt=0.9d0*dx 999 continue do 40 i=1,im d (i)= d1 (i)
c
a
b
s
5. 编程及调试
a, b,c 系数
program diffusion
parameter(im=1001) implicit double precision(a-h,o-z) dimension x(im),bb(im) dimension b1(im) Dimension a(im),b(im),c(im),s(im) b0=1.67d-5 t0=1.d5 L0=1.d5 …… 设定常数 可将3个变量一起 放在一个2维数组
tim=tim+dt
write(*,*)tim,dt
如0.02, 0.04, 0.06, 0.08,……。即每 0.02时间间隔则将结果输出到数据文件。
主 体 部 分
888
if(tim在某些时刻)call output(tim,d1,u1,t1)
if(输出结果的次数等于tend/0.02)goto 888 goto 999 close(10) End Subroutine output(tim,d1,u1,t1) …..
u u 0 t x x u u T T u 0 t x x x T T u u ( 1)T 0 t x x
2维流体力学方程组,*号已略去
fortran排序函数
fortran排序函数Fortran是一种编程语言,它在科学计算和数值分析领域广泛应用。
在这篇文章中,我们将讨论如何使用Fortran编写排序函数。
排序是一种常见的操作,它可以对一组数据按照特定的顺序进行排列。
在计算机科学中,有许多不同的排序算法可供选择,例如冒泡排序、插入排序、选择排序、快速排序等。
在Fortran中,我们可以使用这些算法来实现排序函数。
让我们来看看冒泡排序算法在Fortran中的实现。
冒泡排序的基本思想是通过相邻元素之间的比较和交换来逐步将最大(或最小)的元素移动到正确的位置。
下面是一个简单的冒泡排序函数的示例:```subroutine bubble_sort(arr, n)integer, dimension(n) :: arrinteger :: i, j, tempdo i = 1, n-1do j = 1, n-iif (arr(j) > arr(j+1)) thentemp = arr(j)arr(j) = arr(j+1)arr(j+1) = tempend ifend doend doend subroutine```在这个函数中,我们使用了两个循环来遍历数组,并通过比较和交换操作来排序元素。
外部循环`i`控制了需要进行比较的轮数,而内部循环`j`用于比较相邻的元素,并进行交换。
接下来,让我们来看看另一种常见的排序算法——快速排序。
快速排序是一种基于分治思想的排序算法,通过选择一个基准元素,将数组划分为两个子数组,并对子数组进行递归排序来实现整个数组的排序。
下面是一个简单的快速排序函数的示例:```subroutine quick_sort(arr, left, right)integer, dimension(:) :: arrinteger :: left, right, i, j, pivot, tempif (left < right) thenpivot = arr((left+right)/2)i = leftj = rightdo while (i <= j)do while (arr(i) < pivot)i = i + 1end dodo while (arr(j) > pivot)j = j - 1end doif (i <= j) thentemp = arr(i)arr(i) = arr(j)arr(j) = tempi = i + 1j = j - 1end ifend docall quick_sort(arr, left, j) call quick_sort(arr, i, right) end ifend subroutine```在这个函数中,我们首先选择一个基准元素`pivot`,然后使用两个指针`i`和`j`分别从左右两侧开始遍历数组。
fortran常用算法程序集
Fortran常用算法程序集简介Fortran是一种面向科学和工程计算的编程语言,通常用于数值计算和数据分析。
它有着强大的数学计算能力和高性能,被广泛应用于科学计算、工程仿真、天气预报等领域。
本文将介绍一些常用的Fortran算法程序集,包括数值积分、矩阵运算、排序算法等。
数值积分数值积分是求解定积分的一种方法,用于计算曲线下面积、求解微分方程等。
Fortran提供了一些常用的数值积分算法,如梯形法则、辛普森法则等。
梯形法则梯形法则是数值积分中最简单的算法之一,基本思想是将曲线下面积近似为一系列梯形的和。
下面是使用Fortran编写的梯形法则算法示例:! 梯形法则real function trapezoidal_rule(f, a, b, n)real, external:: freal:: a, b, n, hreal:: x, suminteger:: ih = (b - a) / nsum= f(a) + f(b)do i =1, n-1x = a + i * hsum=sum+2* f(x)end dotrapezoidal_rule = (h/2) *sumend function trapezoidal_rule辛普森法则辛普森法则是一种更精确的数值积分算法,基于多项式插值的思想。
它将曲线分成若干小段,每段近似为一个二次函数,然后对每个二次函数进行积分。
下面是使用Fortran编写的辛普森法则算法示例:! 辛普森法则real function simpsons_rule(f, a, b, n)real, external:: freal:: a, b, n, hreal:: x, sum1, sum2integer:: ih = (b - a) / nsum1 = f(a) + f(b)sum2 =0do i =1, n-1, 2x = a + i * hsum2 = sum2 +4* f(x)end dodo i =2, n-2, 2x = a + i * hsum2 = sum2 +2* f(x)end dosimpsons_rule = (h/3) * (sum1 + sum2)end function simpsons_rule矩阵运算矩阵运算是科学计算中常用的一个重要环节,Fortran提供了丰富的矩阵运算库,包括矩阵乘法、矩阵转置、矩阵求逆等。
fortran常用算法的程序设计举例
b
a f (x)dx s1 s2
其中h c a 2
h { f (a) f (b) 4[ f (a h) f (a 3h)] 2 f (a 2h)}
3
7
如果将(a,b)分成四个小区间:
b f (x)dx h { f (a) f (b) 4[ f (a h) f (a 3h) f (a 5h)
stop
end if
10 continue
write(*,200) m 因有收敛问题,要 100 format(1x,'i=',i3,5x,'x1=',f15.7)
设最大循环次数。 200 format(1x,'computation has not',
$ 'converged after',i4,'iteration')
$ 200
read(*,*) a,b,n
求:
1
sin xdx
x=a
0
h=(b-a)/n
s=0.0
do 10 i=1,n
si=(sin(x+(i-1)*h)+
sin(x+i*h))*h/2.0
s=s+si
continue
write(*,100) a,b,n
write(*,200) s
format(1x,'a=',f10.3,3x,
6
3. Sinpson法
取a,b中点c—((a+b)/2,0),通过 f(a),f(b),f(c)三点可作:
b a
f1 ( x)dx
h[ 3
(完整word版)FORTRAN经典入门程序20例
对于FORTRA的初学者。
这些例子可作为小练习1.例题:计算工资问题。
每小时工资为RATE如果工作超过40小时,加班呢部分工资是正常时间工资的1.5倍。
C Payroll with overtimeprogram payrollreal rate, hours, payread (*,*) rate, hoursif (hours>40) thenpay=40*rate+(hours-40)*1.5*rateelsepay=hours*rateEND IFprint *, "rate=" , rateprint *, "hours=" , hoursprint *, "pay=" ,payend2•学生成绩问题。
大于80为A级。
大于60小于80为B级。
小于60为C级。
IF的嵌套。
注意空格可以看清楚else if ,e nd if,pri nt 的内容•PROGRAGRADESTUDENTREA0GRADEIF (GRADE .GE. 80) THENPRINT*,GRADE, "GRADE=>A"ELSEIF (GRADELT.60) THENPRINT*,GRADE"GRADE=>C"ELSEPRINT*,GRADE"GRADE=>B"END IFEND IFEND3. 三个数按从小到大排序。
PROGRA M AXMINREALA,B,C,TREA0A,B,CIF (A.GT.B) THENT=AA=BB=TELSEEND IFIF (B.GT.C) THENT=BB=CC=TELSEEND IFIF (A.GT.B) THENT=AA=BB=TEND IFPRINT*,A,B,CEND4. 运用EISE IF语句。
重做例子2PROGRAM2READ*,*) GRADEIF (GRADE .GE. 80.0) THENPRINT*, GRADE, "=>A"ELSE IF(GRADE .GE. 70.0) THENPRINT*, GRADE, "=>B"ELSE IF(GARDE .GE. 60.0) THENPRINT*, GRADE, "=>C"ELSEPRINT*, GARDE, "=>D"END IFEND3x 6,x 05. 计算y 2x 2x 8,x 0PROGRAEQUATIONREAD*,*) XIF (X .GE. 0.0) Y=3*X+6IF (X .LT. 0.0) Y=-X**2+2*X-8PRINT*, "X=" ,X, "Y=" ,YEND6. CONTINUED句。
程序设计基础-Fortran95课程设计
程序设计基础-Fortran95课程设计课程设计需求本次课程设计的目的是提高学生关于Fortran95程序设计方面的能力和技巧。
为了达到这个目的,课程设计需求如下:1.设计一个可以计算矩形面积和周长的程序。
2.设计一个可以计算圆形面积和周长的程序。
3.设计一个可以将输入的字符串反转的程序。
设计思路矩形面积和周长的程序我们需要设计一个可以计算矩形面积和周长的程序。
矩形的面积公式为:area=lengtℎ∗widtℎ,周长公式为:perimeter=2∗(lengtℎ+widtℎ)。
在Fortran95中,我们可以使用READ语句获取用户输入的length 和width,然后进行计算,最后使用WRITE语句输出结果。
以下是完整代码:PROGRAM rectangleIMPLICIT NONEREAL:: length, width, area, perimeterWRITE(*,*)'Please enter the length of the rectangle:'READ(*,*) lengthWRITE(*,*)'Please enter the width of the rectangle:'READ(*,*) widtharea = length * widthperimeter = 2.0* (length + width)WRITE(*,*)'The area of the rectangle is:', areaWRITE(*,*)'The perimeter of the rectangle is:', perimeter END PROGRAM rectangle圆形面积和周长的程序我们需要设计一个可以计算圆形面积和周长的程序。
圆的面积公式为:$area = \\pi * radius^2$,周长公式为:$circumference = 2* \\pi * radius$。
fortran常用算法程序集
fortran常用算法程序集
Fortran是一种高级编程语言,用于科学计算和数值分析。
下面是一些常见的Fortran算法程序集:
1. 插值算法:包括线性插值、拉格朗日插值和样条插值。
这些算法用于在给定一组已知数据点的情况下,估计在这些数据点之间的未知数据点的值。
2. 数值积分算法:例如,辛普森规则和龙格-库塔法(Runge-Kutta methods),用于计算函数的定积分。
3. 线性代数算法:例如求解线性方程组(高斯消元法),计算矩阵的特征值和特征向量。
4. 数值优化算法:例如牛顿法和梯度下降法,用于求解非线性优化问题。
5. 快速傅里叶变换(FFT):用于计算离散傅里叶变换(DFT)的高效算法,常用于信号处理和图像处理。
6. 数值微分和微分方程求解算法:例如欧拉法和龙格-库塔法,用于求解常微分方程。
7. 随机数生成算法:例如梅森旋转算法(Mersenne Twister)和伪随机数生成器。
8. 图论算法:例如最短路径算法(迪杰斯特拉算法和贝尔曼-福特算法)和最小生成树算法(普林斯顿算法)。
这只是一些Fortran中的常见算法,实际上还有许多其他算法可以使用Fortran实现。
这些程序集可在各种Fortran 编程参考资料和库中找到。
FORTRAN程序设计第二章
标识符的使用
(1)表示程序中的变量名、程序名、函数名和符号常 表示程序中的变量名、程序名、 量 (2)标识符中大小写是等价的 ) (3)标识符中的空格不起作用 ) (4)内部函数名、语句关键词等都可以用作标识符, )内部函数名、语句关键词等都可以用作标识符, 尽量不要用这些作为标识符 SIN=3.0 READ=10.5 (5)在给标识符起名时,应考虑所代表对象的含义 )在给标识符起名时,
FORTRAN常量 2.1 FORTRAN常量
常量:在程序运行过程中,其值不改变的量 直接常量 符号常量
直接常量: 直接常量:指数据本身就是一个常量 1. 整型常量(整型常数或整数) 包括正整数、负整数和0 除正负号外,其他符号一律不能出现在整 型常量中 10.0000, 3+2, 78*31, 1/3 (×) 1E-2
(2)指数形式 指数形式由数字部分 指数部分组成 数字部分和 组成。 指数形式由数字部分和指数部分组成。
± a.bE ± c或 ± a.be ± c
数字部分可以是不带小数点的整数, 数字部分可以是不带小数点的整数,也可以是带 可以是不带小数点的整数 小数点的实数。 小数点的实数。 注意:指数不能为小数; 注意:指数不能为小数;E左右两边的数字部分和 指数部分必须同时出现, 指数部分必须同时出现,指数部分不能单独用来代 表一个常数。指数部分不能省略。 表一个常数。指数部分不能省略。 例如:3E5.6、8.6E-3.7、E12、12.3*E8、1.02E均非法。 均非法。 例如:3E5.6、8.6E-3.7、E12、12.3*E8、1.02E均非法 +12.3E+08、12.3E8、0.91E-30、3E5、等合法。 +12.3E+08、12.3E8、0.91E-30、3E5、等合法。
fortran常用算法程序集
fortran常用算法程序集Fortran是一种高级编程语言,广泛应用于科学计算和数值分析领域。
它的强大之处在于它提供了丰富的算法库,使程序开发人员能够快速实现各种常见算法。
本文将介绍一些Fortran常用的算法程序集,帮助读者更好地理解和应用这些算法。
一、线性代数算法线性代数是科学计算和数值分析的基础,Fortran提供了许多用于求解线性方程组、矩阵分解和矩阵运算的算法。
其中一些常用的算法包括:1. 高斯消元法高斯消元法是一种求解线性方程组的方法,可以将线性方程组转化为上三角或下三角矩阵,并进一步求解。
Fortran提供了多种高斯消元法的实现,如LU分解法和托伯利兹矩阵法。
2. 特征值与特征向量计算特征值与特征向量计算是矩阵分解的一种重要问题。
Fortran提供了多种算法来计算矩阵的特征值与特征向量,如幂法、反幂法、QR算法等。
3. 矩阵乘法和矩阵求逆矩阵乘法和矩阵求逆是线性代数中常见的操作。
Fortran提供了多种高效的算法来实现矩阵乘法和矩阵求逆,如Strassen算法、LU分解法等。
二、数值计算算法数值计算算法广泛应用于科学计算、数值模拟和数据分析等领域。
Fortran提供了多种数值计算算法的实现,如数值积分、函数逼近、插值算法等。
以下是一些常用的数值计算算法:1. 数值积分数值积分可以用来对函数进行近似求积,求解曲线下面积或计算定积分。
Fortran提供了多种数值积分方法的实现,如梯形法则、辛普森法则和龙贝格方法等。
2. 函数逼近函数逼近是将多项式或其他数学函数与给定函数进行拟合,用于简化函数计算或数据分析。
Fortran提供了多种函数逼近的方法,如最小二乘逼近、最大误差逼近等。
3. 插值算法插值算法用于根据已知的离散数据点估计未知点的值。
Fortran提供了多种插值算法的实现,如拉格朗日插值法、牛顿插值法和样条插值法等。
三、优化算法优化算法用于求解最优化问题,如寻找函数最大值或最小值的点。
fortran除法
fortran除法Fortran是一种程序设计语言,它在科学计算领域有着广泛的应用。
本文将介绍Fortran除法操作的相关知识,包括除法运算符、数据类型、除数为零的处理以及实际应用案例。
一、Fortran除法运算符Fortran中用于除法运算的运算符是“/”。
它可以用于两个数值变量之间的相除。
例如,若要将变量A除以变量B并将结果存储在变量C中,可以使用以下语句:C = A / B在Fortran中,除法运算符可以应用于整数类型和实数类型的变量。
对于整数类型,除法运算符将执行整数除法,即结果将被截断为整数。
而对于实数类型,除法运算符将执行浮点数除法,即结果保留小数部分。
二、Fortran数据类型在进行除法运算时,需要了解Fortran中的数据类型。
Fortran提供了多种数据类型,包括整数类型(INTEGER)、实数类型(REAL)、双精度实数类型(DOUBLE PRECISION)等。
在进行除法运算时,需要注意操作数的数据类型以及结果的数据类型。
若要进行整数除法,需要使用整数类型的变量作为操作数,并将结果存储在整数类型的变量中。
若要进行浮点数除法,可以使用实数类型或双精度实数类型的变量作为操作数,并将结果存储在相应的实数类型或双精度实数类型的变量中。
以下是一个示例代码,展示了如何定义不同数据类型的变量并进行除法运算:```fortranINTEGER :: a, b, cREAL :: d, e, fa = 10b = 3c = a / bd = 10.0e = 3.0f = d / e```三、处理除数为零的情况在进行除法运算时,需要注意除数为零的情况。
若除数为零,除法操作将会导致错误或异常情况。
为了避免程序异常终止,可以在进行除法运算之前添加判断条件,检查除数是否为零。
若除数为零,可以采取相应的处理措施,例如输出错误信息或进行其他操作。
以下是一个示例代码,展示了如何处理除数为零的情况:```fortranINTEGER :: a, b, ca = 10b = 0IF (b /= 0) THENc = a / bELSEWRITE(*,*) "除数不能为零"END IF```四、实际应用案例Fortran除法在实际应用中有着广泛的应用。
FORTRAN 程序设计03
输出结果:1 2 3 4 6 7 8 9
6,case 块 (用于有多个分支情况)
----------------select case (条件) case(选择条件1) block1 case(选择条件2) case( 2) block2 ----------------end select
循环次数=INT((终值-初值+步长)/步长) 计算循环次数时应注意类型转换的影响. 如:do i=1.5,3.6,1.2 INT((3.6-1.5+1.2)/1.2)=2 do i=1,3,1 循环3次 循环执行过程: ⑴计算初值,终值,步长,转换成整型 ⑵将初值赋给循环变量 ⑶计算循环次数 ⑷检查循环次数,若≤0 停止循环执行循环终 端 下面部分,若〉0 执行循环体.
小于 小于等于 等于 不等于 大于 大于等于
b if 语句 if (condition) statement 如: ----------------if(j<k) s=n+3 -----------------C if 块 (用于完成更为复杂控制条 件的比较运算)
一般形式: if condition then block 1 else block 2 end if 例题:成绩分为a,b,c,d,e 5等,分别同几 个等级人数.
print *,((a(i,j),i=1,3),j=1,3) a(1,1) , a(2,1), a(3,1) a(1,2), a(2,2), a(3,2), 1 a(1,3), a(2,3), a(3,3)
4, 选择结构 a 关系运算: .LT. < .LE. <= .EQ. == .NE. /= .GT. > .GE. >=
fortran除法
fortran除法(原创版)目录1.Fortran 语言简介2.Fortran 中的除法运算3.Fortran 除法的应用实例4.总结正文1.Fortran 语言简介Fortran(Formula Translation)是一种高级编程语言,主要用于数值计算和科学计算领域。
自 1957 年问世以来,Fortran 语言已经发展成为一个庞大的编程体系,广泛应用于数学、物理、化学、工程等领域的科学计算和数据处理。
2.Fortran 中的除法运算在 Fortran 中,除法运算使用“/”符号表示。
除法运算的结果是一个浮点数。
需要注意的是,Fortran 中的除法运算不支持整数除法,如果需要进行整数除法,需要通过取整函数等方法进行处理。
3.Fortran 除法的应用实例假设有一个简单的计算任务,需要计算一个数组中每个元素的平方根。
可以使用 Fortran 中的除法运算来实现这个功能。
以下是一个简单的示例:```fortranprogram square_rootimplicit noneinteger :: n = 5real :: x(n) = (/ 1, 2, 3, 4, 5 /)real :: y(n)do i = 1, ny(i) = sqrt(x(i))end dodo i = 1, nprint *, "x(", i, ") = ", x(i), " y(", i, ") = ", y(i) end doend program square_root```在上面的示例中,我们定义了一个数组 x,并用 Fortran 中的除法运算为数组 x 的每个元素赋值。
然后,我们通过一个循环计算数组 x 中每个元素的平方根,并将结果存储在数组 y 中。
最后,我们打印出数组 x 和数组 y 的对应元素。
4.总结Fortran 作为一种适用于科学计算的高级编程语言,提供了丰富的数学运算功能,包括除法运算。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4
2. 梯形法
$ 10
第i个小梯形面积 :
100 f (a ih ) f (a (i 1)h) $ si h 2 200
1 read(*,*) a,b,n 求 : sin xdx 0 x=a h=(b-a)/n s=0.0 do 10 i=1,n si=(sin(x+(i-1)*h)+ sin(x+i*h))*h/2.0 s=s+si continue write(*,100) a,b,n write(*,200) s format(1x,'a=',f10.3,3x, 'b=',f10.3,3x,'n=',i4) format(1x,'s=',f15.8) end
ca 其中h a 2 h { f (a) f (b) 4[ f (a h) f (a 3h)] 2 f (a 2h)} 3
b
f ( x)dx s1 s2
7
如果将(a,b)分成四个小区间:
h a f ( x)dx 3 { f (a) f (b) 4[ f (a h) f (a 3h) f (a 5h) f (a 7h)] 2[ f (a 2h) f (a 4h) f (a 6h)} ba 其中h 2 4
17
五、计算机模拟
计算机模拟(Computer Simulation),又称 “仿真”:用计算机模仿实物系统进行测试,从 测试的结果获得期望的资料。
根据模拟对象的不同特点,可分为: 确定性模拟(Deterministic Mode); 随机性模拟(Stochastic Mode) 。
18
小球以10m/s沿 45 °斜抛,落地反 弹方向同前,速度 减小 10% ,求前三 次周期轨迹。
其他几种 程序变形
$ 10
. . . x2=a . . . do 10 i=1,n x1=x2 x2=x2+h si=(sin(x1)+ sin(x2))*h/2.0 s=s+si continue . . . 10
. . . f1=sin(a) . . . do 10 i=1,n f2=sin(a+i*h) si=(f1+f2)*h/2.0 s=s+si f1=f2 continue . . .
10
x3 2 x 2 2 x 2 0
x ( x3 2 x 2 2) 2
10
因有收敛问题,要 设最大循环次数。 100 200 $
有的g(x)是收敛的,而有的g(x)是不收敛的。 同一个g(x),对某些x0是收敛的,对有的x0则是不 收敛的。 如果g(x)具有一阶导数连续,且对于所有的x, 若|g’(x)|≤q<1(q为一个定数),那么x=g(x)对于任 意的x0均收敛,且q愈小,收敛速度愈快。如果不 满足对所有的x存在|g’(x)|≤q<1 ,则可能对有的x0 收敛,对有的x0不收敛。 因此要恰当的选择g(x)形式和初值x0。
3
1. 矩形法
10
第i个小矩形面积: si h f (a (i 1)h)
100 $ 200
1 read(*,*) a,b,n x 求 : e dx x=a 0 h=(b-a)/n f0=exp(x) s=0.0 do 10 i=1,n si=f0*h s=s+si x=x+h f0=exp(x) continue write(*,100) a,b,n write(*,200) s format(1x,'a=',f10.3,3x,'b=', f10.3,3x,'n=',i4) format(1x,'s=',f15.8) end
11
2. 牛顿迭代法
求f ( x) x3 2 x 2 4 x 1=0在x 0附近的一个实根 f ( x) 3x 2 4 x 4
10
f ( x1 )
f ( x1 ) x1 x2 f ( xn ) f ( xn )
xn 1 xn
100 $
read(*,*) x n=1 x1=x f=x1**3-2.0*x1**2+4.0*x1+1.0 f1=3.0*x1**2-4.0*x1+4.0 x=x1-f/f1 write(*,100) n,x1,x n=n+1 if(abs(x-x1).gt.1e-6) goto 10 format(1x,'n=',i3,3x,'x1=',f15.7, 3x,'x=',f15.7) end
5
10
. . . f0=sin(a) h=(b-a)/n s=f0 do 10 i=1,n f=sin(a+i*h) s=s+2.0*f continue s=(s-sin(b))*h/2.0 . . .
b
ห้องสมุดไป่ตู้
a
f ( x)dx
h f0 2( f1 f 2 f n ) f n ) 2
15
三、求函数极值
求 : f ( x) x 2 4x 5的极小值
Fibonacci搜索算法,或0.618法,或黄金值搜索法。
16
10
real low,high,x1,x2 read(*,*) low,high write(*,200) x1=low+0.618*(high-low) x2=high-0.618*(high-low) if(high-low.gt.1e-4) then f1=x1*x1-4.0*x1+5.0 f2=x2*x2-4.0*x2+5.0 write(*,202) x1,f1,x2,f2 if(f1.gt.f2) then high=x1 x1=x2 x2=high-0.618*(high-low) else low=x2 x2=x1 x1=low+0.618*(high-low) end if goto 10 end if
12
3. 二分法
5
10
用二分法求 f ( x) x 3 6 x 1 0 在x 2附近的一个实根
$
100
read(*,*) x1,x2 f1=x1**3-6.0*x1-1.0 f2=x2**3-6.0*x2-1.0 if(sign(f1,f2).eq.f1) goto 5 x=(x1+x2)/2.0 f=x**3-6.0*x-1.0 if(sign(f,f1).eq.f) then x1=x f1=f else x2=x f2=f end if if((abs(x1-x2).gt.1e-5).and. abs(f).gt.1e-6) goto 10 if(abs(f).gt.1e-6) x=(x1+x2)/2.0 write(*,100) x format(1x,'x=',f15.7) end
b
如果将(a,b)分成n个小区间:
h f ( x ) dx { f (a) f (b) 4[ f (a h) f (a 3h) f (a (2n 1)h)] a 3 2[ f (a 2h) f (a 4h) f (a (2n 2)h)}
13
4. 弦截法(割线法)
5
20
$
x2 x1 x x2 f ( x2 ) f ( x2 ) f ( x1 )
x3 2 x 2 7 x 4 0
100
read(*,*) x1,x2 f1=x1**3-2.0*x1**2+7.0*x1+4.0 f2=x2**3-2.0*x2**2+7.0*x2+4.0 if(sign(f1,f2).eq.f1) goto 5 f=1.0 if((abs(x1-x2).gt.1e-5).and. abs(f).gt.1e-6) then x=x2-(x2-x1)/(f2-f1)*f2 f=x**3-2.0*x**2+7.0*x+4.0 if(sign(f,f1).eq.f) then x1=x f1=f else x2=x f2=f end if goto 20 end if if(abs(f).gt.1e-6) x=(x1+x2)/2.0 write(*,100) x format(1x,'x=',f15.7) end 14
19
5 $
logical flag parameter (g=9.8) read(*,*) v0,d t=0.0 x0=0.0 v=v0*cos(3.1415926/4.0) do 10 i=1,3 dt=d flag=.true. x=v*t+x0 y=v*t-0.5*g*t**2 if(flag) then if(y.ge.0.0) then if(dt.ge.d) write(*,100) t,x,y t=t+dt x=v*t+x0 y=v*t-0.5*g*t**2 else
以上方法都是近似求根,得到不是准确值而是近 似值。但只要给定的误差足够小,就可以认为它们之 间足够近似。 事实上,只有少数的方程才能用解析的方法求出 准确的根值。 计算机可以解任何有实根的一元方程,它采用的 基本方法就是迭代,经过多次迭代,使近似根逐渐趋 近于真实根。迭代可以用循环实现,正好充分发挥计 算机快速运算的特点。
6
3. Sinpson法 取a,b中点c—((a+b)/2,0),通过 f(a),f(b),f(c)三点可作唯一一条抛物 线f1(x)。
根据抛物线定积分求值公式,有:
h a f1 ( x)dx 3 [ f (a) 4 f (c) f (b)] ba 其中h 2