Fortran基础教程.ppt_第1页
Fortran基础教程.ppt_第2页
Fortran基础教程.ppt_第3页
Fortran基础教程.ppt_第4页
Fortran基础教程.ppt_第5页
免费预览已结束,剩余382页可下载查看

下载本文档

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

文档简介

Fortran语言 Fortran77结构化程序设计 普通高校计算机基础教学课程 2020 3 24 2 说明第一章算法 略 第二章计算机和计算机程序 略 2020 3 24 3 第三章Fortran语言程序设计初步 2020 3 24 4 3 1Fortran语言的发展概况 FORmulaTRANslator公式翻译器Fortran语言是一种适合于科学和工程计算问题的程序设计语言 也是计算机高级语言发展史上使用最早的一种程序设计语言 2020 3 24 5 3 1Fortran语言的发展概况 Fortran语言的发展过程 1951年由约翰 贝克斯等人开始研究Fortran语言 1957年第一个Fortran程序在IBM704机上运行 1958和1962年先后推出Fortran 和Fortran 1966和1978年先后颁布Fortran66和Fortran77 1991年颁布了Fortran90 现在已经有了Fortran95 Fortran2003 2020 3 24 6 Fortran语言的特征 Fortran语言的最大特性是接近数学公式的自然描述 在计算机里具有很高的执行效率 易学 语法严谨 可以直接对矩阵和复数进行运算 自诞生以来广泛地应用于数值计算领域 积累了大量高效而可靠的源程序 很多专用的大型数值运算计算机针对Fortran做了优化 广泛地应用于并行计算和高性能计算领域 Fortran90 Fortran95 Fortran2003的相继推出使Fortran语言具备了现代高级编程语言的一些特性 2020 3 24 7 3 2简单的Fortran程序分析 例1 求一元二次方程x2 3x 5 6 0的根 并打印结果 利用公式 这里 a 1 b 3 c 5 6 2020 3 24 8 3 2简单的Fortran程序分析 编程如下 ctherootsofthequadraticequationa 1 0b 3 0c 5 6x1 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 2020 3 24 9 3 2简单的Fortran程序分析 执行结果 x1 1 30 x2 4 30 例2 试求3 6 9 的值 编程如下 2020 3 24 10 3 2简单的Fortran程序分析 主程序 子程序 cmainprogramcsubprogramj k 3 functionk n l k 6 k 1m k 9 i 2write j l m5if i le n thenendk k ii i 1执行结果 goto56720362880endifreturnend 2020 3 24 11 3 2简单的Fortran程序分析 Fortran程序的基本结构 一个Fortran源程序由一个或多个程序单位组成 每个程序单位以 end 语句结束 每个程序单位包括若干行语句行 执行语句和非执行语句行 非语句行 注释行 语句前可不设标号 也可根据需要设标号 各类语句在程序单位中的位置有一定规则 程序必须按规定格式书写 2020 3 24 12 3 3Fortran源程序的书写格式 Fortran77源程序必须按以下格式书写 每行只能在80列内书写 并把80列分为4个区 1 5列 标号区 1 5位无符号整数 第1列为 或 c 时 为注释行 第6列 续行标志区 非空格或非零字符 最多19个续行 7 72列 语句区 书写语句 一行只能写一条语句 73 80列 语句注释区 一般作编号注释 2020 3 24 13 3 4Fortran程序的编辑与运行 FortranPowerStation4 0集成开发环境简介 2020 3 24 14 3 4Fortran程序的编辑与运行 一 FortranPowerStation4 0的启动选 开始 程序 FortranPowerStation4 0 MicrosoftDeveloperStudio 二 创建项目工作间选 File New ProjectWorkspace ConsoleApplication 并输入项目工作间名称 如 aaa 和存放项目工作间的位置或路径 如 c for Create 2020 3 24 15 3 4Fortran程序的编辑与运行 三 给项目工作间添加和编辑文件打开指定的项目工作间 选 Insert FileintoProject 输入要添加的文件名 如 st01 for Add 然后按Fortran程序的书写规则编辑程序 四 编译项目工作间中的文件打开指定的文件 选 Build Compilest01 for 五 连编项目文件选 Build Buildaaa exe 六 运行项目文件选 Build Executeaaa exe 显示程序执行结果 2020 3 24 16 3 4Fortran程序的编辑与运行 注 若Fortran程序是由一个主程序文件和若干个子程序文件组成 则应将各文件添加到同一项目工作间 分别进行编译 然后连编和运行项目文件 七 打开项目文件选 File Open 在打开对话框文件类型下拉列表中选 ProjectWorkspace mdp 然后选项目工作间文件夹中的项目文件 2020 3 24 17 3 5常量 常量 在程序执行期间其值固定不变的量 Fortran处理六种类型的常量 整型常量 Integer 实型常量 Real 双精度常量 Doubleprecision 复型常量 Complex 逻辑型常量 Logical 字符型常量 Character 2020 3 24 18 3 5常量 3 5 1整型常量包括正 负整数和零 例 5 13 0 说明 在 16位 微机中 整数的取值范围为 215 215 1 32768 32767 在 32位 微机中 整数的取值范围为 231 231 1 2147483648 2147483647 2020 3 24 19 3 5常量 3 5 2实型常量 有二种表示形式 小数形式例 15 8 21 05 14 0 14 17 0 0 指数形式 通常表示较大或较小的数 例 100000000 1 0E 80 0000125 1 25E 05数字部分指数部分 2020 3 24 20 3 5常量 说明 一个数值用指数形式表示时有两种表达方式 一个基本实数后面跟指数部分 例 0 876 8 76E 1 2589 4 2 5894E 3 一个整数后面跟指数部分 例 0 876 876E 3 2589 4 25894E 1 2020 3 24 21 3 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 超出此范围时为 溢出 错误 2020 3 24 22 3 5常量 下列形式为不合法的指数形式 单独的小数点和单独的指数部分 例 E5 E10 指数部分只能是整数 不能带小数点 例 8E0 5 12 3E1 5 2020 3 24 23 3 6变量 变量 在程序执行期间其值可以改变的量 3 6 1变量的概念Fortran为每一个变量分配一个相应的存储单元 每个变量在每个时刻只能有一个确定的值 例 x 4 5xx 8 0 x注 在程序中用到的变量都必须要有确定的值 4 5 8 0 2020 3 24 24 3 6变量 3 6 2变量名变量名 标识一个变量所用的名字 命名规则 变量名的第一个字符必须是字母 在第一个字符后可跟1 5个字母或数字 例 x m1 total k123 2020 3 24 25 3 6变量 注意几点 变量名不区分大小写字母 例 TOTAL Total total代表同一变量 变量名中的空格不起作用 例 abc abc abc abc代表同一变量 变量名尽量做到 见名知义 AVER SUM Imax 允许变量名与语言中具有特定含义的字 保留字 同名 例 sin read open end 建议不要使用fortran中具有特定含义的字作变量名 2020 3 24 26 3 6变量 3 6 3变量的类型Fortran能处理各种类型的变量 不同类型的变量用来存放不同类型的数据 变量类型的说明 三种方式 隐含说明即以I j k l m n开头的变量为整型变量 以其它字母开头的变量为实型变量 I N规则 例 imax m5 number 为整型变量v h2 aver 为实型变量 2020 3 24 27 3 6变量 显式说明即用类型说明语句指定变量的类型 如 Integer 说明变量为整型变量Real 说明变量为实型变量Doubleprecision 说明变量为双精度变量Complex 说明变量为复型变量Logical 说明变量为逻辑型变量Character 说明变量为字符型变量 2020 3 24 28 3 6变量 如 Integerabc xyzrealimax k3logicala1 kpz 用implicit语句说明即说明用某一字母开头的变量为指定的类型 例 implicitinteger a b real k implicitinteger x z 2020 3 24 29 3 6变量 三种类型说明的优先级 高类型说明语句 显式说明 implicit语句说明低 I N规则 2020 3 24 30 3 7Fortran内部函数 在编制Fortran程序时 经常要用到一些基本的数学函数 如三角函数 指数函数 对数函数等 为方便用户 Fortran编译系统已提供了这些函数的计算程序 需要时即可调用 Fortran内部函数调用格式 函数名 自变量 2020 3 24 31 3 7Fortran内部函数 如 sin 90 3 14159 180 1 0sqrt 9 0 3 0abs 5 6 5 6int 6 75 6exp 3 0 20 085540Fortran77全部内部函数见附录 2020 3 24 32 3 7Fortran内部函数 注意几点 函数自变量 参数 必须用括号括起来 例 sinx cosx sin x cos x 函数自变量可以是常量 变量或表达式 例 exp 3 0 sin x cos x 有些函数的类型是由自变量的类型确定的 例 mod 8 0 3 0 2 0mod 8 3 2 三角函数的角度单位是 弧度 而不是 度 函数名分为 通用名 和 专用名 内部函数名一般用 通用名 2020 3 24 33 3 8Fortran算术表达式 Fortran77提供了四种表达式 算术表达式关系表达式逻辑表达式字符表达式算术表达式 将各运算元素 常量 变量 函数和数组等 用算术运算符连接起来的一个有值的式子 2020 3 24 34 3 8Fortran算术表达式 一 算术运算符及其优先级 算术运算符 五种 加 减 乘 除 乘方 算术运算符的优先级括号 函数 乘方 乘 除 加 减注 同级运算 先左后右 连续乘方时 先右后左 2020 3 24 35 3 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算术表达式 2020 3 24 36 3 8Fortran算术表达式 二 算术表达式书写规则 表达式中的各运算元素之间必须用运算符分隔 例 xyz x y z2 x y 2 x y 作任何运算的表达式只能写在一行 例 a b c d a b c d 2020 3 24 37 3 8Fortran算术表达式 两个运算符不能紧邻 例 a b a b a b 表达式一律用小括号 例 a x b y c a x b y c 2020 3 24 38 3 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 属同类量运算 2020 3 24 39 3 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 2020 3 24 40 3 9赋值语句 Fortran提供三类赋值语句 算术赋值语句逻辑赋值语句字符赋值语句一 算术赋值语句一般格式V e功能 把赋值号右边表达式的值 赋给赋值号左边的变量或数组元素 例 S 3 14159 r 2 2020 3 24 41 3 9赋值语句 二 算术赋值语句中的类型转换问题 赋值号两边类型一致时 直接赋值 例 k 355 赋值号两边类型不一致时 先计算 再转换 最后赋值 例 y1 6 2 y1的值为12 0 Imax 3 6 2 imax的值为7 7 2 7 2020 3 24 42 3 9赋值语句 注意几点 赋值号左边只能是变量或数组元素 不能为带运算符的表达式 例 3 a 6 x sin x 一个赋值语句只能给一个变量或数组元素赋值 例 a b c d 3 5 一个赋值语句执行后 赋值号左边变量的原值被右边表达式的值取代 例 x 1 0 x x 1 0 x的值为2 0 2020 3 24 43 3 10简单的输出语句 用户编制的程序必须要有输出语句 把结果显示或打印出来 Fortran提供了三种输出方式 表控格式输出 标准或固定格式输出 指定格式输出 无格式输出 二进制形式 适应磁盘文件 一 表控格式输出按Fortran编译系统隐含规定的格式输出 即系统根据输出数据的不同类型 自动给出相应的输出格式 2020 3 24 44 3 10简单的输出语句 二 表控格式输出语句一般格式 print 输出表列 write 输出表列 例1 print 56 8 125或write 56 8 125例2 print a b c或write a b c 2020 3 24 45 3 10简单的输出语句 例3 x 12 5y 90 5z x yprint x yprint z zend运行结果 12 50000090 500000Z 103 000000 2020 3 24 46 3 10简单的输出语句 整数的表控格式输出规定 每个整数占12列 数据打印在右端 左补空格 例 print 123 1128输出结果 123 1128 2020 3 24 47 3 10简单的输出语句 实数的表控格式输出规定 每个实数占16列 数据打印在右端 左补空格 例 print 15 4 321 45输出结果 15 400000 321 450000 2020 3 24 48 3 10简单的输出语句 当实数值的绝对值 107或 1时 按标准的指数形式输出 例 print 10000000 0 98输出结果 1 000000E 07 9 800000E 01 2020 3 24 49 3 11简单的输入语句 Fortran提供了三种输入方式 表控格式输入 自由格式输入 指定格式输入 无格式输入一 表控格式输入表控格式输入 根据变量的数据类型输入相应的数据形式 数据间以逗号或空格分隔的输入方式 2020 3 24 50 3 11简单的输入语句 二 表控格式输入语句一般格式 read 输入表列 read 输入表列 例1 read a b 若a 14 7 b 30 0 键盘输入 14 7 30 0 2020 3 24 51 3 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 2020 3 24 52 3 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 计算机将等待用户继续输入数据 2020 3 24 53 3 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 错 2020 3 24 54 3 11简单的输入语句 在输入数据时若出现 则终止对此read语句的输入 例 read x y z键盘输入 1 5 2 5 变量z的值为原值或为零 2020 3 24 55 3 12参数语句 parameter语句 一 parameter语句的功能为常量命名 即用一个符号代表一个常量 二 parameter语句一般形式Parameter p1 c1 p2 c2 pn cn 其中 pn 符号常量 cn 常量 2020 3 24 56 3 12参数语句 parameter语句 例 求半径为0 5m的圆面积和圆周长 编程如下 parameter r 0 5 pi 3 14159 s pi r 2h 2 0 pi rprint s hend 2020 3 24 57 3 12参数语句 parameter语句 注意几点 参数语句必须写在所有可执行语句之前 符号常量的命名规则及类型与变量相同 并遵循 I N规则 程序中不能给符号常量再赋值 2020 3 24 58 3 13pause语句 stop语句 end语句 一 pause语句 一般形式Pause n 注 n为1 5位正整数或字符常量 功能暂停程序的执行 一个程序单位可以有多个pause语句 2020 3 24 59 3 13pause语句 stop语句 end语句 例 parameter r 0 5 pi 3 14159 s pi r 2h 2 0 pi rpause 打印面积和周长 print s hend 2020 3 24 60 3 13pause语句 stop语句 end语句 二 stop语句 一般形式stop n 注 n为1 5位正整数或字符常量 功能终止程序的执行 一个程序单位可以有多个stop语句 2020 3 24 61 3 13pause语句 stop语句 end语句 三 end语句 一般形式end 功能对主程序 终止程序的执行和作为程序单位的结束标志 对子程序 返回调用程序和作为程序单位的结束标志 一个程序单位只能有一个end语句 2020 3 24 62 课后练习题 P75 76 第五 八 十一题 2020 3 24 63 第四章逻辑运算和选择结构 2020 3 24 64 计算机程序 程序设计的基本方法 计算机解决问题所需要的一系列代码化指令序列 计算机程序 程序 数据结构 算法即 程序就是在数据的某些特定的表示方式和结构的基础上 对抽象算法的具体描述 上述公式可扩充为 程序 数据结构 算法 程序设计方法 语言工具 2020 3 24 65 所谓面向过程的程序设计 是指利用面向过程的语言工具 如Basic Pascal Fortran和C等 进行程序开发的各项活动 程序设计的基本方法 面向过程的程序设计 优点 编程简单 结构性强 可读性好 程序执行时序特征明显 遵循这种结构的程序只有一个入口和一个出口 缺点 存在数据与程序模块的分离和程序的可重用性差等问题 2020 3 24 66 程序设计的基本方法 结构化程序设计方法 结构化编码在结构化程序设计中 任何复杂的算法 都可以由三种基本结构组成 在构造算法时 也仅以三种基本结构作为基本单元 遵循这种结构的程序只有一个输入口和一个输出口 模块化设计将一个复杂问题的程序分为若干个程序模块 每个模块完成一项特定功能 其中有一个主模块和若干个子模块 主模块控制各个子模块来实现整个程序的功能 自顶向下 逐步细化 2020 3 24 67 程序设计的基本方法 面向对象的程序设计 面向对象的程序设计是一种新的程序设计范型 它将一些新的理念和结构化程序设计中好的思想相融合 提供了一种全新的程序设计方法 2020 3 24 68 4 1算法及其表示方法 一 算法的概念算法 解决某一问题所采取的方法和步骤 计算机算法 计算机能够执行的算法 计算机算法的特征 有穷性 操作步骤是有限的 确定性 方法步骤是明确的 有效性 方法是正确的 步骤是完整的 必须有输入和输出 取得必要的信息 给出正确的结果 2020 3 24 69 4 1算法及其表示方法 Fortran是结构化程序设计语言 每个程序单位可由三种基本结构组成 顺序结构 分支选择结构 循环结构实践证明 任何复杂的问题都可以用这三种基本结构来描述 2020 3 24 70 4 1算法及其表示方法 二 算法的表示用N S流程图表示 由几种功能框组合而成 矩形框 用于表示顺序结构 如 若先执行语句A 再执行语句B A B 2020 3 24 71 4 1算法及其表示方法 例 若a 1 5 b 4 5 求a b的平方 画N S图 编程 A 1 5B 4 5C a b 2Print cend 1 5 a 4 5 b a b 2 c 打印c 结束 2020 3 24 72 4 1算法及其表示方法 三角框 用于表示分支选择结构 如 若P为条件 当P成立执行语句A 否则执行语句B 2020 3 24 73 4 1算法及其表示方法 L形框 用于表示循环结构 当型循环 P为条件 A循环体 如 若条件P成立 则执行循环体A 否则跳出循环体 2020 3 24 74 4 1算法及其表示方法 直到型循环 P为条件 A循环体 如 首先执行循环体A 若条件P不成立继续执行循环体A 直到条件P成立为止 2020 3 24 75 4 2关系表达式 关系表达式是构成选择结构判断条件的基本式子 它也是一种最简单的逻辑表达式 一 关系运算符 P80表4 1 gt 大于 ge 大于等于 eq 等于 lt 小于 le 小于等于 ne 不等于 2020 3 24 76 4 2关系表达式 二 关系表达式的一般形式 算术量 关系运算符 算术量 即 关系表达式是由关系运算符将两个算术量连接起来的式子 关系表达式的运算元素是算术量 结果是逻辑量 真 True 或假 False 2020 3 24 77 4 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 2020 3 24 78 4 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 2020 3 24 79 4 3逻辑表达式 关系表达式只能表达简单的关系 如 5 x 10就不能用关系表达式表达 此时要用逻辑表达式 2020 3 24 80 4 3逻辑表达式 一 逻辑表达式的一般形式 逻辑量 逻辑运算符 逻辑量 即 逻辑表达式是由逻辑运算符将两个逻辑量连接起来的式子 逻辑表达式的运算元素是逻辑量 结果也是逻辑量 真 True 或假 False 逻辑量包括逻辑常量 逻辑变量和关系表达式 2020 3 24 81 4 3逻辑表达式 二 逻辑常量两个 true 真 false 假 三 逻辑变量 用于存放逻辑常量的变量 逻辑变量可以通过赋值语句来接受逻辑常量的值 但在使用前 要进行类型说明 例 logicala ba true b false 2020 3 24 82 4 3逻辑表达式 四 逻辑运算符 and 逻辑与 or 逻辑或 not 逻辑非 eqv 逻辑等 同或 neqv 逻辑不等 异或 2020 3 24 83 4 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不为同一逻辑常量时 为真 2020 3 24 84 4 3逻辑表达式 六 逻辑表达式的运算次序 P84表4 5 运算次序为 括号 算术运算 关系运算 逻辑运算而逻辑运算 not and or eqv neqv 2020 3 24 85 4 3逻辑表达式 例1 写出下列条件的逻辑表达式 5 k 10k ge 5 and k le 10 f 3g或 f 5tabs 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 2020 3 24 86 4 3逻辑表达式 例2 若a 2 5 b 7 5 c 5 0 d 6 0 求下列逻辑表达式的值 a lt b and b lt c t f f 2020 3 24 87 4 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 2020 3 24 88 4 4用块if实现选择结构 有以下三种典型的块if选择结构 if 条件 then 块if语句 块 then块 endif endif语句 2020 3 24 89 4 4用块if实现选择结构 if 条件 then块1 then块 else块2 else块 endif 2020 3 24 90 4 4用块if实现选择结构 例 2X 3 X 2 Y X 5 X 2 编程如下 read xif x le 2 theny 2 x 3elsey x 5endifwrite x x y yend 2020 3 24 91 4 4用块if实现选择结构 if 条件1 then块1elseif 条件2 then块2 elseif块 elseif 条件n then块n else块 n 1 endif 2020 3 24 92 4 4用块if实现选择结构 说明 每个块if中可以完整地包含一个 或多个 块if结构 即构成块if的嵌套结构 如 if 条件1 thenif 条件1 then块1if 条件2 thenelse块2if 条件2 thenendif块2elseendif块1endifendif 2020 3 24 93 4 4用块if实现选择结构 一个块if语句必须和一个endif语句相对应 块if中的 then块 else块 和 elseif块 可为空块 2020 3 24 94 4 4用块if实现选择结构 例1 求一元二次方程ax2 bx c 0的根 当b2 4ac 0时有两个实根 b2 4ac 0时有两个复根 2020 3 24 95 4 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 ge sqrt d print x2 f i gx1 b e 2 0 a endifx2 b e 2 0 a endprint x1 x1print x2 x2else 2020 3 24 96 4 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 2020 3 24 97 4 4用块if实现选择结构 输入x truex 10false truex 0false truex 20false truex 40false truex 50false y 50 xy 0 打印y y 0 y 20 y 30 0 5x y 2x 20 2020 3 24 98 4 4用块if实现选择结构 源程序一 read xif x lt 50 0 thenif x lt 10 0 theny 50 0 xy 0 0elseelsey 0 0if x lt 0 0 thenendify 2 0 x 20 0endifelseendifif x lt 20 0 thenendify 20 0endifelseprint y yif x lt 40 0 thenendy 30 0 0 5 xelse 2020 3 24 99 4 4用块if实现选择结构 源程序二 read xprint y yif x lt 10 0 thenendy 0 0elseif x lt 0 0 theny 2 0 x 20 0elseif x lt 20 0 theny 20 0elseif x lt 40 0 theny 30 0 0 5 xelseif x lt 50 0 theny 50 0 xelsey 0 0endif 2020 3 24 100 4 5逻辑if语句 逻辑if语句也是一种选择结构 但与块if不同 主要表现在 只用一行表示一个选择结构 仅当条件成立时执行 并且只执行一条语句 逻辑if语句的一般形式 If 条件 语句例 if n le 100 n n 1 2020 3 24 101 4 5逻辑if语句 例 2X 3 X 2 Y X 5 X 2 编程如下 read xread xif x le 2 thenif x le 2 y 2 x 3y 2 x 3if x gt 2 y x 5elsewrite y yy x 5endendifwrite y yend 2020 3 24 102 课后练习题 P96 第一 三题 第四 五 七题 2020 3 24 103 第五章循环结构的实现 2020 3 24 104 第五章循环结构的实现 所谓循环 是指在程序执行过程中需要重复执行的程序段 在实际问题中 我们经常遇到循环 如 求 n n 无条件循环GOTO循环结构直到型循环条件循环当型循环计数型循环 2020 3 24 105 5 1用goto语句实现循环 goto语句的一般形式 goto其中 s1 语句标号 功能 程序执行到此语句时 无条件的转向标号为s1的语句去执行 例 求1 10的累加和 编写程序段 integerx sumx 0 0sum 0 010 x x 1sum sum xgoto10 2020 3 24 106 5 1用goto语句实现循环 如果我们把以上goto语句作为逻辑if语句中的执行语句 则就可以实现有条件的循环 即 integerx sum求1 10的累加和x 0 0sum 0 010 x x 1sum sum xif x lt 10 goto10print sumend 2020 3 24 107 5 2当型循环的实现 一 用块if和goto语句实现循环一般形式 s1if 条件 then标号块gotos1endif 所谓当型循环 是指执行循环体要依据事先给定的条件 当条件成立时执行循环 否则就不执行循环 2020 3 24 108 5 2当型循环的实现 编程如下 read nm 1i 110if i le n thenm m ii i 1goto10endifprint mend 例 求n 2020 3 24 109 5 2当型循环的实现 二 用dowhile语句实现当型循环一般形式dos1 while 条件 循环体s1 2020 3 24 110 5 2当型循环的实现 例 求n 编程如下 read nm 1i 1do10while i le n m m ii i 110continueprint mend 2020 3 24 111 5 3直到型循环的实现 一 用逻辑if语句实现直到型循环一般形式s1循环体if 条件 gotos1 所谓直到型循环 是指先执行循环体 再判断条件 如果条件为 假 真 继续执行循环 直到条件为 真 假 时终止循环 2020 3 24 112 5 3直到型循环的实现 例1 求n 编程如下 read nm 1i 110continuem m ii i 1if i le n goto10print mend 2020 3 24 113 5 3直到型循环的实现 编程如下 integersigns 1 0d 2 0sign 110sign 1 signt sign ds s td d 1if d le 100 0 goto10print send 例2 求的值 2020 3 24 114 当型与直到型循环的比较 当型循环直到型循环不同 先判断条件先执行循环体再执行循环体再判断条件 循环体至少被执行一次 循环结构关键 条件判断 改变条件的语句 2020 3 24 115 5 4用do语句实现循环 当循环的初值 终值和循环次数都已知时 可用do语句实现循环 用do语句实现的循环称为 do循环 do循环是由一个do语句和循环体组成 2020 3 24 116 5 4用do语句实现循环 一 一般形式dos v e1 e2 e3 循环体s说明 s 循环体终端语句的标号 v 循环控制变量 do变量 可为整型 实型或双精度 2020 3 24 117 5 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 2020 3 24 118 do循环执行过程P103图5 8 2020 3 24 119 r MAX INT e2 e1 e3 e3 0 v v e3 执行过程P103图5 7 并将其转换为循环变量的类型 2020 3 24 120 5 4用do语句实现循环 例如 求1 10的累加和 integerx sumsum 0DO10 x 1 10sum sum xx x 110continueprint sumend integerx sumx 0 0sum 010if x le 10 thenx x 1sum sum xgoto10endifprint sumend 2020 3 24 121 5 4用do语句实现循环 二 执行过程 分四种情形 当e2 e1且e3 0 当e2 e1且e3 0 2020 3 24 122 5 4用do语句实现循环 当e20 当e2 e1且e3 0 2020 3 24 123 5 4用do语句实现循环 编程如下 do10i 1 30read x10if x ge 60 print i xend 循环体 例1 从键盘输入30个学生的单科成绩 并将其中及格以上的学生序号和成绩打印出来 2020 3 24 124 5 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 2020 3 24 125 5 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是整型 e1e2且e3 0 则循环次数为0 由于实数在内存中存储的误差 v e1 e2 e3尽可能用整型量 2020 3 24 126 5 4用do语句实现循环 说明 e1 e2 e3的值在do循环体内不会改变 即使给表达式e1 e2 e3中的变量赋值也不影响循环次数例 m 10do10 i 1 m 3m 100 mprint i m10continueendr 10 1 3 3 4 2020 3 24 127 5 4用do语句实现循环 说明 循环终端语句必须是可执行语句 但除goto 块if else elseif endif end stop和return语句外 继续语句 continue语句 循环终端语句必须是可执行语句 那么 这种作为循环终端语句的语句具有双重作用 一是作为循环终端的标志 二是要完成自身的功能 因此影响了程序的可读性 Fortran用一个专门的语句作为do循环的终端语句 即continue语句 它本身不进行任何机器操作 2020 3 24 128 5 4用do语句实现循环 三 有关do循环的规定 在循环体内不允许对循环变量再赋值 但可以引用 例 do10 i 20 1 1i 2 i不合法k 2 i引用i 合法print i k10continue 2020 3 24 129 例2 do100 I 1 10 20print I 100continueif x gt 100 goto20 例1 do10 n 1 100 if n 2 ge 500 goto20 10continue 20print n n 2 5 4用do语句实现循环 三 有关do循环的规定 可从do循环体内转到循环体外 但不允许从循环外转到循环内 内外 错误 2020 3 24 130 5 4用do语句实现循环 三 有关do循环的规定 当退出do循环时 循环变量仍有定义 其值为离开循环时 循环变量的值三种情况 循环正常结束v e1 r e3 循环次数为0v e1 非正常退出循环例 m 100do10 i 1 100 3m 10 mprint i mif m gt 150 goto2010continue20print i mend 2020 3 24 131 5 4用do语句实现循环 例 计算100100100n k k2 1 k的值 k 1k 1k 1编程如下 ctocomputen mands n 0m 0s 0 0do50k 1 100n n km m k ks s 1 0 k50continueprint n m send 2020 3 24 132 5 4用do语句实现循环 四 do循环的嵌套在一个do循环中还可以包含一套或多套完整的do循环 这就是do循环的嵌套 一般形式 以双重循环为例 do10i 1 10 do20j 1 10 20continue 10continue 2020 3 24 133 5 4用do语句实现循环 五 关于do循环嵌套的规定 内外循环不允许交叉 do10i 1 10 do20j 1 10 10continue 20continue 2020 3 24 134 5 4用do语句实现循环 五 关于do循环嵌套的规定 在一个程序单位中 并列的do循环可用同名循环变量 而嵌套的do循环不允用同一变量作为循环变量 例 do10i 1 10 do20i 1 10 20continue 10continue使循环控制产生混乱 2020 3 24 135 5 4用do语句实现循环 例 打印 九九表 编程如下 do10i 1 9do20j 1 9k i jprint i j k20continueprint 10continueend 2020 3 24 136 5 4用do语句实现循环 六 三种循环形式的选择 循环次数可事先确定 优先用do循环 若循环体可能一次也不执行 则优先用当型循环若循环体至少执行一次 则当型 直到型循环都可 2020 3 24 137 课后练习题 P126 第二 三 八题 2020 3 24 138 第六章Fortran的数据结构 2020 3 24 139 6 1程序中的数据结构 程序代数表达式 程序 算法 数据结构对于同一个问题的求解 即一个程序的实现 可以采用不同的数据结构和不同的算法 选择合适的数据结构可以降低算法的复杂度 2020 3 24 140 6 1程序中的数据结构 在计算机高级语言中用数据类型来表示不同的数据结构 数据结构一般有以下三类 基本类型 Fortran支持 构造类型 Fortran支持 指针类型 Fortran90支持 2020 3 24 141 6 1程序中的数据结构 Fortran支持如下几种基本类型 整型 第三章 实型 第三章 双精度型复型字符型逻辑型 第四章 2020 3 24 142 6 1程序中的数据结构 Fortran支持如下几种构造类型 数组 第九章 记录 第十三章 文件 第十三章 2020 3 24 143 6 2双精度数据类型 由于实型数据提供的有效数字的位数有限 微型计算机一般提供7位 一方面满足不了精度的需要 另一方面还会产生误差 双精度类型以两倍于实型的字节 一般为8个字节 来存储数据 提供15 17位有效数字 解决了上述的问题 2020 3 24 144 6 2双精度数据类型 Fortran中双精度常数要用指数表示 如 12 3456789 1 2345656789D 1 0 123456789 1 23456789D 1注意 不可写成1 2345656789E 1Fortran中双精度变量使用前要用类型说明语句或IMPLICIT语句加以说明 如 doubleprecisionA B Cimplicitdoubleprecision a c 2020 3 24 145 程序举例 例6 1 求如下分数序列前20项的和 2020 3 24 146 程序如下 Doubleprecisiona b c ss 0 0D0a 1 0D0b 1 0D0c a bdo10 i 1 20s s c ba bb cc a b10continueprint s send 2020 3 24 147 6 3复型类型数据 Fortran中复型常数要用一个括弧中的两个实数来表示 第一个实数表示复数中的实部 第二个实数表示复数中的虚部 如 1 2 5i 1 0 2 5 5 4i 0 0 5 4 Fortran中复型变量使用前要用类型说明语句或IMPLICIT语句加以说明 如 complexA B Cimplicitcomplex a c 2020 3 24 148 6 3复

温馨提示

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

评论

0/150

提交评论