fortran第4章(条件).ppt

上传人:max****ui 文档编号:6345831 上传时间:2020-02-23 格式:PPT 页数:58 大小:466.05KB
返回 下载 相关 举报
fortran第4章(条件).ppt_第1页
第1页 / 共58页
fortran第4章(条件).ppt_第2页
第2页 / 共58页
fortran第4章(条件).ppt_第3页
第3页 / 共58页
点击查看更多>>
资源描述
第四章逻辑运算和选择结构 4 1关系表达式4 2逻辑表达式4 3逻辑IF语句4 4分块条件语句4 5块IF构造4 6多重选择和CASE构造 a 关系运算符关系运算符就是关系比较符 Fortran中有六个关系运算符 4 1关系表达式 注意 关系运算符的两个字母 如GT LE 的二侧各有一个点 不要漏写 b 关系表达式关系表达式是最简单的一种逻辑表达式 其一般形式为 算术表达式也可以是一个算术量 即为一个数值常数 数值型变量 数值函数 例 A B 0 A B LE 0 A B C D A B NE C D注意 1 关系表达式中关系操作符只准出现一次 2 数学中不等式写法与FORTRAN中关系表达式的写法有同有异 不可随意使用数学中的习惯用法 例如语句写法3 X 7就是不正确的关系表达式 2 关系表达式求值的过程是 先分别计算两个表达式的值 然后将他们进行比较 1 关系表达式的值是一个逻辑常数 即 TRUE 或 FALSE 例 A B GE C D 设 A 2 0 B 3 5 C 2 3 D 6 2 先计算A B和C D的值 然后判断7 0 GE 8 5结果不成立其值为 FALSE 关系运算的特点 3 当两个算术关系表达式的数据类型不相同时 求值过程为 将两个算术表达式化为同一类型然后比较 转换规律是将低级类型向高级类型转换 因此 执行关系表达式的过程为 算出算术表达式的值 将两个算术表达式值转换成同一类型 将两个表达式的值进行比较 具体操作是 将e1RELOPe2写成 e1 e2 RELOP0即对两个算术表达式求差 然后与零进行比较 其中零的类型与表达式 e1 e2 的类型相同 如 X X LT 2 J可写作 X X 2 J LT 0 0 4 当算术表达式是非整型时尽量不用关系运算符 EQ 和 NE 因为实型数在计算机中不能保证完全精确 例X Y的实型值为5 0 在计算机中可能为5 000001或4 999999 5 除了算术量可进行比较外 字符关系表达式可对两个字符量进行比较 对数学式X Y的关系运算可用 ABS X Y LT 1 E 30 对X Y可用 ABS X Y GT 1 E 30 4 3逻辑表达式 a 逻辑量Fortran的逻辑常量 TRUE 表示 真 即满足逻辑条件 FALSE 表示 假 即不满足逻辑条件 例 当X 3时 X 5 的值为 TRUE 真 而 X 0 的值为 FALSE 假 逻辑型变量用来存放逻辑常量 它的值也只能是 TRUE 或 FALSE 之一 可以将一逻辑常量赋予一个逻辑变量 如 将A定义为逻辑型变量 用赋值语句对其赋值 LOGICALAA TRUE 逻辑赋值语句的一般形式为 逻辑变量 逻辑表达式 b 逻辑运算符Fortran有5个逻辑运算符 每个操作符两边都有一点 不可省略 注意 不要将 AND 与 EQV 混淆 A AND B是当A和B均为真时才为真 A EQV B是当A和B均为真或均为假时为真 逻辑非 NOT 例 3 5 GT 2其值为 TRUE NOT 3 5 GT 2 其值为 FALSE 逻辑与 AND 例 3 5 LE 10 0 AND 20 0 GT 15 1其值为真3 5 LE 10 0 AND 20 0 LT 15 1其值为假 逻辑或 OR 例 3 5 LE 10 0 OR 20 0 LT 15 1其值为真3 5 GE 10 0 OR 20 0 LT 15 1其值为假 c 逻辑表达式的运算 逻辑同 EQV 逻辑等值 例 3 5 LE 10 0 EQV 20 0 LT 15 0其值为假3 5 LE 10 0 EQV 20 0 GE 15 0其值为真 逻辑异 NEQV 逻辑不等值 例 3 5 GE 10 0 NEQV 20 0 LT 15 0其值为真3 5 GE 10 0 NEQV 20 0 GE 15 0其值为假 运算顺序优先次序为 NOT AND OR EQV NEQV 逻辑表达式中包含算术运算符 关系运算符和逻辑运算符 它们的运算优先次序如下表 逻辑表达式中各运算符的运算顺序 注 a 关系符只能用于两个数值量的大小比较 不能 TRUE EQ Yb 不能将逻辑运算符和关系符连用 即用A NOT EQ B表示A B C 在关系表达式中一个算术表达式只能与一个关系符相邻 不能在两侧都出现关系符 例 0 X 50 0 GT X LT 5 0或0 0 LT X LT 5 0应写成x GT 0 0 AND X LT 5 0 d 两个逻辑运算符相邻要注意 如 NOT AND 例1 若A 1 5 B 2 0 C 1 2 X 3 0 Y 5 0 L1为真 有逻辑表达式 A GT 3 6 B AND X EQ Y OR L1 AND NOT 3 6 C 2 GE D 2 5 2 4 7 2 3 0 4 8 F F T F F F F 例2 已知A FALSE B FALSE C FALSE X 11 5 Y 1 6 Z 41 5X LT Y OR X Y GT Z AND NOT A EQV B OR C 11 51 641 5FFF IF语句不是一种选择结构 只是一条语句 它在算法较简单的场合下 可以灵活地完成二分叉选择算法 执行过程 如果条件成立 即逻辑表达式值是 真 则执行其后紧跟的执行语句 而后执行下一条语句 如果条件不成立 则整个IF语句不作任何操作 只是起下滑作用 使控制转移到IF语句的下一个语句 4 4逻辑IF语句 一般形式为 IF 逻辑表达式 执行语句 IF语句最大的用处是退出迭代 计算机程序中经常作连加 连乘或反复执行某段程序 并规定只有当某个参数大于或小于某值时才停止循环 这时就可以使用IF语句 IF语句用于两分叉选择的例子如 求数学中的阶梯函数 可写成 Y 0IF X 1 Y 1注意本例中不可写成 IF X 0 Y 0Y 1 例 IF X 0 AND K N Y K X例 打印学生考试成绩 大于等于80分的为 A 大于等于60分而小于80分的为 B 小于60分的为 C READ GRADEIF GRADE GE 8O PRlNT A IF GRADE GE 6O AND GRADE LT 80 PRlNT B IF GRADE LT 6O PRlNT C 逻辑IF语句当条件为 真 时只能执行一个执行语句而不能执行若干个语句 与块IF相比 逻辑IF语句是在一行中完成的一个选择操作 因此它又称 行IF语句 以与块IF区别 逻辑IF语句也常与GOTO语句合用 但如果过多使用 程序结构将显得混乱 难于理解 应尽可能采用结构化的程序设计方法 F90的固定格式 统计学生考试合格人数INTEGER n s ks 0 k 01PRINT 键入分数 负数时退出 READ n IF n 60 k k 1GOTO1999PRINT k 个学生合格 总人数 sEND 逻辑IF语句名称 是沿用了Fortrn66的定义 因为在F66中有两种IF语句 算术IF语句 F90 95中已废除 和逻辑IF语句 4 5块IF条件语句 块IF的一般形式可写成 IF 逻辑表达式 THEN 块IF语句块1 then块ELSE块2 else块ENDIF 功能 当逻辑表达式的值为真时 即条件成立时执行语句块1 反之执行语句块2 例 有一折线其关系为 Y 2X 3 X 2 X 5 X 2 见图 要求输入一个X值 打印一个相应的Y值 READ XIF X LE 2 0 THENY 2 X 3ELSEY X 5ENDIFPRINT X X Y YEND 注意 1 一个块IF是一个完整的选择结构 在IF块或ELSE块中可以用转移语句将流程转到块IF之外 而不允许由IF块外或ELSE块外转到IF块内或ELSE块内 如下面的例子是错误的 IF I NE J THENI J100WRITE IENDIFGOTO100 2 可以在同一IF块或ELSE块内用转移语句从一点转移到另一点 3 块IF语句 ELSE语句和ENDIF语句必须联合而不能单独使用 一个块IF语句必须对应一个ENDIF语句 或一个ELSE语句和ENDIF语句 块IF语句嵌套 对于稍微复杂的问题 往往在某种条件判定后 仍需进一步判定 然后决定接下去该做什么 这种多层判定称为嵌套的判定语句 简单嵌套结构如下 IF e1 THENIF e2 THEN外内 ENDIF ENDIF在嵌套程序中找出对应的块IF ELSE ENDIF语句的方法 1 从最内层的块IF语句开始 找离它最近的ENDIF语句 将其用线括起来 在两语句之间的ELSE语句必属于这一层的块IF 2 由内向外重复上述过程直到遇到最外层的块IF语句和ENDIF语句为止 例 编制二次方程求根的程序 分析 AX2 BX C 0的判别式为 D B2 4ACA 0 B 0则C 0A 0 B0则X C BA0 D0则有两实根 例 编制二次方程求根的程序 PROGRAMEQUATE READ A B C PRINT COEFFICIENTSARE A B C IF A EQ 0 0 THEN IF B EQ 0 0 THEN PRINT EQUATIONHASTHEFORM C 0 0 ELSE PRINT NOTQUADRATICEQUATIONROOTIS C B ENDIF ELSE PART1 B 2 0 A TEMP B B 4 0 A C PART2 SQRT ABS TEMP 2 0 A IF TEMP LT 0 0 THEN PRINT COMPLEXROOTS PART1 I PART2 PART1 I PART2 ELSEIF TEMP EQ 0 0 THEN PRINT BOTHREALROOTSARE PART1 ELSE PRINT REALROOTSARE PABT1 PART2 PART1 PART2 ENDIF ENDIF END 当嵌套层次多时 可按以下方法确定每个层块IF 1 从最内层的块IF语句开始 向下找离它最近的ENDIF语句 把它们用线括起来 在这两个语句之间的全部语句 包括块IF语句和ENDIF语句 就是同一层的块IF 2 由内向外重复上述过程 直到遇到最外层的块IF语句和ENDIF语句为止 ELSEIF语句 在单边或双边选择结构的任意分支中又嵌入另一单边或双边选择结构 即构成多重选择结构 格式 IF THEN IF块 ELSEIF THEN ELSEIF块 ELSE ELSE块 ENDIF 功能 构成多重选择 说明 1 IF THEN语句必须与ENDIF语句配对 ELSEIF THEN语句不要求ENDIF与之配对 2 ELSEIF THEN是两条语句 ELSEIF THEN是一条语句 例 阶跃函数1 当X 0 YY 0 当X 0 1X 1 当X 0 1 嵌套 READ XIF X GT 0 0 THENY 1 0ELSEIF X EQ 0 0 THENY 0 0ELSEY 1ENDIFENDIFPRINT X X Y YEND 多重 READ XIF X GT 0 0 THENY 1 0ELSEIF X EQ 0 0 THENY 0 0ELSEY 1ENDIFPRINT X X Y YEND 例如 征收税款 税率与收入有关 若规定收入1000元以下收3 1000 2000收4 2000 3000收5 3000以上收6 IF AMOUNT LT 1000 THENRATE 0 03ELSEIF AMOUNT LT 2000 THENRATE 0 04ELSEIF AMOUNT LT 3000 THENRATE 0 05ELSERATE 0 06ENDIFENDIFENDIFTAX AMOUNT RATE 程序可写成 IF AMOUNT LT 1000 THENRATE 0 03ELSEIF AMOUNT LT 2000 THENRATE 0 04ELSEIF AMOUNT LT 3000 THENRATE 0 05ELSERATE 0 06ENDIFTAX AMOUNT RATE 也可以用ELSEIF语句写成 5 ELSEIF语句实际上也引入了块IF的嵌套 见下图 4 它的执行规律是 如果逻辑表达式的值为真 则执行其后的ELSEIF块 如果为假 则转到紧跟在ELSEIF块后面的ELSE语句或ELSEIF语句或ENDIF语句 1 LESEIF也是一个执行语句 它的作用是将ELSE语句和块IF语句结合起来 表示 否则 如果满足条件 则执行下面是ELSEIF块 说明 3 ELSEIF语句的一般形式为 ELSEIF 逻辑表达式 THEN 2 ELSEIF块的范围从ELSEIF语句的下一个语句开始到离它最近的ELSE语句或ELSEIF语句或ENDIF语句为止 它的一般形式 多分支的N S图 6 ELSEIF虽然起ELSE和IF的双重作用 但它与块IF语句有一点不同 它不要求相应的ENDIF语句 7 在包含ELSEIF语句的块IF语句中 如果块IF语句中的逻辑表达式为假 则流程转到ELSEIF语句继续执行 ELSEIF块的后面可以有ELSE语句和ELSE块 也可以没有 而是另一个ELSEIF语句或ENDIF语句 8 在多分支处理中 应把机率较高的条件放在前面 说明 续 例 有一函数X t 随时间t变化的曲线 当输入时间t 求函数值 a 0 无定义 t 0 X t 输入A X0 T1 T2 T3 输入T 打印T和X的值 T T3 x 0 T2 T T3 x A T3 T T3 T2 T1 T T2 X A 0 T T1 X X0 A X0 T T1 T 0 无定义停止运 行 程序 READ A X0 T1 T2 T3READ TIF T GE T3 THENX 0ELSEIF T GE T2 THENX A T3 T T3 T2 ELSEIF T GE T1 THENX AELSEIF T GE 0 THENX X0 A X0 T T1ELSEWRITE NODEFINITION STOPENDIFEND 补充 给3个数A B C 请按从小到大的顺序将这3个数排序 A B C 输入A B C READ A B CIF A GT B THENT AA BB TENDIFIF A GT C THENT AA CC TENDIFIF B GT C THENT BB CC TENDIFWRITE A B CEND 程序 五 分块选择结构中的空块在分块条件语句中 THEN或ELSE后的语句块没有时 即称之为空块 例 若I 1 将其变为2 若为2将其变为1 若为其它则不作改变 试编程 READ IIF I EQ 1 THENI 2ELSEIF I EQ 2 THENI 1ELSEENDIFPRINT IEND 说明 空块前的ELSE也可省 但保留后更加清楚 六 块IF语句应用注意事项 1 不允许从IF块 ELSE块外把控制转移到IF块 ELSEIF块 ELSE块内 2 ELSE语句 ELSEIF语句不应有语句标号 即使有也不允许任何语句使用 例 IF THEN10 ELSEIF THEN20 ENDIFGOTO10GOTO20 3 若在IF块 ELSE块ELSEIF块中出现GOTO语句或其它转移语句 则会改变正常的执行顺序 例 IF X GT Y THENZ XGOTO10Y XELSEZ YGOTO10X YENDIF10PRINT Z 注 这种形式不符合结构化的原则 应尽量避免使用 块IF构造F90明确提出了块的概念 块是作为单元看待的一个可执行构造的序列 它可用于IF构造 CASE构造和DO构造中 对这三种构造都可命名 即标签 块的规则为 1 如果一个块中包含一个可执行构造 那么它必须完整地被包含在该块中 2 禁止从块的外部转入块的内部 可以在块的内部进行控制转移 也可以从块内转移到块的外部 3 块是可以嵌套的 IF构造的一般形式为 构造名 IF e1 THEN块1 ELSEIF e2 THEN 构造名 块2 ELSEIF en THEN 构造名 块n ELSE 构造名 块n 1 ENDIF 构造名 多重选择和CASE构造F90增加了CASE构造 其一般形式为 构造名 SELECTCASE case表达式 CASE case选择符 构造名 块 CASEDEFAULT 构造名 块 ENDSELECT 构造名 其中 case表达式是整型 字符型或逻辑型表达式 不能是实型和复型表达式 SELECTCASE是入口语句 ENDSELECT是出口语句 case选择符是case值范围表 它有以下四种形式 值表 表示等于该值 各值之间用逗号分开 下界 表示大于或等于该值 上界 表示小于或等于该值 下界 上界 表示在这两个值之间 包括等于 上面的四种表示方法可以混用 如 CASE 2 5 9 等价于CASE 2 3 4 5 9 CASEDEFAULT语句是可选的 当case表达式的值在case值范围以外时 执行CASEDEFAULT语句后面的块 程序执行时 CASE构造的控制机制 1 控制进入CASE构造后 先计算情况表达式的值 2 如果第一个CASE语句选择符值与情况表达式值相等则执行语句块1 转出口 3 如第一个选择符值不为情况表达式的值 再查下一个CASE语句的选择符值 满足执行语句块2 转出口 不满足再查下一个CASE语句的选择符值 直至全部情况选择符值都检查完 4 如果全部情况选择符值都不符情况表达式的值 且又有CASEDEFAULT语句 则执行该语句后的DEFAULT块 否则直接转出口 implicitnoneinteger score n0 0 n1 0 n2 0 n3 0 n4 0doread scoreif score100 thenprint 满分 n0 优 n1 良 n2 及格 n3 不及格 n4exit 例 统计学生考试成绩 100分为满分 85分以上为优 70 84为良 60 69为及格 59分以下不及格 elseselectcase score case 100 print 满分 n0 n0 1case 85 99 print 优 n1 n1 1case 70 84 print 良 n2 n2 1case 60 69 print 及格 n3 n3 1casedefaultprint 不及格 n4 n4 1endselectendifenddoEND CASE构造的规则 1 CASEDEFAULT语句最多只能有一句 2 case值必须与表达式的类型相同3 给定CASE构造中的case值范围不能有重叠 4 CASE块可以是空的 也可以包含其它块 其嵌套形式与块IF相同 5 CASE语句是一条单独的语句 例 错误语句CASE 0 59 PRINT 不及格 不能写在一行 正确写法 CASE 0 59 PRINT 不及格 例 块IF包含CASE块 if construct if a gt 0 thencase construct b selectcase b case 0 case 0 endselectcase construct belsecase construct c selectcase c case 0 case 0 endselectcase construct cendifif construct 有无错 case表达式为字符型例 设要编一程序 把学生按专业划分以便检索 专业分为天体物理 应用物理 理论物理三种 把每个专业应修的课程依次编成语句块1 块2 块3 构造名为DEPARTMENT 22 MAJOR 专业变量名为MAJOR 则CASE构造为 DEPARTMENT 22 MAJOR SELECTCASE MAJOR CASE AstronomicalPhysics 语句块1CASE AppliedPhysics 语句块2CASE TheoreticalPhysics 语句块3ENDSELECTDEPARTMENT 22 MAJOR则当变量MAJOR取值为 AppliedPhysics 时 执行语句块2 例如它的功能是打印出学生专业课程成绩 如此等等 例 字符型选择 character 1cmdcharkey input selectcase cmdchar case 0 print 文件数限于1 9 case 1 9 callRetrieveNumFiles cmdchar case A a callAddEntrycase D d callDeletEntrycase H h callHelpcasedefaultprint 键入错误 请键入H查看帮助 endselectkey inputEND case表达式为逻辑型当case表达式为逻辑表达式时 CASE语句中的情况选择符也要取逻辑值 真或假 由于它不可能取多于两个的值 因此在逻辑型的情况选择符内不允许写成一个值域范围 即始值 终值形式 例 设有一个关系表达式X 3 当成立时打印 YES 否则打印 NO CASE构造为 SELECTCASE X 3 CASE TRUE PRINT YES CASE FALSE PRINT NO ENDSELECT 作业 1 P96二 三 九 十2 读入一个整型变量N的值 用CASE构造编程 若N 1 2 3 5 则Y X N 4 8 则Y X2 N 6 7 则Y X3 其它情况则Y 0 打印Y值 3 设变量color light是字符型变量 表示灯光色彩 编一CASE构造 当该变量值是红色 RED 则打印STOP字样 当变量值是黄色 YELLOW 打印WAIT字样 当值是绿色 GREEN 打印CROSS字样
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!