Fortran语言教程专业知识讲座_第1页
Fortran语言教程专业知识讲座_第2页
Fortran语言教程专业知识讲座_第3页
Fortran语言教程专业知识讲座_第4页
Fortran语言教程专业知识讲座_第5页
已阅读5页,还剩382页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Fortran语言

(Fortran77构造化程序设计)一般高校计算机基础教学课程第1页2023/10/102

说明第一章算法(略)第二章计算机和计算机程序(略)第2页2023/10/103第三章

Fortran语言程序设计初步

第3页2023/10/1043.1Fortran语言发展概况

FORmulaTRANslator公式翻译器

Fortran语言是一种适合于科学和工程计算问题程序设计语言;也是计算机高级语言发展史上使用最早一种程序设计语言。第4页2023/10/1053.1Fortran语言发展概况

Fortran语言发展过程:1951年由约翰·贝克斯等人开始研究Fortran语言;1957年第一种Fortran程序在IBM704机上运行;1958和1962年先后推出FortranⅡ和FortranⅣ;1966和1978年先后颁布Fortran66和Fortran77;1991年颁布了Fortran90。目前已有了Fortran95,Fortran2023第5页2023/10/106Fortran语言特性Fortran语言最大特性是接近数学公式自然描述,在计算机里具有很高执行效率。易学,语法严谨。能够直接对矩阵和复数进行运算。自诞生以来广泛地应用于数值计算领域,积累了大量高效而可靠源程序。很多专用大型数值运算计算机针对Fortran做了优化。广泛地应用于并行计算和高性能计算领域。Fortran90,Fortran95,Fortran2023相继推出使Fortran语言具有了当代高级编程语言某些特性。第6页2023/10/1073.2简单Fortran程序分析

例1:求一元二次方程x2+3x-5.6=0根,并打印成果。利用公式:(这里,a=1,b=3,c=-5.6)第7页2023/10/1083.2简单Fortran程序分析编程如下:ctherootsofthequadraticequation a=1.0 b=3.0 c=-5.6 x1=(-b+sqrt(b*b-4.0*a*c))/(2.0*a) x2=(-b-sqrt(b*b-4.0*a*c))/(2.0*a)write(*,100)x1,x2100format(1x,'x1=',f6.2,'x2=',f6.2) end 第8页2023/10/1093.2简单Fortran程序分析执行成果:x1=1.30x2=-4.30

例2:试求3!,6!,9!值。编程如下:第9页2023/10/10103.2简单Fortran程序分析主程序:子程序:

cmainprogramcsubprogramj=k(3)functionk(n) l=k(6)k=1m=k(9)i=2 write(*,*)j,l,m5if(i.le.n)thenend k=k*i i=i+1 执行成果:goto56720362880endifreturn end第10页2023/10/10113.2简单Fortran程序分析Fortran程序基本构造:⑴一种Fortran源程序由一种或多种程序单位组成,每个程序单位以“end”语句结束。⑵每个程序单位包括若干行语句行(执行语句和非执行语句行)非语句行(注释行)⑶语句前可不设标号,也可根据需要设标号。⑷各类语句在程序单位中位置有一定规则。⑸程序必须按要求格式书写。第11页2023/10/10123.3Fortran源程序书写格式Fortran77源程序必须按下列格式书写:

⑴每行只能在80列内书写,并把80列分为4个区。

⑵1~5列:标号区(1~5位无符号整数;第1列为“*”或“c”时,为注释行)

⑶第6列:续行标志区(非空格或非零字符;最多19个续行)

⑷7~72列:语句区(书写语句;一行只能写一条语句)

⑸73~80列:语句注释区(一般作编号注释)第12页2023/10/10133.4Fortran程序编辑与运行FortranPowerStation4.0集成开发环境简介第13页2023/10/10143.4Fortran程序编辑与运行一、FortranPowerStation4.0启动选“开始”→“程序”→“FortranPowerStation4.0”→“MicrosoftDeveloperStudio”。二、创建项目工作间选“File”→“New”→“ProjectWorkspace”→“ConsoleApplication”,并输入项目工作间名称(如:aaa)和寄存项目工作间位置或途径(如:c:\for\)→Create。第14页2023/10/10153.4Fortran程序编辑与运行三、给项目工作间添加和编辑文献打开指定项目工作间→选“Insert”→“FileintoProject”→输入要添加文献名(如:st01.for)→“Add”。然后按Fortran程序书写规则编辑程序。四、编译项目工作间中文献打开指定文献→选“Build”→“Compilest01.for”。五、连编项目文献选“Build”→“Buildaaa.exe”。六、运行项目文献选“Build”→“Executeaaa.exe”。(显示程序执行成果)第15页2023/10/10163.4Fortran程序编辑与运行注:若Fortran程序是由一种主程序文献和若干个子程序文献组成,则应将各文献添加到同一项目工作间,分别进行编译,然后连编和运行项目文献。七、打开项目文献选“File”→“Open”→在打开对话框文献类型下拉列表中选“ProjectWorkspace(*.mdp)”→然后选项目工作间文献夹中项目文献。第16页2023/10/10173.5常量常量——在程序执行期间其值固定不变量。Fortran处理六种类型常量:⑴整型常量(Integer)⑵实型常量(Real)⑶双精度常量(Doubleprecision)⑷复型常量(Complex)⑸逻辑型常量(Logical)⑹字符型常量(Character)第17页2023/10/10183.5常量3.5.1整型常量包括正、负整数和零。

