Presentation is loading. Please wait.

Presentation is loading. Please wait.

第3章 流程控制和逻辑运算.

Similar presentations


Presentation on theme: "第3章 流程控制和逻辑运算."— Presentation transcript:

1 第3章 流程控制和逻辑运算

2 流程控制 IF (条件P) THEN A块 ELSE B块 END IF 顺序结构:执行流程成直线,很难实现一些复杂功能的程序。
选择结构、循环结构 B块 P A块 成立 不成立 入口 出口 IF (条件P) THEN A块 ELSE B块 END IF

3 关系表达式 关系表达式是构成选择结构判断条件的基本式子。它也是一种最简单的逻辑表达式 关系表达式的一般形式
〈算术量〉〈关系运算符〉〈算术量〉 涵义: 关系表达式是由关系运算符将两个算术量连接起来的式子。

4 关系运算符 关系 Fortran 77 Fortran 90 大于 .gt. > 大于等于 .ge. >= 等于 .eq. ==
小于 .lt. < 小于等于 .le. <= 不等于 .ne. /=

5 关系表达式 关系运算符的两个字母(GT, LE…)的两侧各有一个句点,不要漏写。例如“A.GT.B”是一个关系表达式,如果漏写句点,就变成”AGTB”,系统会把它当成一个变量名来处理。 在关系表达式中,同时包含算术运算符和关系运算符,Fortran 规定,先进行算术运算,后进行关系运算。例如X+Y .GT. A-B

6 关系表达式 关系表达式的例子: x+y>15.4 或 x+y.gt.15.4 a+b≠a-b
只能写成 a+b.ne.a-b 或 (a+b)/=(a-b) ex≥2.17 只能写成 exp(x).ge.2.17 或 exp(x)>=2.17 2019/4/19 6

7 关系表达式 关系运算用于两个不同类型的运算时,将自动进行数据类型转换,规则同算术运算。
关系表达式的运算元素是算术量,结果是逻辑量:真(.True.)或假(.False.)。 运算符如 .LE.中,点与LE字符是一个整体符号,之间不能有空格。 在使用.EQ.(==)或.NE.(/=)时,应注意实数类型数据的存储误差。例如: logical A real:: x=1.2 A=x*x .EQ. 1.44 print*,A

8 关系表达式 实数运算误差对关系表达式的影响 如:1.0/3.0*3.0.EQ.1.0 值为.false.
1.0/3.0*3.0= 所以采用如下的形式: a.eq.b → abs(a-b).lt.1E-6 c.ne.d → abs(c-d).gt.1E-6

9 字符关系表达式 两个字符型数据也可以经比较,与数值型格式一致 两个单个字符比较,以其ASCII码比较,ASCII码大者为大
如:'A'<'B' 两个字符常量(字符串)比较,将两个字符串中的字符自左向右进行比较,如有差别,则ASCII码大者为大,否则两者相等。 如:'SHANGHAI'<'SHANGKONG' 如果两个字符串长度不等,则系统会自动将短的字符补以空格,使两者等长再比较。 如:'the'<'then' → 'the︺'<'then'

10 ASCII 规则 数字0小9大 数字比字母小 大写字母比小写字母小 字母A小Z大,a小z大 其他专用字符有的比数字小有的比数字大
CHAR(I) — 得到ASCII码为I的字符 CHAR(97) → 'a' CHAR(65) → 'A' ICHAR(a) — 得到字符串a中第一个字符的ASCII码 ICHAR('apple') → 97

11 逻辑运算 关系表达式只能表达简单的关系,但如: (1) 5≤x≤10 (2)|X|>5 (3) M能被3或5同时乘除
以上关系应如何表示呢?他们不能简单地用关系表达式表。 解决的方法是:逻辑表达式。

12 逻辑表达式 逻辑表达式的一般形式 〈逻辑量〉〈逻辑运算符〉〈逻辑量〉 逻辑表达式是由逻辑运算符将两个逻辑量连接起来的式子。
逻辑表达式的运算元素是逻辑量,结果也是逻辑量:真(.True.)或假(.False.)。 逻辑量包括逻辑常量、逻辑变量和关系表达式。

