- 1、本文档共27页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6Fortran的数据结构讲述
1
第八章 常用算法的程序设计举例
第一章 算法
第二章 计算机和计算机程序
第四章 逻辑运算和选择结构
第五章 循环结构的实现
第六章 Fortran的数据结构
第七章 数据的输入、输出
第三章 Fortran语言程序设计初步
2
一、程序中的数据结构
程序处理的对象是数据
3
在计算机语言中,用数据类型来表示不同的数据结构。高级语言一般有以下三类数据结构:基本类型、构造类型和指针类型。
基本类型(简单类型):整型、实型、双精度型、复型、
逻辑型、字符型等。
构造类型:数组、记录、文件、集合等。
指针类型:链表、队、栈、树、图等。
FORTRAN77提供基本类型、构造类型。
算法+数据结构=程序
4
二、双精度类型数据
双精度数在计算机系统中以两倍于实型的字节数来存储,它提供的有效数字比实型数据多一倍以上。
双精度数也是近似的表示一个数,只是它的精度更高。在同一个系统中,它与实型数据的表数范围相同。
双精度常数要以指数形式表示,并以d代替e。
1.1e2
1.1d2
0.0
0.0d0
1.0
1.0d0
双精度型数据,要先定义后使用。
double precision amount, income
implicit double precision (r, x-z)
real*8 imax, volt
real(8) imax, volt
real (kind=8) imax, volt !Fortan 90 添加
5
求: 前200项乘积。
double precision i,ai,y
y=1d0
i=1d0
10 if(i.le.100d0) then
ai=4.0*i*i/(4.0*i*i-1)
y=y*ai
i=i+1
goto 10
end if
write(*,*) y=,y
end
6
三、复型数据
复型数据分实部虚部,使用8个字节来存放,必
须先定义后使用。
complex pose, flux
implicit complex (r, x-z)
complex *8 pose, flux !Fortran77 传统
complex (8) pose, flux !Fortran77 传统
complex (kind=8) pose, flux !Fortran90添加
复数的实部和虚部两部分也是用实数来保存,所以复数也可以分为单精度和双精度两种类型。
7
复型常数表示为:
1+2.5i
(1.0, 2.5)
-5.4i
(0.0, -5.4)
7.8
(7.8, 0.0)
如果实部或虚部是表达式,则需通过cmplx函数转
换成复型数。
complex cordxy, trans
trans=(3.0, 6.5)
cordxy=cmplx(3.0*x, 6.5*y)
cmplx(3.0)则
转成(3.0, 0.0)
8
complex x1,x2
read(*,*) a,b,c
d=b*b-4.0*a*c
part1=-b/(2.0*a)
part2=sqrt(abs(d))/(2.0*a)
if(d.ge.0.0) then
x1=cmplx(part1+part2, 0.0)
x2=cmplx(part1-part2, 0.0)
else
x1=cmplx(part1,part2)
x2=cmplx(part1,-part2)
end if
write(*,*) x1=,x1
write(*,*) x2=,x2
end
求一元二次方程Ax2+Bx+C=0的根
9
已知交流电路:U=220v, r0=10Ω, L0=10-3 H, r1=100 Ω,
C1=100μF, r2=50 Ω, L2=10-2 H, C2=200 μF。
求:(1)等效电阻Z;(2)电流I, I1, I2
10
implicit real(l)
implicit complex(u,i,z)
parameter (omega=314.1592)
u=(220.0,0.0)
write(*,*) enter r0,l0,r1,c1,r2,l2,c2
read(*,*) r0,l0,r1,c1,r2,l2,c2
z0=cmplx(r0,omega*l0)
z1=cmplx(r1,-1.0/(
文档评论(0)