例:5,-13,0,…

说明:①在(16位)微机中,整数取值范围为:

-215~215-1(-32768~32767)②在(32位)微机中,整数取值范围为:

-231~231-1(-2147483648~2147483647)第18页2023/10/10193.5常量3.5.2实型常量(有二种表达形式)⒈小数形式例:15.8,-21.05,14.0,14.,.17,0.0,…⒉指数形式(一般表达较大或较小数)例:100000000→1.0E+80.0000125→1.25E-05

数字部分

指数部分第19页2023/10/10203.5常量说明:⑴一种数值用指数形式表达时有两种体现方式:①一种基本实数背面跟指数部分。例:0.876→8.76E-1-2589.4→-2.5894E+3②一种整数背面跟指数部分。例:0.876→876E-3-2589.4→-25894E-1第20页2023/10/10213.5常量⑵同一种数值可用不一样指数形式表达。例:0.876→8.76E-1→87.6E-2→876E-3⑶计算机在输出时,按标准化指数形式输出。例:0.28→2.800000E-01-59.58E+12→-5.958000E+13

即数字部分大于1,且小数点前只有一位非零数字指数输出形式。⑷在微机中,一般用四个字节寄存一种实数,其取值范围为:10-75~1075。超出此范围时为“溢出”错误。第21页2023/10/10223.5常量⑸下列形式为不合法指数形式:①单独小数点和单独指数部分。例:.E5,E10×②指数部分只能是整数,不能带小数点。例:8E0.5,12.3E1.5×第22页2023/10/10233.6变量变量——在程序执行期间其值能够变化量。3.6.1变量概念

Fortran为每一种变量分派一种对应存放单元;每个变量在每个时刻只能有一种确定值。例:x=4.5xx=8.0x注:在程序中用到变量都必须要有确定值。4.58.0第23页2023/10/10243.6变量3.6.2变量名变量名——标识一种变量所用名字。命名规则:变量名第一种字符必须是字母;在第一种字符后可跟1~5个字母或数字。例:x,m1,total,k123,…

第24页2023/10/10253.6变量注意几点:⑴变量名不辨别大小写字母。例:TOTAL,Total,total代表同一变量⑵变量名中空格不起作用。例:abc,abc,abc,abc代表同一变量⑶变量名尽可能做到“见名知义”

AVER、SUM、Imax⑷允许变量名与语言中具有特定含义字(“保存字”)同名。例:sin,read,open,end,…提议不要使用fortran中具有特定含义字作变量名第25页2023/10/10263.6变量3.6.3变量类型

Fortran能处理多种类型变量。不一样类型变量用来寄存不一样类型数据。变量类型说明(三种方式)⒈隐含说明即以I、j、k、l、m、n开头变量为整型变量,以其他字母开头变量为实型变量。(“I~N规则”)例:imax,m5,number,…

为整型变量

v,h2,aver,…

为实型变量第26页2023/10/10273.6变量⒉显式说明即用类型说明语句指定变量类型。如:Integer——说明变量为整型变量Real——说明变量为实型变量Doubleprecision——说明变量为双精度变量Complex——说明变量为复型变量Logical——说明变量为逻辑型变量Character——说明变量为字符型变量第27页2023/10/10283.6变量如:

Integerabc,xyzrealimax,k3logicala1,kpz⒊用implicit语句说明即说明用某一字母开头变量为指定类型。例:implicitinteger(a,b),real(k)implicitinteger(x-z)第28页2023/10/10293.6变量三种类型说明优先级:高类型说明语句(显式说明)

implicit语句说明低

“I~N规则”第29页2023/10/10303.7Fortran内部函数

在编制Fortran程序时,经常要用到某些基本数学函数,如三角函数、指数函数、对数函数等。为方便顾客,Fortran编译系统已提供了这些函数计算程序,需要时即可调用。