13 逻辑运算回顾 逻辑常量 两个:①.true.(真)②.false.(假) 逻辑变量 ——用于存放逻辑常量的变量。
逻辑变量可以通过赋值语句来接受逻辑常量的值,但在使用前,要进行类型说明。 例: logical a, b a=.true. b=.false.

14 逻辑运算 逻辑运算符 .and. (逻辑与) .or. (逻辑或) .not. (逻辑非) .eqv. (逻辑等(同或)
.neqv.(逻辑不等(异或)

15 逻辑运算 逻辑运算符的运算规则 若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不为同一逻辑常量时,为真。)

16 逻辑运算举例 例如: (1) 5≤x≤10 表示为:x>=5 .and. x<=10 (2)|X|>5
表示为:x<-5 .or. x>5 或者为:abs (x) > 5 (3) M能被3或5同时乘除 表示为:Mod(m,3)==0 .or. Mod(m,5)==0

17 逻辑运算次序 逻辑表达式的运算次序 运算次序为: 括号→算术运算→关系运算→逻辑运算 而逻辑运算:
.not.→.and.→.or.→.eqv.,.neqv.

18 逻辑运算举例 例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)

19 逻辑运算举例 若a=2.5,b=7.5,c=5.0,d=6.0,求下列逻辑表达式的值。 ⑴(a.lt.b).and.(b.lt.c)
①t ②f ③f

20 逻辑运算举例 若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 ① ④F ③T ②F ⑤F ⑥T

21 块 if 选择结构 有以下三种典型的块if选择结构: ⑴ 单分支结构: if (条件) then (块if语句) 块 (then块)
⑴ 单分支结构: if (条件) then (块if语句) 块 (then块) endif (endif语句) P A

22 块 if 选择结构 ⑵ 双分支结构 if (条件) then 块 (then块) else 块 (else块) endif P A B

23 块 if 选择结构 True False if (x.le.2) then y=2*x+3 else y=x+5 endif
例: X+3 (X≤2) Y= X+ (X>2) 编程如下: read(*,*) x if (x.le.2) then y=2*x+3 else y=x+5 endif write(*,*)'x=',x,'y=',y end X≤2 True False Y=2X+ Y=X+5 输出结果 结束 输入X值

24 块 if 选择结构 ⑶多分支块if结构 if (条件1) then 块1 else if (条件2) then 块2 (else if块)
else if (条件n) then 块n [else 块(n+1)] endif

25 块 if 选择结构 说明: ⑴每个块if中可以完整地包含一个(或多个)块if结构,即构成块if 的嵌套结构。如:
if (条件1) then if (条件1) then 块 if (条件2) then else 块2 if (条件2) then endif 块 else endif 块1 endif endif

26 块 if 选择结构 ⑵一个块if 语句必须和一个endif语句相对应。
⑶块if 中的“then块”、“else块”和“else if块”可为空块。

27 块 if 选择结构举例 求一元二次方程ax2+bx+c=0的根。 b2-4ac → d 输入a、b、c true d≥0 false 结束
(当b2-4ac≥0时有两个实根,b2-4ac<0时有两个复根。) 输入a、b、c b2-4ac → d true d≥ false 计算两实根 计算两复根 输出x1,x2 输出x1,x2 结束

28 块 if 选择结构举例程序 print*,'input a,b,c:' read*,a,b,c f=-b/(2.0*a)
d=b**2-4.0*a*c g=sqrt(-d)/(2.0*a) if (d.ge.0.0) then print*,'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

29 块 if 选择结构举例 求下列函数值。 0 (x<-10) 2x+20 (-10≤x<0) y= 20 (0≤x<20)

30 块 if 选择结构 true x<50 false 输入x true x<-10 false y=0 true x<0 false
y=2x+20 true x< false y=20 true x< false y=30-0.5x true x<50 false y=50-x y=0 打印y

