已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Fortran程序设计 第三讲 循环控制 回顾第二讲 逻辑运算 逻辑常量: .TRUE. .FALSE. 关系运算符: = = 5000的最小n值: INTEGER :i=1,s=0 DO s=s+i IF (s5000) EXIT i=i+1 END DO WRITE (*,*) i,s 3.2 DO WHILE循环 一般形式: DO WHILE(逻辑表达式) END DO 例3.2.1:用DO WHILE形式实现例3.1.1 INTEGER :i=1,s=0 DO WHILE(i=100) s=s+i i=i+1 END DO 3.3 迭代或计数循环 通常,以特定次数执行一个语句块可以采 用这样的形式: DO index=istart,iend,incr END DO index是整型变量,称为循环计数器或循环 控制变量 如果incr是1,也就是每循环一次,计数器 加1的话,incr可以省略 详解 三个循环参数istart,iend和incr可以是常量、变量或 表达式。如果是变量或表达式,其值是在循环开始前 进行计算,产生的数值用于控制循环 循环过程: 1.在DO循环执行的开始处,程序将数值istart赋给控制 变量index,如果index*incriend*incr,程序执行循 环体内的语句 2.在循环体内的语句被执行后,控制变量重新计算为 : index=index+incr 如果index*incriend*incr,程序再次执行循环体内的语句 1.只要index*incriend*incr,第二步就反复执行,当 该条件不满足时,就跳到DO循环的结尾处执行其后 面的第一条语句 循环次数的计算 DO i=1,10 END DO DO i=1,10,2 END DO DO i=1,10,-1 END DO DO i=3,-3,-2 END DO 3.3 计数循环的使用细节 循环体内的语句缩进以提高程序的可读性 控制变量不能在循环体内修改 计数器递增计数和递减计数都是可以的 循环控制变量和参数,应该总是整数 在循环体内,也可以采用IF () EXIT 语句随时 退出循环 如果循环正常结束,循环控制变量的值并 不是确定的(依编译器而定),所以,不 要依赖这个值 3.3 例程 用计数循环的方法来计算s=1+2+.+100 !例程3_3_1.f90 PROGRAM example3_3_1 INTEGER : i,s=0 DO i=1,100 s=s+i END DO WRITE(*,*) i,s END PROGRAM example3_3_1 3.4 CYCLE语句 如果CYCLE语句在循环体内执行,那么当前 循环马上会被中止,控制器将返回循环的 顶部,继续下一个循环 PROGRAM test_cycle INTEGER :i DO i=1,5 IF (i=3) CYCLE WRITE (*,*) i END DO WRITE (*,*) End of loop! END PROGRAM test_cycle CYCLE常用来在循环中跳过某些 特定的数,比如下面是跳过所有 偶数: PROGRAM test_cycle INTEGER :i DO i=1,10 IF (MOD(i,2)=0) CYCLE WRITE (*,*) i END DO WRITE (*,*) End of loop! END PROGRAM test_cycle 3.4 例程 计算1到100之间所有个位数不为6的数的和 ! 例程:3_4_1.f90 PROGRAM test_cycle INTEGER : i,s=0 DO i=1,100 IF (MOD(i,10)=6) CYCLE s=s+i END DO WRITE(*,*) i,s END PROGRAM test_cycle 3.5 EXIT语句 在3.1中DO 和IF () EXIT构成了一个循环,在 其它形式的循环中,EXIT语句仍可使用 EXIT语句的应用会使循环控制更加灵活 那么什么时候适用于EXIT语句呢? 例3.5.1:计算 我们写一个程序计算前100项的和: PROGRAM test_exit INTEGER :i REAL : s=0 DO i=1,100 s=s+(1./2)*i WRITE (*,*) i,s END DO WRITE (*,*) End of loop! END PROGRAM test_exit 可以看到,当循环进行到第25次的时候,和 数s已经收敛到1了,后面的循环没有意义, 那么,如果控制循环,当输出达到我们的要 求后就停止呢? 例3.5.2:利用EXIT完成例3.5.1 当前后两次计算得到的s之差小于我们给 定的某值时,选择退出循环: ! 例程3_5_2.f90 PROGRAM test_exit INTEGER :i REAL : s=0,t DO i=1,100 t=s s=s+(1./2)*i WRITE (*,*) i,s IF (ABS(s-t)=0.000001) EXIT END DO WRITE (*,*) End of loop! END PROGRAM test_exit 3.6 给循环命名 可以给循环指定一个名称,当循环比较大 而且出现了多重嵌套的时候,会很有用, 一般形式为: 名称: DO IF (逻辑表达式) CYCLE 名称 IF (逻辑表达式) EXIT 名称 END DO 名称 名称: DO index=istart,iend,incr IF (逻辑表达式) CYCLE 名称 IF (逻辑表达式) EXIT 名称 END DO 名称 CYCLE EXIT后面的名称是可选项,但是如果使用的话,必须和DO语句上的保持一致 3.7 嵌套循环 一个循环可以完全嵌入另外一个循环,这 种情况叫循环的嵌套 PROGRAM nested_loops INTEGER : i,j,product DO i=1,3 DO j=1,3 product=i*j WRITE (*,*) i,*,j,=,product END DO END DO END PROGRAM nested_loops PROGRAM nested_loops INTEGER : i,j,product outer:DO i=1,3 inner:DO j=1,3 product=i*j WRITE (*,*) i,*,j,=,product END DO inner END DO outer END PROGRAM nested_loops 起名字: 如果交换END DO后面的inner与outer, 会出错,嵌套必须是完全包含 例3.7.1:3_7_1.f90 如果CYCLE或EXIT语句出现在嵌套循环里, 而且没有命名,那么CYCLE或EXIT作用于哪 个循环呢? 属于包含它的最内层循环 我们将例3.7.1改写一下 执行结果? PROGRAM nested_loops INTEGER : i,j,product DO i=1,3 DO j=1,3 IF (j=2) CYCLE product=i*j WRITE (*,*) i,*,j,=,product END DO END DO END PROGRAM nested_loops 起个名字会有更多的灵活性 下面这个程序,将CYCLE指定给外层循环 运行结果是? PROGRAM nested_loops INTEGER : i,j,product outer:DO i=1,3 inner:DO j=1,3 IF (j=2) CYCLE outer product=i*j WRITE (*,*) i,*,j,=,product END DO inner END DO outer END PROGRAM nested_loops 3.8 IF与循环的嵌套 IF结构可以嵌入循环 循环也可以嵌入IF结构 如果嵌套,嵌入的结构必须完全在另外一 个结构之内 下面是错误的: IF (ab) THEN . DO i=1,3 . END IF . END DO DO i=1,3 . IF (ab) THEN . END DO . END IF 对前三讲内容的总结 程序的结构 以PROGRAM program_name开始 以END PROGRAM program_name结束 声明语句必须放在第一条可执行语句之前 程序分三种基本结构,以这三种基本结构 为起点,构成复杂的程序 对前三讲内容的总结 基本的数据类型 整型 INTEGER : i,j,k INTEGER : i=1,j=2 INTEGER,PARAMETER : UPPER=100 实型 REAL : a REAL : a=3.,b=4.1 REAL,PARAMETER : PI=3.14 字符 CHARACTER(len=6) : name CHARACTER(7),PARAMETER : NAME=Richard 对前三讲内容的总结 算术运算与逻辑运算 优先级 运算顺序 显示声明与隐式声明 IMPLICIT NONE 内置函数 对前三讲内容的总结 IF结构 IF (逻辑表达式) THEN . END IF IF (逻辑表达式) THEN . ELSE . END IF IF (逻辑表达式) THEN . ELSE IF(逻辑表达式) THEN . ELSE IF (逻辑表达式) THEN . ELSE . END IF 对前三讲内容的总结 CASE结构 SELECT CASE (case_expr) CASE (情况选择_1) 程序块1 CASE (情况选择_2) 程序块2 CASE DEFAULT 程序块n END SELECT case_expr 不能是实型 保留DEFAULT选择支是 良好的编程习惯 对前三讲内容的总结 循环结构 DO . . IF (逻辑表达式) EXIT . . END DO DO WHILE (逻辑表达式) . . END DO DO index=istart,iend,incr . . END DO uCYCLE与EXIT的用法 u循环嵌套(外层循环必须完全包含内层循环) uIF与循环嵌套 (必须是完全包含的) Fortran程序设计 第三讲 习题课 程序设计一:example1.f90 计算机中,计算三角函数的值采用计算三角函数的无穷级数的前N项得到近似 值,当误差小于计算机表示精度时,求得数值即为可用,展开表达式为: 其中N为保留在级数中的项数 编写一程序,读入x的度数,然后利用上述公式计算x的正弦值,并与内置的正 弦函数计算得到的值进行比较 程序设计二:example2.f90 一门大炮以初速度300米/秒,与地面成 theta角发射一发炮弹,假设空气的阻力总 是与运动的方向相反,且与速度的平方成 正比(阻力系数为k),炮弹出口时,阻力 为炮弹重量的2倍,试求出炮弹的最大高度 和水平射程 程序设计三:example3.f90
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 陕西省公务员2025年公共基础知识真题汇编卷
- 辽宁省公务员2025年公共基础知识历年真题集
- 2025年下半年嘉兴港区管委会招考合同制工作人员易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年唐山市路南区城管协管人员招考易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年吉林长春市绿园区事业单位招聘笔试易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年吉林通化集安市事业单位招聘急需紧缺人才5人(1号)易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年吉林辽源市事业单位招聘应征入伍高校毕业生67人易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年吉林省直事业单位招考易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年吉林安图县文化馆招聘员额工勤人员14人(第六批)易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年吉林公主岭市事业单位专项招聘高校毕业生305人(2号)易考易错模拟试题(共500题)试卷后附参考答案
- 5G通信模块设计项目分析方案
- 汽车维修入股协议合同
- 教育家精神课件
- 2026蒙牛「星动力」校园招聘笔试考试参考试题及答案解析
- 2025年机械行业安全生产考试题库(行业安全规范试卷)
- 2025年实验室检验质控知识考试试题及答案解析
- 2025贵州毕节市中级人民法院招聘聘用制法官助理30人考试参考题库及答案解析
- 公务员制度教案
- GB/T 7064-2017隐极同步发电机技术要求
- GB/T 40356-2021厨用刀具
- GB/T 304.9-2021关节轴承第9部分:通用技术规则
评论
0/150
提交评论