Fortran内部函数调用格式:函数名(自变量)第30页2023/10/10313.7Fortran内部函数如:sin(90*3.14159/180)→1.0sqrt(9.0)→3.0abs(-5.6)→5.6int(6.75)→6exp(3.0)→20.085540Fortran77所有内部函数见附录Ⅵ第31页2023/10/10323.7Fortran内部函数注意几点:⑴函数自变量(参数)必须用括号括起来。

例:sinx+cosx→sin(x)+cos(x)⑵函数自变量能够是常量、变量或体现式。

例:exp(3.0)sin(x+cos(x))⑶有些函数类型是由自变量类型确定。

例:mod(8.0,3.0)→2.0mod(8,3)→2⑷三角函数角度单位是“弧度”而不是“度”。⑸函数名分为“通用名”和“专用名”

内部函数名一般用“通用名”。第32页2023/10/10333.8Fortran算术体现式Fortran77提供了四种体现式:算术体现式关系体现式逻辑体现式字符体现式

算术体现式——将各运算元素(常量、变量、函数和数组等)用算术运算符连接起来一种有值式子。第33页2023/10/10343.8Fortran算术体现式一、算术运算符及其优先级⒈算术运算符(五种)加(+)减(-)乘(*)除(/)乘方(**)⒉算术运算符优先级括号→函数→乘方→乘、除→加、减注:同级运算“先左后右”,连续乘方时“先右后左”。第34页2023/10/10353.8Fortran算术体现式例:3+5-6.0*8.5/4**2+sin(x)→3+5-6.0×8.5÷42+sinxx**y**z、x**(y**z)→xyz(x**y)**z

→(xy)z有了算术体现式概念之后,我们就能够将:

数学运算式→Fortran算术体现式第35页2023/10/10363.8Fortran算术体现式二、算术体现式书写规则⑴体现式中各运算元素之间必须用运算符分隔。

例:xyz→x*y*z2(x+y)→2*(x+y)⑵作任何运算体现式只能写在一行。例:

→(a+b)/(c+d)a+b/c+d×第36页2023/10/10373.8Fortran算术体现式⑶两个运算符不能紧邻。

例:

→a/(-b)→-a/b→a/-b⑷体现式一律用小括号。例:

a[x+b(y+c)]→a*(x+b*(y+c))第37页2023/10/10383.8Fortran算术体现式三、体现式求值中类型问题⑴同类型量运算成果,仍为原类型。

例:4*5=20,4.0*5.0=20.06.0/4.0=1.5,6/4=1(≠1.5)⑵不一样类型量运算时,先将低级类型(整型)转换为高级类型(实型),然后再按同类型量进行运算。

例:2.5*4=10.0(≠10)

2.0**3=2.0*2.0*2.0=8.0(属同类量运算)第38页2023/10/10393.8Fortran算术体现式四、运算中误差问题⑴整数量运算没有误差⑵实型量由于有效位数限制,运算时会出现误差

例1:(1.0/3.0)*3.0=0.9999999(≠1.0)

∵1.0/3.0=0.3333333

例2:X=1E30Y=-1E30Z=1.0

(X+Y)+Z=?X+(Y+Z)=?第39页2023/10/10403.9赋值语句Fortran提供三类赋值语句:

算术赋值语句逻辑赋值语句字符赋值语句一、算术赋值语句一般格式

V=e

功能:把赋值号右边体现式值,赋给赋值号左边变量或数组元素。

例:

S=3.14159*r**2第40页2023/10/10413.9赋值语句二、算术赋值语句中类型转换问题⑴赋值号两边类型一致时,直接赋值。

例:k=355⑵赋值号两边类型不一致时,先计算,再转换,最后赋值。

例:y1=6*2(y1值为12.0)

Imax=3.6*2(imax值为7(7.2→7))第41页2023/10/10423.9赋值语句注意几点:⑴赋值号左边只能是变量或数组元素,不能为带运算符体现式。

例:3*a=6*x+sin(x)×⑵一种赋值语句只能给一种变量或数组元素赋值。

例:a=b=c=d=3.5×⑶一种赋值语句执行后,赋值号左边变量原值被右边体现式值取代。

例:x=1.0x=x+1.0(x值为2.0)第42页2023/10/10433.10简单输出语句顾客编制程序必须要有输出语句,把成果显示或打印出来。

Fortran提供了三种输出方式:①表控格式输出(标准或固定格式输出)②指定格式输出③无格式输出(二进制形式,适应磁盘文献)一、表控格式输出

按Fortran编译系统隐含要求格式输出。(即系统根据输出数据不一样类型,自动给出对应输出格式。)第43页2023/10/10443.10简单输出语句二、表控格式输出语句一般格式:

print﹡,〈输出表列〉write(﹡,﹡)〈输出表列〉

例1:print﹡,56.8,125

或write(﹡,﹡)56.8,125

例2:print﹡,a,b,c