31 块 if 选择结构举例程序 read*,x print*,'y=',y if (x.lt.-10.0) then end y=0.0
else if (x.lt.0.0) then y=2.0*x+20.0 else if (x.lt.20.0) then y=20.0 else if (x.lt.40.0) then y= *x else if (x.lt.50.0) then y=50.0-x else endif

32 块 if 选择结构程序举例 read*,x if (x.lt.50.0) then
if (x.lt.-10.0) then y=50.0-x y= else else y=0.0 if (x.lt.0.0) then endif y=2.0*x endif else endif if (x.lt.20.0) then endif y= endif else print*,'y=',y if (x.lt.40.0) then end y= *x else

33 逻辑 if 语句 逻辑if语句也是一种选择结构,但与块if 不同,主要表现在: ①只用一行表示一个选择结构;
②仅当条件成立时执行,并且只执行一条语句。 逻辑if语句的一般形式: If〈条件〉语句 例:if (n.le.100) n=n+1

34 逻辑 if 语句 read(*,*) x read(*,*)x if (x.le.2) then if(x.le.2) y=2*x+3
例: X+3 (X≤2) Y= X+ (X>2) 编程如下: read(*,*) x read(*,*)x if (x.le.2) then if(x.le.2) y=2*x+3 y=2*x if(x.gt.2) y=x+5 else write(*,*)'y=',y y=x end endif write(*,*)'y=',y end

35 多重判断:块CASE选择结构 Fortran 90 引入 SELECT CASE (变量) 块CASE选择 CASE (数值1) 语句块1
语句块2 …… CASE (数值n) 语句块n CASE DEFAULT [类似于 ELSE] 语句块n+1 END SELECT 块CASE选择 结构的 一般格式

36 SELECT CASE 语句 Case default 程序模块没有规定一定要出现。
只能使用整数,字符和逻辑型变量不能使用浮点数和复数。

37 块CASE选择结构 问题: 已知年月,判断该月所对应的天数。 输入年和月 T 月=1,3,5,7 ,8,10,12 DAY=31 F
月=4,6,9,11 DAY=30 月=2 DAY=29 DAY=28 输出DAY T F 闰年 问题: 已知年月,判断该月所对应的天数。

38 块if结构求解问题 d=29 else d=28 end if Integer y, m, d Read*, y, m
If (m==1.or.m==3.or.m==5.or.m==7.or.m==8.or.m==10.or.m==12) then d=31 Else if (m==4.or.m==6.or.m==9.or.m==11) then d=30 Else if ((mod(y,4)==0.and. mod(y,100)/=0).or.mod(y,400)==0) then d=29 else d=28 end if print*, y, " 年", m, " 月所对应的天数为:", d," 天" end

39 块Case选择结构求解问题 integer y, Month, Day print*, "请输入y和Month"
read*, y, Month select case (Month) case (1,3,5,7,8,10,12) Day=31 case(4,6,9,11) Day=30 case(2) if ((mod(y,4)==0.and.mod(y,100)/=0).or.mod(y,400)==0) then Day=29 else Day=28 End if End select print*, y," 年", Month, " 月所对应的天数", Day, " 天" end

40 GOTO 语句

41 其他语句 Pause 语句的功能就是,当程序执行到pause时,会暂停,直到用户按下Enter键后才会继续执行。
可以用来调试,输出间断(需要分页),或者数据显示(确定是否运行) Continue 功能为继续向下执行语句。 Stop 功能为结束程序运行。

42 作业 题目3.1 题目3.2

43 作业 题目3.3 请采用Fortran90 自由格式编写程序,求解实系数方程ax2+bx+c=0的实数解。要求:系数a,b,c 为程序执行时键盘输入,a,b,c为任意实数;所有的解均输出到屏幕。 题目3.4 请采用IF … GOTO …语句编写Fortran90 自由格式程序,求1+2+3+…+100=?


Download ppt "第3章 流程控制和逻辑运算."

Similar presentations


Ads by Google