资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第四章 选择结构程序设计,第四章 选择结构程序设计,4.1 关系表达式与逻辑表达式,4.2 IF语句,4.3 IF结构,4.4 CASE结构,4.5 程序举例,4.1 关系表达式与逻辑表达式,4.1.1 关系表达式(,表示简单的条件),一、关系运算符:,、=、=、,=(等于),、,/=(不等于),(常用),.GT.、.GE.、.LT.、.LE.、.EQ.、.NE.(很少用),二、关系表达式,结果:.true.或 .false.,例:4525.5,.false.,banana=apple,.false.(按ASCII码比),“THESE”“THOSE”,.true.(EO),注意:,1、每个关系表达式中的关系运算符只准出现1次,运算符两侧都是表达式;,错例:,2b)c,2、运算对象:,关系运算符两边的运算对象类型应相容:,错例:,A=.TRUE.2A,复型:只能进行=、/=。不能比较大小,字符型:可以进行各种关系运算,算数表达式两端的类型自动转换成同一类型后再比较(低级向高级的转换),实型量=或/=要小心使用,一般要改写:A=B 改写为ABS(A-B)=1E-6,3、算术表达式加括号与不加括号的作用是相同的。,例 a*bc*d 等价于(a*b)(c*d),4.1.2 逻辑表达式与逻辑赋值,逻辑运算符(5个),.NOT.,a:求反运算,,a,.AND.,b:a与b同时为真,表达式值才为真,a,.OR.,b:a与b有一个为真,表达式值就为真,a,.EQV.,b:a与b值相等,表达式值为真,a,.NEQV.,b:a与b值不相等,表达式值为真,逻辑表达式,:,用逻辑运算符将若干个,逻辑量,相连,逻辑量即值为.TRUE.FALSE.的量:逻辑常量、逻辑变量、逻辑函数、关系表达式,例:AB+D.OR.NOT.TRUE.,两个逻辑运算符不能直接相邻,但.NOT.除外,例:A.AND.NOT.B,正确的FORTRAN表达式:,3=x .And.x=7,错例,:3=x=7,或,3=x .And.=7,或 3=x Or x2.8*B.AND.X=Y.OR.L1.AND.NOT.(3.6-C)*2=D/2.5,2.4,5.6,4.8 3.0,.FALSE.,.FALSE.,.TRUE.,.TRUE.,.FALSE.,.FALSE.,.FALSE.,.FALSE.,例:,例,练习表达式的写法:,1、ABCD,2、1x,2,+y,2,0)PRINT*,X,条件,一个语句,执行过程:,1、计算条件表达式的值,2、真 右边语句 IF的下一个语句,3、假 IF的下一个语句,注意:,1.右边通常为,一条且只一条,可执行语句。,错例:IF(AB)T=A;A=B;B=T,2.不能为以下语句:,END、另一个逻辑IF、块IF、ELSIF、ENDIF、DO,错例:IF(X=80),PRINT*,A,IF(cj=70.AND.cj=60.AND.cj70),PRINT*,C,IF(cj=80,B:70=cj80,C:60=cj70,D:cj=80),THEN,print*,“A”,ELSE,IF,(cj=70),THEN,print*,“B”,ELSE,IF,(cj=60),THEN,print*,“C”,ELSE,print*,“D”,ENDIF,ENDIF,ENDIF,A:cj=80,B:70=cj80,C:60=cj70,D:cj=80),THEN,print*,“A”,ELSE IF,(cj=70),THEN,print*,“B”,ELSE IF,(cj=60),THEN,print*,“C”,ELSE,print*,“D”,END IF,用ELSEIF语句,只有一个endif,结构简洁,.,A:cj=80,B:70=cj80,C:60=cj70,D:cj60,4.3.3 IF结构的取名,IF结构可:,无名或有名,IF结构的取名与变量的取名方法相同,IF结构名:,IF(e1)THEN,块1,ELSE IF(e2)THEN,IF结构名,块2,ELSE IF(en)THEN,IF结构名,块n,ELSE,IF结构名,块n+1,END IF,IF结构名,同一IF结构中的结,构名一定要一致!,例:,假设IF结构名为FIRST,则入口语句为:,FIRST:,IF(e1)THEN,出口语句为:,END IF,FIRST,注意:,入口、出口写结构名时,其结构名应该一致。,IF结构名与入口语句间要用冒号分隔,出口语句(ENDIF语句)与结构名之间要空1格,不能有冒号。,ELSEIF语句与ELSE语句后可以写结构名,也可以不写,如果写,其结构名一定要与入口语句处的结构名一致。,例:计算y=f(x)+g(x),f(x)=x,2,-16,1+e,x+1,,f(x)0,分析:1.通过表达式计算f,注:f 与f(x)的区别,2.计算g,3.f+g,PROGRAM MAIN,REAL:X,F,G,READ*,X,F=X*2-16,first:,IF(F0)THEN,G=1+EXP(X+1),ELSE,next:,IF(ABS(F)1E-6)THEN,G=SQRT(X*3)+25,ELSE,G=0,ENDIF,next,ENDIF,first,PRINT*,F+G,END,f(x)=x,2,-16,1+e,x+1,,f(x)0,PROGRAM MAIN,REAL:X,F,G,READ*,X,F=X*2-16,IF(F0)THEN,G=1+EXP(X+1),ELSEIF(ABS(F)1E-6)THEN,G=SQRT(X*3)+25,ELSE,G=0,ENDIF,PRINT*,F+G,END,f(x)=x,2,-16,1+e,x+1,,f(x)0,2、,IF,(条件),THEN,语句组1,ELSE,语句组2,ENDIF,3、IF,(,条件1,),THEN,语句组1,ELSEIF,(,条件2),THEN,语句组2,ELSEIF,(,条件3),THEN,语句组3,ELSE,语句组n,ENDIF,1、,IF,(条件),语句,4.4 CASE结构,使用范围:多分支结构,SELECT CASE,(情况表达式),CASE,(情况选择器1),block1(块1),CASE,(情况选择器2),block(块2),-,CASE,(情况选择器n),block n,CASE DEFAULT,默认块,END SELECT,N,N=1,N=2,N=3,N=4,其他,语句,语句,语句,语句,语句,执行过程:,1.计算情况表达式的值,2.顺序匹配各情况选择器,执行相应的block1,再到 END Select下一个语句,3.如果均不匹配,则执行默认块,4.执行 END Select的下一个语句,情况表达式:,整型变量、逻辑变量、字符型变量或相应的表达式,不能是实型或复型表达式,表达式列表(情况选择器):,只能是常量,不能为变量,可有多条语句;,类型与情况表达式类型应一致,尤其字符型时种别参数必须一致,但长度可以不同;,,(逗号)分隔符表示分隔单个值的列表。,例:case(3,5,7)值不能重复,:(冒号)分隔符表示值的范围,连续的值,例:case(5:10);case(i:n),下界、上界可省略,Case default:最多出现一次,例:,结构名:,SELECT CASE(x),Case(1),结构名,!X的值等于1时,语句块1,Case(1:5),结构名,!X的值=1且=1时,Case(:5)!X的值=0),CASE,(.TRUE.),Y=X+5,CASE,(.FALSE.),Y=-X,END SELECT,PRINT,*,Y,END,PROGRAME CASE_LOGICAL,例2:情况表达式为逻辑型:,例4-5,设有分段函数P72,Y=X+5 (X0),-X(X0),设变量color_light是字符型变量,表示灯光色彩。用CASE结构编程,当该变量值是红色(RED)时,输出停止字样(STOP);当变量值是黄色(YELLOW)时,输出等待字样(WAIT);当值是绿色(GREEN)时,输出通行字样(PASS)。,例3:情况表达式为字符型:,PROGRAM CASE_CHARACTER,IMPLICIT NONE,CHARACTER(6):,color_light,READ*,color_light,SELECT CASE(color_light),CASE,(RED),PRINT*,STOP!,CASE,(YELLOW),PRINT*,WAIT!,CASE,(GREEN),PRINT*,PASS!,CASE DEFAULT,PRINT*,输入错误!,ENDSELECT,END,4.5 程序举例,例4-3、求一元二次方程ax,2,+bx+c=0的根。(p68),例4-6输入三个数A、B、C,把它们按从大到小的顺序输出。(p72),例4-7分段函数(P74),例4-8输入一个数,判断它是否能被3整除,并打印出相应信息。(p74),例4-3:求一元二次方程ax,2,+bx+c=0 的根(P68),FIRST:IF(ABS(D)0)THEN,X1=(-B+SQRT(D)/(2*A),X2=(-B-SQRT(D)/(2*A),PRINT*,X1=,X1,X2=,X2,ELSE,R=-B/(2*A),T=ABS(SQRT(-D)/(2*A),PRINT*,X1=,R,+,T,i,PRINT*,X2=,R,-,T,i,ENDIF NEXT,ENDIF FIRST,END PROGRAM,IF(ABS(D)0)THEN,X1=(-B+SQRT(D)/(2*A),X2=(-B-SQRT(D)/(2*A),PRINT*,X1=,X1,X2=,X2,ELSE,R=-B/(2*A),T=ABS(SQRT(-D)/(2*A),PRINT*,X1=,R,+,T,i,PRINT*,X2=,R,-,T,i,ENDIF,PROGRAM ROOT,IMPLICIT NONE,REAL:A,B,C,D,X,X1,X2,R,T,PRINT*,INPUT A,B,C:,READ*,A,B,C,D=B*B-4*A*C,例4-8 输入一个数,判断能否被3整除,打印相关信息,SELECT CASE(MOD(N,3)=0),本章小结,关系表达式与逻辑表达式,IF语句,IF结构,SELECT CASE 结构,本章作业:,课后习题至少5道(多多益善),发至邮箱:,邮件标题栏注明:专业班级、学号、姓名,邮件正文注明:第4章作业,题目文件名:xiti4_3.f90,注意:只发送.f90文件(作为附件),
展开阅读全文