或write(﹡,﹡)a,b,c第44页2023/10/10453.10简单输出语句例3:x=12.5 y=90.5z=x+yprint*,x,yprint*,'z=',zend

运行成果:

12.50000090.500000Z=103.000000第45页2023/10/10463.10简单输出语句⒈整数表控格式输出要求:每个整数占12列,数据打印在右端,左补空格。例:print*,123,-1128

输出成果:

︺︺︺︺︺︺︺︺123︺︺︺︺︺︺︺-1128第46页2023/10/10473.10简单输出语句⒉实数表控格式输出要求:每个实数占16列,数据打印在右端,左补空格。

例:print*,15.4,-321.45

输出成果:

︺︺︺︺︺︺15.400000︺︺︺︺︺-321.450000第47页2023/10/10483.10简单输出语句当实数值绝对值≥107或<1时,按标准指数形式输出。

例:print*,-10000000.,0.98

输出成果:

︺︺-1.000000E+07︺︺︺︺9.800000E-01第48页2023/10/10493.11简单输入语句Fortran提供了三种输入方式:①表控格式输入(自由格式输入)②指定格式输入③无格式输入一、表控格式输入表控格式输入——根据变量数据类型输入对应数据形式,数据间以逗号或空格分隔输入方式。第49页2023/10/10503.11简单输入语句二、表控格式输入语句一般格式:

read﹡,〈输入表列〉read(﹡,﹡)〈输入表列〉例1:read﹡,a,b(若a=14.7,b=30.0)键盘输入:14.7,30.0↙第50页2023/10/10513.11简单输入语句例2:read﹡,x,k(若x=4.5,k=200)键盘输入:4.5,200↙例3:read﹡,x,y,z(若x=1.5,y=2.5,z=3.5)

read﹡,i,j(若i=5,j=10)键盘输入:1.5,2.5,3.5↙5,10↙第51页2023/10/10523.11简单输入语句注意几点:⑴输入数据个数不得少于read语句中变量个数,但多出数据也不起作用。例:read﹡,x,y,z(若x=1.5,y=2.5,z=3.5)键盘输入:①1.5,2.5,3.5↙②1.5,2.5,3.5,5.2,6.0↙(最后两个数被忽视)③1.5,2.5↙(计算机将等候顾客继续输入数据)第52页2023/10/10533.11简单输入语句注意几点:⑵一种read语句能够分多行输入,但每一种read语句必须从新一行输入。例:read﹡,x,y,z(若x=1.5,y=2.5,z=3.5)

read﹡,i,j(若i=5,j=10)键盘输入:1.5↙2.5↙3.5↙5,10↙

若键盘输入:1.5,2.5,3.5,5,10↙(错)第53页2023/10/10543.11简单输入语句⑶在输入数据时若出现“/”,则终止对此read语句输入。例:read﹡,x,y,z

键盘输入:1.5,2.5/↙(变量z值为原值或为零。)第54页2023/10/10553.12参数语句(parameter语句)一、parameter语句功能为常量命名,即用一种符号代表一种常量。二、parameter语句一般形式

Parameter(p1=c1[,p2=c2,…,pn=cn])

其中:pn——符号常量;cn——常量。

第55页2023/10/10563.12参数语句(parameter语句)例:求半径为0.5m圆面积和圆周长。编程如下:

parameter(r=0.5,pi=3.14159)s=pi*r**2h=2.0*pi*rprint*,s,hend第56页2023/10/10573.12参数语句(parameter语句)注意几点:⑴参数语句必须写在所有可执行语句之前;⑵符号常量命名规则及类型与变量相同,并遵循“I~N规则”;⑶程序中不能给符号常量再赋值。第57页2023/10/10583.13pause语句,stop语句,end语句一、pause语句

⒈一般形式

Pause[n]

注:n为1~5位正整数或字符常量。

⒉功能暂停程序执行。(一种程序单位能够有多种pause语句)第58页2023/10/10593.13pause语句,stop语句,end语句例:

parameter(r=0.5,pi=3.14159)s=pi*r**2h=2.0*pi*r

pause'打印面积和周长'print*,s,hend第59页2023/10/10603.13pause语句,stop语句,end语句二、stop语句

⒈一般形式

stop[n]

注:n为1~5位正整数或字符常量。

⒉功能终止程序执行。(一种程序单位能够有多种stop语句)第60页2023/10/10613.13pause语句,stop语句,end语句三、end语句⒈一般形式

end

⒉功能对主程序:终止程序执行和作为程序单位结束标志;对子程序:返回调用程序和作为程序单位结束标志。(一种程序单位只能有一种end语句)第61页2023/10/1062课后练习题

P75~76:第五、八、十一题第62页2023/10/1063第四章

逻辑运算和选择构造

第63页2023/10/1064计算机程序程序设计基本办法

计算机处理问题所需要一系列代码化指令序列——计算机程序。

程序=数据构造+算法即“程序就是在数据某些特定表达方式和构造基础上,对抽象算法详细描述。”

上述公式可扩充为:程序=数据构造+算法+程序设计办法+语言工具第64页2023/10/1065所谓面向过程程序设计,是指利用面向过程语言工具(如Basic、Pascal、Fortran和C等)进行程序开发各项活动。程序设计基本办法面向过程程序设计长处:编程简单、构造性强、可读性好,程序执行时序特性显著;遵循这种构造程序只有一种入口和一种出口。缺陷:存在数据与程序模块分离和程序可重用性差等问题。基本思想:把一种需要求解复杂问题分为若干个模块来处理,每个模块处理一种子问题;设计时遵循自顶向下、逐渐细化、模块化设计和构造化编码标准。第65页2023/10/1066程序设计基本办法构造化程序设计办法:构造化编码在构造化程序设计中,任何复杂算法,都能够由三种基本构造组成。在构造算法时,也仅以三种基本构造作为基本单元。遵循这种构造程序只有一种输入口和一种输出口。模块化设计将一种复杂问题程序分为若干个程序模块,每个模块完成一项特定功能;其中有一种主模块和若干个子模块,主模块控制各个子模块来实现整个程序功能。自顶向下,逐渐细化第66页2023/10/1067程序设计基本办法面向对象程序设计面向对象程序设计是一种新程序设计范型。它将某些新理念和构造化程序设计中好思想相融合,提供了一种全新程序设计办法。基本思想将一种需要求解问题分解为一系列实体(对象),然后围绕这些对象建立数据和函数;函数功能决定了该对象行为。要求一种对象函数能够访问另一对象函数,但一种对象数据不能应用于另一对象函数中。几个基本概念:三类机制:类,对象,属性,事件,办法封装、继承、多态第67页2023/10/10684.1算法及其表达办法一、算法概念算法——处理某一问题所采取办法和步骤。计算机算法——计算机能够执行算法。

计算机算法特性:

⑴有穷性——操作步骤是有限。

⑵确定性——办法步骤是明确。

⑶有效性——办法是正确,步骤是完整。

⑷必须有输入和输出。(取得必要信息,给出正确成果。)第68页2023/10/10694.1算法及其表达办法Fortran是构造化程序设计语言,每个程序单位可由三种基本构造组成:

⑴次序构造⑵分支选择构造⑶循环构造实践证明,任何复杂问题都能够用这三种基本构造来描述。第69页2023/10/10704.1算法及其表达办法二、算法表达用N~S流程图表达。(由几个功能框组合而成)

⑴矩形框——用于表达次序构造。如:若先执行语句A,再执行语句B。AB第70页2023/10/10714.1算法及其表达办法例:若a=1.5,b=4.5,求a+b平方。①画N~S图:②编程:

A=1.5B=4.5C=(a+b)**2Print*,cend1.5→a4.5→b(a+b)2→c打印c结束第71页2023/10/10724.1算法及其表达办法⑵三角框——用于表达分支选择构造。如:若P为条件,当P成立执行语句A,不然执行语句B。PTrueFalseABPAB第72页2023/10/10734.1算法及其表达办法⑶L形框——用于表达循环构造。

①当型循环(P为条件,A循环体)如:若条件P成立,则执行循环体A,不然跳出循环体。PAYNPA第73页2023/10/10744.1算法及其表达办法

②直到型循环(P为条件,A循环体)如:首先执行循环体A,若条件P不成立继续执行循环体A,直到条件P成立为止。

A

PPAYN第74页2023/10/10754.2关系体现式

关系体现式是组成选择构造判断条件基本式子。它也是一种最简单逻辑体现式。

一、关系运算符(P80表4-1)

.gt.(大于)

.ge.(大于等于)

.eq.(等于)

.lt.(不大于)

.le.(不大于等于)

.ne.(不等于)第75页2023/10/10764.2关系体现式二、关系体现式一般形式

〈算术量〉〈关系运算符〉〈算术量〉

即:⑴关系体现式是由关系运算符将两个算术量连接起来式子。⑵关系体现式运算元素是算术量,成果是逻辑量:真(.True.)或假(.False.)。第76页2023/10/10774.2关系体现式有了关系体现式,我们就能够将:数学关系式─→Fortran关系体现式例:

x+y>15.4─→x+y.gt.15.4a+b≠a-b─→a+b.ne.a-bex≥2.17─→exp(x).ge.2.17第77页2023/10/10784.2关系体现式注意:⑴算术运算优先于关系运算。如:a+b.ne.a-b等同于(a+b).ne.(a-b)⑵实数运算误差对关系体现式影响如:1.0/3.0*3.0.EQ.1.0

值为.false.1.0/3.0*3.0=0.9999999∴对于a.eq.b

→abs(a-b).lt.1E-6c.ne.d

→abs(c-d).gt.1E-6第78页2023/10/10794.3逻辑体现式关系体现式只能体现简单关系,如:

5≤x≤10就不能用关系体现式体现,此时要用逻辑体现式。第79页2023/10/10804.3逻辑体现式一、逻辑体现式一般形式

〈逻辑量〉〈逻辑运算符〉〈逻辑量〉即:⑴逻辑体现式是由逻辑运算符将两个逻辑量连接起来式子。⑵逻辑体现式运算元素是逻辑量,成果也是逻辑量:真(.True.)或假(.False.)。逻辑量包括逻辑常量、逻辑变量和关系体现式。第80页2023/10/10814.3逻辑体现式二、逻辑常量两个:①.true.(真)②.false.(假)三、逻辑变量

——用于寄存逻辑常量变量。逻辑变量能够通过赋值语句来接收逻辑常量值,但在使用前,要进行类型说明。

例:logicala,ba=.true.b=.false.第81页2023/10/10824.3逻辑体现式四、逻辑运算符

.and.(逻辑与)

.or.(逻辑或)

.not.(逻辑非)

.eqv.(逻辑等(同或))

.neqv.(逻辑不等(异或))第82页2023/10/10834.3逻辑体现式五、逻辑运算符运算规则(P83表4.3)若a,b为两个逻辑量,则:

a.and.b——(当a、b同步为真时,为真。)

a.or.b——(当a、b中任意一种为真或同步为真时,为真。)

.not.a——(当a为真,其值为假;当a为假,其值真。)

a.eqv.b——(当a、b为同一逻辑常量时,为真。)

a.neqv.b——(当a、b不为同一逻辑常量时,为真。)第83页2023/10/10844.3逻辑体现式六、逻辑体现式运算次序(P84表4.5)

运算次序为:

括号→算术运算→关系运算→逻辑运算

而逻辑运算:

.not.→.and.→.or.→.eqv.,.neqv.第84页2023/10/10854.3逻辑体现式例1:写出下列条件逻辑体现式。⑴5≤k≤10

k.ge.5.and.k.le.10⑵│f│≤3g或│f│=5t

abs(f).le.3*g.or.abs(f).eq.5*t⑶1≤a≤8并且1≤b≤8(a.ge.1.and.a.le.8).and.(b.ge.1.and.b.le.8)第85页2023/10/10864.3逻辑体现式例2:若a=2.5,b=7.5,c=5.0,d=6.0,求下列逻辑体现式值。⑴(a.lt.b).and.(b.lt.c)

①t②f③f

第86页2023/10/10874.3逻辑体现式例2:若a=2.5,b=7.5,c=5.0,d=6.0,求下列逻辑体现式值。⑵c/2.0+d.lt.a.and..not..true..or.c.le.d

①8.5④F③T

②F

.

⑤F.

⑥T第87页2023/10/10884.4用块if实现选择构造有下列三种典型块if选择构造:⑴if(条件)then(块if语句)

块(then块)endif(endif语句)PA第88页2023/10/10894.4用块if实现选择构造⑵if(条件)then

块1(then块)else

块2(else块)

endif

PAB第89页2023/10/10904.4用块if实现选择构造例:2X+3(X≤2)Y=

X+5(X>2)编程如下:

read(*,*)x if(x.le.2)then

y=2*x+3 else

y=x+5 endif

write(*,*)’x=’,x,’y=’,y endX≤2TrueFalseY=2X+3

Y=X+5输出成果结束输入X值第90页2023/10/10914.4用块if实现选择构造⑶if(条件1)then

块1elseif(条件2)then

块2(elseif块)

┆elseif(条件n)then

块n[else

块(n+1)]endif

第91页2023/10/10924.4用块if实现选择构造说明:⑴每个块if中能够完整地包括一种(或多种)块if构造,即组成块if嵌套构造。如:

if(条件1)thenif(条件1)then

块1if(条件2)then

else块2

if(条件2)thenendif

块2

else

endif

块1endif

endif

第92页2023/10/10934.4用块if实现选择构造⑵一种块if语句必须和一种endif语句相对应。⑶块if中“then块”、“else块”和“elseif块”可为空块。第93页2023/10/10944.4用块if实现选择构造

例1:求一元二次方程ax2+bx+c=0根。(当b2-4ac≥0时有两个实根,b2-4ac<0时有两个复根。)

输入a、b、cb2-4ac→dtrued≥0false计算两实根计算两复根输出x1,x2输出x1,x2结束第94页2023/10/10954.4用块if实现选择构造

print*,’inputa,b,c:’ read*,a,b,cf=-b/(2.0*a) d=b**2-4.0*a*cg=sqrt(-d)/(2.0*a)

if(d.ge.0.0)thenprint*,'x1=',f,'+i',g e=sqrt(d)print*,'x2=',f,'-i',g x1=(-b+e)/(2.0*a)endif x2=(-b-e)/(2.0*a)end print*,'x1=',x1 print*,'x2=',x2

else第95页2023/10/10964.4用块if实现选择构造例2:求下列函数值。

0(x<-10)2x+20(-10≤x<0)y=20(0≤x<20)30-0.5x(20≤x<40)50-x(40≤x<50)0(x≥50)第96页2023/10/10974.4用块if实现选择构造

输入xtruex<-10falsetruex<0falsetruex<20falsetruex<40falsetrue

x<50

falsey=50-xy=0打印yy=0y=20y=30-0.5xy=2x+20第97页2023/10/10984.4用块if实现选择构造源程序一:

read*,xif(x.lt.50.0)then

if(x.lt.-10.0)theny=50.0-xy=0.0else

else

y=0.0

if(x.lt.0.0)thenendify=2.0*x+20.0endif

elseendif

if(x.lt.20.0)then

endif y=20.0endif

else

print*,’y=‘,y

if(x.lt.40.0)then

end y=30.0-0.5*x

else第98页2023/10/10994.4用块if实现选择构造源程序二:

read*,xprint*,’y=‘,y

if(x.lt.-10.0)thenend y=0.0

elseif(x.lt.0.0)then y=2.0*x+20.0

elseif(x.lt.20.0)then y=20.0

elseif(x.lt.40.0)then y=30.0-0.5*x

elseif(x.lt.50.0)then y=50.0-x else y=0.0 endif第99页2023/10/101004.5逻辑if语句逻辑if语句也是一种选择构造,但与块if不一样,主要体现在:①只用一行表达一种选择构造;②仅当条件成立时执行,并且只执行一条语句。逻辑if语句一般形式:If〈条件〉语句例:if(n.le.100)n=n+1第100页2023/10/101014.5逻辑if语句例:2X+3(X≤2)Y=

X+5(X>2)编程如下:

read(*,*)xread(*,*)xif(x.le.2)then if(x.le.2)y=2*x+3

y=2*x+3if(x.gt.2)y=x+5elsewrite(*,*)’y=’,y

y=x+5endendifwrite(*,*)’y=’,yend第101页2023/10/10102课后练习题P96:第一~三题;第四、五、七题第102页2023/10/10103第五章循环构造实现

第103页2023/10/10104第五章循环构造实现

所谓循环,是指在程序执行过程中需要反复执行程序段。在实际问题中,我们经常遇到循环,如:求∑n,n!,…

无条件循环GOTO

循环构造

直到型循环

条件循环当型循环计数型循环第104页2023/10/101055.1用goto语句实现循环goto语句一般形式:

goto<s1>

其中:s1——语句标号。功能:程序执行到此语句时,无条件转向标号为s1语句去执行。例:求1~10累加和。编写程序段:integerx,sumx=0.0sum=0.010x=x+1sum=sum+xgoto10第105页2023/10/101065.1用goto语句实现循环

假如我们把以上goto语句作为逻辑if语句中执行语句,则就能够实现有条件循环。即:

integerx,sum求1~10累加和

x=0.0sum=0.010x=x+1sum=sum+xif(x.lt.10)goto10print*,sumendx=0.0,sum=0.0x+1→x

sum+x→sum直到x≥10输出sum第106页2023/10/101075.2当型循环实现一、用块if和goto语句实现循环

一般形式:

s1if(条件)then

标号块

gotos1endifP

A

所谓当型循环,是指执行循环体要根据事先给定条件。当条件成立时执行循环,不然就不执行循环。第107页2023/10/101085.2当型循环实现编程如下:

read*,n m=1 i=1

10if(i.le.n)thenm=m*i i=i+1

goto10 endifprint*,m end输入nm=1,i=1i≤n

m×i→mi+1→i输出m例:求n!。第108页2023/10/101095.2当型循环实现

二、用dowhile语句实现当型循环

一般形式

dos1[,]while(条件)┆循环体

s1<终端语句>第109页2023/10/101105.2当型循环实现例:求n!。编程如下:

read*,nm=1i=1

do10while(i.le.n)m=m*i i=i+1

10continueprint*,mend第110页2023/10/101115.3直到型循环实现一、用逻辑if语句实现直到型循环

一般形式

s1循环体

if(条件)gotos1所谓直到型循环,是指先执行循环体,再判断条件。假如条件为“假”(真),继续执行循环,直到条件为“真”(假)时终止循环。第111页2023/10/101125.3直到型循环实现例1:求n!。编程如下:

read*,nm=1i=1

10continue

m=m*i i=i+1

if(i.le.n)goto10

print*,mend读nm→1,i→1m*i→mi+1→i直到i>n输出m结束第112页2023/10/101135.3直到型循环实现编程如下:

integersigns=1.0d=2.0sign=1

10sign=(-1)*signt=sign/ds=s+td=d+1

if(d.le.100.0)goto10print*,send例2:求值。第113页2023/10/10114当型与直到型循环比较

当型循环直到型循环不一样:先判断条件先执行循环体再执行循环体再判断条件 (循环体最少被 执行一次)PAPA循环构造关键:⑴条件判断⑵变化条件语句第114页2023/10/101155.4用do语句实现循环

当循环初值、终值和循环次数都已知时,可用do语句实现循环。用do语句实现循环称为“do循环”。do循环是由一种do语句和循环体组成。第115页2023/10/101165.4用do语句实现循环一、一般形式

dos[,]v=e1,e2[,e3]┆循环体

s<终端语句>说明:①

s——循环体终端语句标号②v——循环控制变量(do变量),可为整型、实型或双精度第116页2023/10/101175.4用do语句实现循环一、一般形式

dos[,]v=e1,e2[,e3]┆循环体

s<终端语句>说明:③e1,e2,e3是整型、实型或双精度体现式

e1——循环变量初值

e2——循环变量终值

e3——循环变量增量(步长,默认值:1)当v为整型变量,e3=1时,e3可忽视例:DO10,I=1,10,2DO100,N=1,5第117页2023/10/10118do循环执行过程P103图5.8计算e1,e2,e3值v←e1v>e2执行循环体v←v+e3YN执行终端语句

下面语句第118页2023/10/10119r=MAX(INT((e2-e1+e3)/e3),0)v←v+e3执行过程P103图5.7并将其转换为

循环变量类型第119页2023/10/101205.4用do语句实现循环例如:求1~10累加和。

integerx,sumsum=0DO10,x=1,10sum=sum+x

x=x+110continueprint*,sumend

integerx,sumx=0.0sum=010if(x.le.10)thenx=x+1sum=sum+x

goto10

endifprint*,sumend第120页2023/10/101215.4用do语句实现循环二、执行过程(分四种情形)⑴当e2>e1且e3>0:⑵当e2>e1且e3<0:第121页2023/10/101225.4用do语句实现循环⑶当e2<e1且e3>0:⑷当e2<e1且e3<0:第122页2023/10/101235.4用do语句实现循环

编程如下:

do10i=1,30

read*,x

10if(x.ge.60)print*,i,xend循环体例1:从键盘输入30个学生单科成绩,并将其中及格以上学生序号和成绩打印出来。第123页2023/10/101245.4用do语句实现循环例2:打印正弦sinx值。(间隔0.1o,从0o~360o)

编程如下:

do100i=0,3600

x=i/10.0y=sin(x*3.14159/180)100print*,’x=’,x,’y=’,yend第124页2023/10/101255.4用do语句实现循环说明:⑴DO循环是当型循环⑵可用e1,e2,e3值求出循环次数。计算公式:r=max(int((e2-e1+e3)/e3),0)①e3=0则运行时犯错(被零除)例:do10,i=1.2,6.6,0.2r=max(int(6-1+0/0),0)(由于循环变量I是整型)②e1<e2且e3<0

e1>e2且e3>0,则循环次数为0⑶由于实数在内存中存放误差,v,e1,e2,e3尽也许用整型量。第125页2023/10/101265.4用do语句实现循环说明:⑷e1,e2,e3值在do循环体内不会变化,虽然给体现式e1,e2,e3中变量赋值也不影响循环次数例:

m=10do10,i=1,m,3m=100+mprint*,i,m10continueend

r=(10-1+3)/3=4第126页2023/10/101275.4用do语句实现循环说明:⑸循环终端语句必须是可执行语句(但除goto,块if,else,elseif,endif,end,stop和return语句外)。⑹继续语句(continue语句)循环终端语句必须是可执行语句。那么,这种作为循环终端语句语句具有双重作用:一是作为循环终端标志,二是要完成本身功能。因此影响了程序可读性。Fortran用一种专门语句作为do循环终端语句,即continue语句,它本身不进行任何机器操作。第127页2023/10/101285.4用do语句实现循环三、有关do循环要求⑴在循环体内不允许对循环变量再赋值,但能够引用。例:do10,i=20,1,-1

i=2*i

不合法

k=2*i引用i,合法

print*,i,k10continue第128页2023/10/10129例2:do100,I=1,10

……20print*,I

……

100continue

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论