科学计算的语言-FORTRAN95



Similar documents
FY.DOC

Microsoft PowerPoint - OPVB1基本VB.ppt

untitled

<4D F736F F D D342DA57CA7DEA447B14D2DA475B57BBB50BADEB27AC3FEB14DA447B8D5C344>

幻灯片 1

CC213


Microsoft PowerPoint - plan06.ppt

z x / +/- < >< >< >< >< > 3 b10x b10x 0~9,a~f,A~F, 0~9,a~f,A~F, x,x,z,z,?,_ x,x,z,z,?,_ h H 0~9,_ 0~9,_ d D 0~7,x,X,z,Z


C/C++ - 函数

附件1-1

B(K,J)=B(K,J)*B(K,K) do I=1,N if(i.ne.k) then do J=1,N if(j.ne.k) then B(I,J)=B(I,J)-B(I,K)*B(K,J) do I=1,N if(i.ne.k) then B(I,K)=-B(I,K)*B(K,K) do K

untitled

CH01.indd

(\244j\257d\276\307\274\351_ C.indd_70%.pdf)

文 每 由 充 羊 * 亚 就 N 有 达 品 周 成 虽 驰 水 拟 希 公 下 它 当 上 希 仿 上 潘 注 可 当 缪 歇 传 湖 也 也 对 多 生 古 反 或 只 牛 分 可 妙 西 4 期 杨 宏 芹 发 展 之 源 与 流 7 e < x ; > u 0 V 转 义 可 表 示 短

四川省普通高等学校

Computer Architecture

,,,, (,, - ;, ;, ;, ;, ;,, - ;, - ) (,, ~ ),,,, (, ),,,, ( ), () () ( ),,,,,,,.,, :.,. (,, ) : ( ), ;( ), ;( ) ;( ), :.,. %(,, ),,,,, (,, - ) :( ) ( )

数量关系部分题目溯源:

## $%& %& ## () #) (( * (+++ () #) #) (+ (+ #) #) ( #, - #)). #))- # ( / / / / $ # ( * *..# 4 #$ 3 ( 5 ) ### 4 $ # 5, $ ## # 4 $# 5 ( %

C/C++ - 字符输入输出和字符确认

Microsoft PowerPoint - 07 派生数据类型

4.1 * / # ,500 5,548^ % ,340 11, , ,000 2, % , % 27.9 ** 7,340 1

中 国 管 理 科 学 年 则 基 于 离 差 最 大 化 的 思 想 综 合 利 用 各 种 赋 权 法 的 优 势 提 出 了 一 种 组 合 赋 权 方 法 求 解 最 优 规 划 模 型 来 确 定 组 合 权 重 王 中 兴 李 桥, 则 认 为 需 要 确 定 的 集 成 权 重 与 已

2 2 3 DLight CPU I/O DLight Oracle Solaris (DTrace) C/C++ Solaris DLight DTrace DLight DLight DLight C C++ Fortran CPU I/O DLight AM

深教〔2008〕107号

Ps22Pdf


C/C++程序设计 - 字符串与格式化输入/输出

投影片 1

! # % % & # # % #!& % &# % &# % % % # %& ( (!& (! & & % % #!! ) %&! *& % %! % %!! # % %!! %*!& % &# % &# ) ) ( % # # ) % ( (!& (! (!! # % % #!! # ( &!

2006年国家公务员招录考试行测真题(A)

新版 明解C言語入門編

Ps22Pdf

水 平 考 试 管 理 部 门 办 理 报 名 登 记 手 续, 由 县 ( 市 区 ) 学 业 水 平 考 试 管 理 部 门 建 立 学 业 水 平 考 试 考 籍 ( 三 ) 在 云 南 省 借 考 的 外 省 户 籍 考 生, 经 本 人 申 请, 持 户 籍 等 相 关 材 料, 到 借


Microsoft Word - 103鐵路佐級-國文(二)

背 景 资 料 水 浒 传 写 的 是 北 宋 宣 和 年 间 (1119~1121 前 后 ) 宋 江 等 聚 众 起 义 的 故 事 全 书 描 写 北 宋 末 年 以 宋 江 为 首 的 一 百 零 八 人 在 山 东 梁 山 泊 聚 义 的 故 事 故 事 在 宋 史 和 宋 人 笔 记 里

产 品 出 口 企 业 当 年 减 半 缴 纳 企 业 所 得 税 的 核 准 外 商 投 资 企 业 财 产 转 让 收 益 分 期 计 入 应 纳 税 所 得 额 的 核 准 外 商 投 资 企 业 技 术 开 发 费 加 计 扣 除 的 核 准 财 政

学 习 贯 彻 中 央 尧 省 尧 市 纪 委 全 会 精 神 专 栏 中 国 共 产 党 第 十 八 届 中 央 纪 律 检 查 委 员 会 第 六 次 全 体 会 议 公 报 渊 2016 年 1 月 14 日 中 国 共 产 党 第 十 八 届 中 央 纪 律 检 查 委 员 会 第 六 次

Microsoft Word - 临政办发12.doc

中共山东省委高校工委

标题

目 录 第 一 部 分 国 家 知 识 产 权 局 概 况 一 主 要 职 能 二 部 门 预 算 单 位 构 成 第 二 部 分 国 家 知 识 产 权 局 2016 年 部 门 预 算 表 一 财 政 拨 款 收 支 总 表 二 一 般 公 共 预 算 支 出 表 三 一 般 公 共 预 算 基

ᄐ↓ᅯᄎ2015ᅣ↑ᄇ﾿ᅢᅤᅯ녜 ̄

科学技术部2013年度部门预算

一、二○○二年学校工作的简要回顾

Microsoft Word - 白俄罗斯公司法汉语译文2015年7月15日修改版.docx

第 一 部 分 中 国 气 象 局 职 责 及 概 况 一 主 要 职 责 ( 一 ) 拟 定 气 象 工 作 的 方 针 政 策 法 律 法 规 发 展 战 略 和 长 远 规 划 ; 制 定 发 布 气 象 工 作 的 规 章 制 度 技 术 标 准 和 规 范 并 监 督 实 施 ; 承 担

数学与统计学院教师支部“两学一做”学习教育实施计划

无 锡 职 业 技 术 学 院 国 有 资 产 管 理 办 法 第 一 章 总 则 第 一 条 为 加 强 学 校 国 有 资 产 管 理, 合 理 配 置 和 有 效 使 用 国 有 资 产, 确 保 国 有 资 产 安 全 与 完 整, 保 障 和 促 进 学 校 各 项 事 业 发 展, 根

省安委会2015冬防工作方案.doc

南 昌 大 学 人 力 资 源 工 作 简 讯 2015 年 第 2 期 ( 总 第 27 期 ) 目 录 1 人 力 资 源 综 合 信 息 2 人 员 调 配 及 机 构 编 制 管 理 信 息 3 劳 资 工 作 信 息 4 师 资 管 理 信 息 5 高 层 次 人 才 及 队 伍 建 设

国家邮政局2010年部门预算

国家邮政局2010年部门预算

11韶关市人力资源和社会保障局权责清单

三亚市政府投资建设项目代建制管理工作介绍

<4D F736F F D20C9FABBB7B9FAD6D CBB6CABFB8B4CAD4B7BDB0B8312E646F63>

目 录 一 部 门 职 责... 1 二 预 算 编 报 范 围... 3 三 2013 年 部 门 预 算 报 表 及 情 况 说 明... 5 收 支 预 算 总 表 及 情 况 说 明... 5 收 入 预 算 表 及 情 况 说 明... 7 支 出 预 算 表 及 情 况 说 明... 1

标题

目 录 一 重 要 提 示... 3 二 公 司 主 要 财 务 数 据 和 股 东 变 化... 3 三 重 要 事 项... 6 四 附 录 / 22

目 录 引 言... 3 第 一 部 分 电 价 水 平 基 本 情 况...4 一 上 网 电 价...4 二 输 配 电 价...6 三 销 售 电 价...9 四 政 府 性 基 金 和 附 加...12 第 二 部 分 电 价 政 策 执 行 情 况...13 一 电 价 水 平 调 整 情

西安邮电学院本科教学工作简报

密 级:

市六届人大--次

目 录 前 言 第 一 章 近 年 来 合 同 行 政 监 管 及 相 关 工 作 改 革 创 新 情 况 第 二 章 2014 年 合 同 行 政 监 管 及 相 关 工 作 情 况 第 一 节 合 同 格 式 条 款 监 管 一 银 行 业 电 信 业 合 同 格 式 条 款 专 项 整 治 二

中国文联部门预算


( 十 ) 其 他 会 计 工 作 第 四 条 单 位 不 得 任 用 ( 聘 用 ) 不 具 备 会 计 从 业 资 格 的 人 员 从 事 会 计 工 作 不 具 备 会 计 从 业 资 格 的 人 员, 不 得 从 事 会 计 工 作, 不 得 参 加 会 计 专 业 技 术 资 格 考 试

附 件 : 顺 德 区 2015 年 高 中 阶 段 学 校 招 生 考 试 工 作 意 见 根 据 佛 山 市 顺 德 区 教 育 事 业 发 展 十 二 五 规 划 2015 年 顺 德 区 教 育 工 作 意 见 的 文 件 精 神 和 上 级 教 育 主 管 部 门 工 作 要 求, 结 合

<C1ACD6DDCAD0CAD0B3A1BCE0B6BDB9DCC0EDBED6C8A8D4F0C7E5B5A5A3A8B9ABCABEA3A92E786C73>

Microsoft Word - Future CEDAW C CHN 7-8.doc


国家发展改革委法治机关建设规划( 年)

烟台经济技术开发区政府采购竞争性磋商文件

<4D F736F F D20342E31332D C4EACCECBDF2CAD0C6D5CDA8B8DFB5C8D1A7D0A3D5D0C9FABFBCCAD4B9A4D7F7B9E6B6A82DCEC4BCFEB8E52E646F63>

2014 年 12 月 16 日 广 西 春 茂 投 资 股 份 有 限 公 司 ( 原 名 广 西 汽 牛 农 业 机 械 股 份 有 限 公 司, 以 下 简 称 春 茂 股 份 挂 牌 公 司 公 司 ) 召 开 2014 年 第 五 次 临 时 股 东 大 会, 通 过 向 特 定 对 象

四、实施步骤

Microsoft Word - 面向合格投资者公开发行公司债券上市预审核反馈意见公告(截至2015年10月8日)

律 师 执 业 必 须 以 事 实 为 根 据, 以 法 律 为 准 绳 律 师 执 业 应 当 接 受 国 家 社 会 和 当 事 人 的 监 督 律 师 依 法 执 业 受 法 律 保 护, 任 何 组 织 和 个 人 不 得 侵 害 律 师 的 合 法 权 益 第 四 条 司 法 行 政 部

(Microsoft Word - \270t\270g\254\354\305\252\270g\274\372\300y\255p\271\ docx)

自 觉 实 践 科 学 发 展 观, 扎 实 推 进 管 理 服 务 工 作 四 川 大 学 档 案 馆 ( 校 史 办 公 室 )2007 年 上 半 年 工 作 总 结 2007 年 上 半 年, 四 川 大 学 档 案 馆 ( 校 史 办 公 室 ) 在 学 校 党 委 行 政 领 导 和 上

2014


第 一 部 分 广 州 市 广 播 电 视 大 学 概 况 一 学 校 的 主 要 任 务 和 业 务 范 围 根 据 市 编 委 的 批 复, 广 州 市 广 播 电 视 大 学 为 市 局 级 事 业 单 位, 归 口 市 教 育 局 管 理 主 要 承 担 以 下 任 务 : ( 一 ) 承

Microsoft Word - 关于印发《云南保险业高级管理人员任职资格考试办法》的通知

<4D F736F F D20CBD5D6DDBFC6BCBCD1A7D4BAB8DFB5C8D1A7D0A3BDCCCAA6D7CAB8F1C8CFB6A8B9A4D7F7CAB5CAA9D2E2BCFB2E646F63>

自评报告合成.doc

第一部分 界定和测量歧视


一 前 言 2 作 為 我 國 儒 家 經 典 及 十 三 經 之 一, 孟 子 流 傳 千 年 不 輟, 足 以 證 明 其 對 中 華 文 化 的 重 要 性 與 影 響 力, 除 了 道 德 文 化 意 識 的 開 發, 也 弘 揚 仁 政 王 道 的 政 治 觀, 大 多 數 人 都 肯 定

法 工 作 计 划 滨 州 市 安 全 生 产 监 督 管 理 局 2016 年 2 月 4 日 ( 此 件 主 动 公 开 ) 2


附件3

关于印发西北政法大学“十二五”

君泰所 稿纸

的 权 利 义 务, 依 照 本 法 在 基 金 合 同 中 约 定 基 金 管 理 人 基 金 托 管 人 依 照 本 法 和 基 金 合 同 的 约 定, 履 行 受 托 职 责 通 过 公 开 募 集 方 式 设 立 的 基 金 ( 以 下 简 称 公 开 募 集 基 金 ) 的 基 金 份

关 于 建 立 失 联 ( 异 常 ) 私 募 机 构 公 示 制 度 的 通 知 私 募 基 金 登 记 备 案 相 关 问 题 解 答

Transcription:

科 学 计 算 的 语 言 -FORTRAN95 目 录 第 一 篇 闲 话 第 1 章 目 的 是 计 算 第 2 章 FORTRAN95 如 何 描 述 计 算 第 3 章 FORTRAN 的 编 译 系 统 第 二 篇 计 算 的 叙 述 第 4 章 FORTRAN95 语 言 的 形 貌 第 5 章 准 备 数 据 第 6 章 构 造 数 据 第 7 章 声 明 数 据 第 8 章 构 造 表 达 式 第 9 章 基 本 计 算 ( 一 ) 赋 值 语 句 第 10 章 基 本 计 算 ( 二 ) 选 择 控 制 结 构 第 11 章 基 本 计 算 ( 三 ) 循 环 控 制 结 构 第 三 篇 计 算 任 务 的 剖 分 与 组 合 第 12 章 程 序 的 单 位 第 13 章 过 程 及 其 通 讯 第 14 章 固 有 过 程 第 15 章 通 讯 第 16 章 数 据 文 件 的 管 理 第 17 章 数 据 文 件 的 编 辑 附 录 A. 语 句 B. 固 有 过 程 C. 语 法 参 考 文 献 J. Adams, W. Brainerd, J. Martin, and J. Wagener. Fortran 95 Handbook. ALL the documents of krsna.lamost.org are made available under the terms of the Creative Commons Attribution License.

第 一 篇 闲 话 中 国 数 学 的 经 典 著 作 大 都 以 依 据 不 同 方 法 或 不 同 类 型 分 成 章 节 的 问 题 集 的 形 式 出 现 每 一 个 别 问 题 又 都 分 成 若 干 个 条 目 : 条 目 一 是 问, 提 出 有 具 体 数 值 的 问 题 ; 条 目 二 是 答, 给 出 这 一 问 题 的 具 体 数 值 答 案 ; 条 目 三 称 为 术, 一 般 说 来 乃 是 解 答 与 条 目 一 同 种 类 型 问 题 的 普 遍 方 法, 实 际 上 就 相 当 于 现 在 计 算 机 科 学 中 的 算 法, 但 有 时 也 相 当 于 一 个 公 式 或 一 个 定 理 ; 条 目 四 是 注, 说 明 术 的 依 据 与 理 由, 实 质 上 相 当 于 一 种 证 明 ; 宋 元 以 来, 可 能 是 由 于 印 刷 术 的 发 达, 往 往 加 上 条 目 五 草, 记 述 依 据 术 得 出 答 案 的 详 细 计 算 过 程 早 在 九 章 算 术 中, 第 八 章 方 程 章 全 章 就 是 线 性 联 立 方 程 组 的 解 法 依 刘 微 注 : 并 列 为 行, 故 谓 之 方 程 又 说 : 令 每 行 为 率, 二 物 者 再 程, 三 物 者 三 程, 皆 如 物 数 程 之 当 时 以 筹 作 算, 依 题 意 将 数 据 按 物 数 排 成 各 行, 然 后 进 行 运 算 中 学 教 科 书 解 线 性 方 程 组 的 消 元 法, 最 早 即 见 之 于 九 章 算 术 数 学 在 中 国 古 时 历 来 称 为 算 术 这 正 好 反 映 了 中 国 古 算 构 造 性 计 算 性 与 机 械 化 的 特 色 数 学 不 仅 为 了 应 用, 即 使 为 了 在 纯 数 学 范 畴 内 获 得 具 体 结 果, 也 一 不 能 无 算, 二 必 须 有 术 中 国 古 代 算 术 的 思 想 与 方 法, 正 好 与 近 代 计 算 机 的 使 用 融 合 无 间, 也 必 将 因 此 而 重 返 青 春, 以 另 一 种 崭 新 面 貌 在 未 来 的 数 学 发 展 中 扮 演 重 要 角 色 [1] ---- 吴 文 俊 对 中 国 传 统 数 学 的 再 认 识 [1] 吴 文 俊, 中 科 院 院 士, 我 国 最 卓 越 的 现 代 数 学 家 之 一, 在 拓 扑 学 等 领 域 取 得 世 界 性 成 就, 近 年 积 极 推 动 数 学 机 械 化 领 域 的 发 展 第 1 章 目 的 是 计 算 我 们 这 本 书 描 述 了 一 门 语 言 不 幸 的 是 语 言 很 难 成 为 我 们 的 爱 好, 更 何 况 FORTRAN 语 言 也 无 法 仿 效 英 语, 能 够 被 某 些 英 语 大 师 成 功 地 转 换 为 一 种 疯 狂 因 此 几 乎 每 一 个 学 习 过 编 程 语 言 的 人 都 会 有 一 种 痛 苦 地 记 忆, 那 就 是 一 种 极 端 缺 乏 趣 味 的 痛 苦, 因 为 很 容 易 我 们 就 会 忘 记 这 种 语 言 的 用 处 显 然, 如 果 一 种 工 具 连 用 处 都 不 是 那 么 明 显 的 话, 哪 里 还 谈 得 上 给 人 带 来 乐 趣 呢? 所 以 要 想 在 FORTRAN 语 言 的 学 习 过 程 当 中 不 至 于 总 是 遭 遇 无 聊, 唯 一 的 解 救 之 途 就 是 一 开 始 就 要 找 到 学 习 它 的 绝 对 充 足 的 理 由, 并 且 在 学 习 过 程 中 还 会 不 得 不 反 复 地 依 靠 这 个 理 由, 来 说 服 自 己 需 要 更 加 有 耐 心, 更 加 能 够 忍 受 烦 琐 和 约 定, 逐 渐 地, 也 许 我 们 能 够 从 FORTRAN 语 言 的 惊 人 表 达 能 力 当 中, 体 会 到 一 种 新 的 看 待 世 界 的 角 度, 这 大 概 会 是 我 们 享 受 那 么 多 的 枯 燥 之 后,

所 能 够 得 到 的 最 佳 回 报 所 以 我 们 不 得 不 在 进 入 正 题 之 前, 扯 点 闲 话, 看 看 学 习 FORTRAN 的 理 由 何 在 1.1 始 于 计 算, 终 于 计 算 在 荒 莽 的 历 史 尽 头, 我 们 常 常 听 说 人 类 之 所 以 能 够 凭 借 虚 弱 的 身 躯, 一 次 又 一 次 地 打 退 其 他 凶 猛 动 物 的 猖 狂 进 攻, 而 终 于 成 就 为 今 日 当 之 无 愧 的 万 兽 之 王, 这 个 原 因 有 很 多 种 解 释, 比 如 说 是 劳 动, 说 是 手, 说 是 大 脑, 莫 衷 一 是, 各 有 各 的 理 论 和 证 据, 确 实 是 个 很 难 取 得 定 论 的 问 题, 因 此 我 想 提 出 一 种 新 的 解 释, 大 概 是 不 会 遭 到 立 刻 的 覆 灭 性 打 击 人 类 的 进 化 始 于 计 算, 我 相 信 在 有 关 非 洲 黑 猩 猩 的 纪 录 片 里 面, 可 以 看 到 黑 猩 猩 也 会 用 手 使 用 工 具, 一 个 黑 猩 猩 家 庭 为 了 生 活 也 勤 于 劳 动, 一 个 黑 猩 猩 群 落 社 会 里 面 的 形 形 色 色 的 政 治 行 为, 显 示 它 们 的 大 脑 也 不 是 很 闲, 但 有 一 次 我 看 到 黑 猩 猩 们 抢 香 蕉 时, 总 是 把 自 己 已 经 抢 到 手 的 香 蕉 给 弄 丢 了 而 无 知 觉, 突 然 觉 得 它 们 最 缺 乏 的 也 许 是 算 数 的 能 力 所 以 我 想, 人 类 的 起 源 一 定 跟 计 算 有 莫 大 的 关 系 当 然 这 些 都 是 戏 说 而 已, 不 过 如 果 说 人 类 的 科 学 是 从 计 算 开 始 的, 应 该 是 不 会 有 太 大 的 争 议 的 也 许 有 人 说 人 类 的 科 学 活 动 应 该 是 起 源 于 观 察, 但 从 动 物 行 为 学 的 角 度 来 看, 观 察 这 种 行 为 是 很 难 界 定 的, 而 计 算 则 是 非 常 好 界 定 的 行 为, 因 为 最 原 始 的 计 算 行 为 显 然 应 该 就 是 数 数 可 以 想 像, 当 人 类 开 始 意 识 到 自 我 在 这 个 世 界 的 孤 独 存 在 时, 对 于 日 月 星 辰 和 风 雨 雷 电 的 无 常 和 力 量 该 是 多 么 地 恐 惧 啊! 而 人 类 把 自 己 从 这 种 恐 惧 当 中 解 救 出 来 的 第 一 个 方 法 应 该 就 是 算 数 算 数 导 致 了 人 类 最 早 的 科 学 活 动, 即 天 文 学 和 几 何 学 人 们 从 对 日 月 星 辰 的 计 数 当 中 发 现 了 天 体 的 运 行 是 有 常 的, 而 不 是 什 么 不 可 琢 磨 的 妖 魔 鬼 怪 在 主 宰 ; 从 对 土 地 与 山 河 的 度 量 中 建 立 了 明 确 的 几 何 概 念, 从 而 对 自 己 所 生 活 的 世 界 开 始 了 真 正 的 理 解 而 这 种 理 解 活 动 一 旦 开 始, 就 无 法 停 止 了, 演 变 至 今, 就 构 成 了 我 们 人 类 最 值 得 自 豪 的 成 就 - 科 学 科 学 的 历 史 表 明 了 它 的 基 础, 就 是 计 算 如 果 我 们 只 是 一 味 地 观 察, 我 们 会 纪 录 下 来 大 量 的 经 验, 然 而 却 无 法 理 解 这 些 经 验 的 含 义, 更 进 一 步, 对 于 经 验 有 了 总 结 归 纳 之 后, 哪 怕 是 进 行 计 算 的 确 切 程 度 不 同, 也 会 导 致 不 同 的 对 于 自 然 的 理 解 一 个 很 著 名 的 例 子, 就 是 太 阳 系 行 星 的 运 动 的 问 题 对 于 古 人 来 说, 所 谓 行 星 的 意 思 就 是 那 些 星 星 是 相 对 于 恒 星 在 明 显 地 运 动, 在 漫 天 的 相 互 位 置 不 变 的 恒 星 的 对 比 之 下, 很 少 的 这 种 匆 匆 行 者 是 非 常 引 人 注 目 的 于 是 很 早 开 始 人 们 就 纪 录 这 些 行 星 的 运 行 轨 道 在 古 希 腊 时 代, 最 有 名 的 关 于 这 些 行 星 运 动 的 研 究 是 托 勒 密 完 成 的, 他 对 有 关 行 星 的 纪 录 数 据 进 行 了 计 算, 得 到 了 一 个 极 其 圆 满 的 行 星 运 动 模 型, 即 以 地 球 为 宇 宙 中 心, 行 星 围 绕 地 球 做 严 格 圆 周 运 动 现 在 看 来, 他 的 观 测 数 据 肯 定 不 会 是 很 精 确, 而 他 的 计 算 也 不 会 很 准 确, 一 直 到 开 普 勒, 在 获 得 了 非 常 精 确 的 行 星 轨 道 运 行 的 数 据 的 基 础 上, 进 行 了 大 量 的 计 算, 最 终 得 到 了 革 命 性 的 开 普 勒 三 定 律 接 下 来 牛 顿 出 场 了, 他 更 是 一 个 计 算 天 才, 正 是 通 过 计 算, 从 开 普 勒 三 定 律 获 得 了 他 的 最 伟 大 的 发 现, 万 有 引 力 定 律 然 后 还 是 通 过 计 算, 我 们 现 在 可 以 运 用 牛 顿 万 有 引 力 公 式 的 计 算 而 把 脚 印 留 到 月 球 的 寂 寞 沙

尘 上 还 有 一 个 非 常 独 特 的 例 子, 就 是 中 国 的 古 代 科 学 和 技 术, 更 是 强 烈 地 依 赖 计 算 相 比 于 古 希 腊, 中 国 的 古 代 数 学 几 乎 完 全 是 以 计 算 为 中 心 的, 翻 开 中 国 的 古 代 数 学 书, 一 个 鲜 明 的 特 点 就 是 几 乎 完 全 是 针 对 问 题 的 数 学 计 算 方 面 的 内 容, 而 很 少 有 古 希 腊 传 统 的 公 理, 定 理 与 证 明 实 际 上, 古 代 中 国 在 技 术 上 一 直 领 先 于 世 界, 很 难 说 跟 这 种 重 视 计 算 的 风 格 没 有 关 系 其 中 最 有 名 的 例 子 就 是 祖 冲 之 关 于 圆 周 率 的 计 算, 而 我 们 现 在 都 很 清 楚, 祖 冲 之 的 计 算 不 仅 是 为 圆 周 率 提 供 了 一 个 远 比 西 方 要 精 确 的 具 体 数 值, 更 重 要 的 是 提 供 了 一 种 非 常 通 用 的 计 算 方 法, 即 一 种 近 似 积 分 计 算, 而 这 种 计 算 方 法 对 于 古 代 中 国 的 技 术 进 步 的 重 要 作 用, 正 是 一 个 表 明 计 算 的 重 要 性 的 典 范 如 果 说 计 算 在 科 学 的 早 期 发 展 中 扮 演 了 关 键 的 作 用, 那 么 我 们 还 是 可 以 说 计 算 仍 然 在 现 代 科 学 技 术 扮 演 着 关 键 的 角 色 固 然 现 代 的 科 学 技 术 领 域 广 阔 而 渊 深, 然 而 哪 里 没 有 计 算 的 身 影 呢? 甚 至 在 某 些 科 学 哲 学 家 的 看 法 里 面, 能 否 进 行 计 算 是 衡 量 一 个 理 论 是 否 已 经 成 为 科 学 的 一 个 部 门 的 标 准 也 许 这 种 说 法 不 免 偏 激, 但 是 计 算 对 于 科 学 与 技 术 的 意 义, 确 实 是 一 个 深 刻 的 问 题 我 们 不 妨 考 察 一 下 物 理 学 里 面 计 算 所 占 据 的 地 位, 也 许 有 助 于 更 深 地 理 解 这 个 问 题 几 乎 是 一 直 到 十 九 世 纪, 物 理 学 还 是 以 实 验 为 主 要 内 容, 进 入 二 十 世 纪 之 后, 一 场 物 理 学 革 命 飞 快 地 竖 立 了 理 论 物 理 学 的 丰 碑, 足 以 与 传 统 的 实 验 物 理 学 分 庭 抗 礼 而 这 种 局 面 在 二 战 时 期 就 开 始 改 变, 二 战 后 在 实 验 物 理 与 理 论 物 理 之 外, 计 算 物 理 鼎 足 而 立, 导 致 这 种 变 局 的 最 关 键 的 因 素 就 是 电 子 计 算 机 的 发 明 在 计 算 机 没 有 发 明 之 前, 人 们 不 得 不 采 取 各 种 方 式 来 回 避 过 于 庞 大 的 计 算 问 题, 而 大 量 的 关 键 问 题, 又 非 得 进 行 庞 大 的 计 算 不 可, 以 物 理 学 为 例, 一 旦 我 们 透 彻 地 解 决 了 线 性 问 题 之 后, 接 踵 而 来 的 就 是 远 比 线 性 现 象 更 为 广 泛 的 非 线 性 现 象, 对 于 非 线 性 问 题, 我 们 已 经 掌 握 的 解 析 方 法 极 其 贫 乏, 这 就 逼 迫 我 们 走 上 直 接 计 算 之 路 而 除 了 非 线 性 问 题 之 外, 物 理 学 乃 至 整 个 自 然 科 学 看 待 世 界 的 方 式 都 是 原 子 式 的, 即 我 们 总 是 可 以 把 一 个 现 象 理 解 为 它 的 组 成 成 分 的 相 互 作 用 的 结 果, 于 是 我 们 就 有 了 分 子, 原 子 等 基 本 的 科 学 观 念, 这 种 做 法 一 直 都 是 充 满 胜 利 的, 然 而 这 种 胜 利 也 是 伴 随 着 沉 重 代 价 的, 即 当 我 们 重 新 面 对 复 杂 现 象 时, 不 得 不 从 它 的 组 成 成 分 开 始 考 虑, 这 就 是 统 计 物 理 学 的 基 本 思 想, 显 然 这 种 做 法 给 我 们 带 来 了 繁 重 的 计 算 任 务, 因 为 迄 今 为 止, 我 们 人 类 对 于 一 个 包 含 超 过 了 3 个 的, 具 有 相 互 作 用 的 成 员 的 系 统 的 精 确 解 析 求 解, 已 经 是 有 点 一 筹 莫 展 了, 更 何 况 常 见 的 那 些 动 辄 包 含 了 成 千 上 万 成 员 的 系 统 呢? 因 此 在 很 大 一 部 分 情 况 下, 我 们 唯 一 的 选 择, 就 是 直 接 的 计 算 因 此 我 们 可 以 说, 计 算 确 实 是 科 学 的 基 石 之 一 至 于 我 们 所 生 活 的 这 个 几 乎 完 全 由 科 学 技 术 所 塑 造 的 世 界, 哪 里 没 有 计 算 的 身 影 呢? 如 果 说 计 算 帮 助 我 们 理 解 了 自 然, 进 一 步 我 们 还 可 以 说 计 算 创 造 了 我 们 的 生 活 任 何 一 个 科 学 上 的 对 于 自 然 的 新 的 理 解, 要 转 变 为 为 人 所 用 的 技 术 时, 基 本 的 途 径 就 是 计 算 道 理 很 显 然, 当 我 们 要 制 造 一 种 自 然 界 从 未 出 现 过 的 物 品 时, 我 们 需 要 的 是 具 体 的 制 造 数 据, 而 不 能 只 是 一 堆 公 式, 那 么 数 据 从 哪 里 来 呢? 当 然 只 能 从 对 公 式 的 计 算 得 来 因 此 我 们 可 以 把 计 算 理 解 为 理 论 的 实 现 途 径 即 理 论 无 论 是 要 反 映 真 实 世 界, 还 是 要 体 现 到 我 们 的 实 际 物 品 上, 它 都 需 要 通 过 一 条 叫 计 算 的 路, 理 论 武 装 了 我 们 的 大 脑, 而 计 算 则 创 造 了 我 们 的 世 界 所 以 我 们 可 以 说, 人 类 的 历 史, 最 早 是 始 于 计 算, 而 这 个 历 史 的 实 现 的 最 前 沿, 则 仍 然 是 终 于 计 算

1.2 描 述 计 算 的 语 言 长 久 以 来, 人 类 的 计 算 都 是 依 靠 自 己 来 完 成 的, 但 如 果 仔 细 考 虑 一 下, 就 会 发 现 计 算 的 实 质 是 把 一 个 经 过 清 楚 的 分 析, 明 确 了 求 解 的 方 法 的 问 题, 分 解 为 明 确, 可 行, 而 有 限 的 步 骤, 显 然 这 种 工 作 本 质 上 是 机 械 性 的, 如 果 把 已 经 得 到 求 解 方 法 的 问 题 还 交 给 人 脑 来 计 算, 显 然 有 浪 费 人 力 之 嫌 ; 从 另 外 一 个 方 面 来 讲, 往 往 一 个 需 要 专 门 加 以 计 算 的 问 题, 也 是 一 个 需 要 进 行 庞 大 的 计 算 的 问 题, 庞 大 到 人 力 已 经 难 以 胜 任 的 程 度 因 此 这 两 个 方 面 都 要 求 人 类 发 明 能 够 进 行 计 算 的 机 器, 这 就 直 接 导 致 了 计 算 机 的 发 明 今 天 当 我 们 面 临 需 要 计 算 的 问 题 时, 对 付 问 题 的 就 不 再 只 是 一 个 大 脑, 而 是 一 个 大 脑 加 上 一 台 机 器 所 以 接 下 来 的 问 题 就 是 如 何 让 大 脑 与 计 算 机 协 同 工 作, 使 得 大 脑 能 够 专 门 用 来 寻 求 问 题 的 算 法, 而 计 算 机 能 够 被 用 来 计 算 解 这 种 协 同 工 作 的 第 一 个 要 求 就 是 人 需 要 能 够 把 自 己 对 于 问 题 的 计 算 过 程 的 理 解 表 示 为 机 器 的 机 械 运 动 首 先 人 对 于 问 题 及 其 求 解 的 理 解 是 可 以 非 常 清 晰 地 依 靠 数 学 语 言 来 加 以 描 述 说 明 的 然 后 我 们 再 看 机 器 那 一 端 所 谓 计 算 机 就 是 能 够 自 动 执 行 一 系 列 机 器 动 作 的 机 器, 对 于 那 些 机 器 动 作, 我 们 可 以 把 它 们 和 基 本 的 计 算 操 作 对 应 起 来, 这 就 使 得 有 可 能 把 计 算 问 题 的 能 行 的 计 算 步 骤 分 解 为 有 限 的 机 器 操 作, 这 里 剩 下 的 问 题 就 是 一 方 面 是 我 们 熟 知 的 描 述 问 题 求 解 的 数 学 语 言, 另 一 方 面 就 是 描 述 机 器 操 作 的 语 言, 这 两 个 方 面 的 语 言 如 何 对 应 的 问 题 下 面 我 们 讨 论 一 个 非 常 简 单 的 例 子, 用 来 说 明 这 里 面 的 语 言 翻 译 问 题 一 个 一 元 二 次 方 程 的 求 解 是 一 个 很 简 单 的 数 学 问 题 设 方 程 的 形 式 为 : 2 ax bx c a + + = 0, 0 那 么 方 程 的 解 的 一 般 公 式 为 : x 1 = + 2 b b 4a 2a c x 2 = 2 b b 4ac 2a 注 意 我 们 现 在 的 目 的 是 计 算, 而 不 是 求 解 析 解, 因 此 得 到 这 个 公 式 不 是 问 题 的 结 束, 而 是 问 题 的 开 始, 即 运 用 这 个 公 式, 在 a,b,c 都 有 具 体 取 值 的 情 况 下, 求 出 具 体 的 数 值 解 因 为 如 果 该 方 程 描 述 的 是 一 个 抛 体 运 动, 那 么 我 们 需 要 知 道 的 当 然 是 解 的 数 值, 以 便 我 们 了 解 和 控 制 该 抛 体 运 动 所 以 我 们 还 需 要 进 一 步 把 这 个 数 学 表 述 转 述 为 一 个 具 体 的 求 值 过 程 的 描 述 如 下 : (1) 获 得 a,b,c 的 具 体 取 值 ; 2 (2) 根 据 a,b,c 的 具 体 取 值 计 算 b 4ac 的 值 ; 2 (3) 如 果 b 4ac大 于 0, 那 么 分 别 计 算 上 面 的 两 个 公 式 的 数 值, 得 到 两 个 不 同 的 实 数 根 ; (4) 如 果 b 2 x 4ac=0, 那 么 计 算 公 式 b = 2a, 得 到 的 x 的 值 就 是 方 程 的 两 个 相 同 的 根 ;

2 (5) 如 果 b 4ac小 于 0, 那 么 分 别 计 算 上 面 的 两 个 公 式 的 数 值, 得 到 两 个 不 同 的 复 数 根 这 样 得 到 的 上 面 的 5 个 计 算 步 骤 描 述, 才 是 希 望 计 算 机 所 执 行 的 计 算 过 程 的 一 个 大 概 描 述 当 然 这 个 描 述 是 基 于 我 们 已 经 获 得 的 对 于 一 元 二 次 方 程 的 求 解 问 题 的 数 学 上 的 彻 底 了 解 那 么 描 述 计 算 机 的 操 作 的 语 言 是 什 么 样 的 形 式 呢? 我 们 知 道 所 谓 计 算 机 的 工 作 在 本 质 上 是 运 行 一 些 基 本 的 机 械 电 子 操 作, 固 然 我 们 可 以 把 那 些 操 作 根 据 运 算 法 则 而 定 义 为 相 应 的 运 算, 例 如 一 个 开 关 电 路 的 信 号 叠 加, 可 以 适 当 地 定 义 为 二 进 制 数 值 的 加 法, 但 显 然 不 可 能 期 望 依 靠 这 种 物 理 现 象 能 够 直 接 地 表 达 更 加 复 杂 的 计 算, 例 如 上 面 公 式 里 面 的 开 平 方 幸 好 我 们 依 靠 数 学, 可 以 做 到 把 任 何 复 杂 的 计 算 分 解 或 近 似 分 解 为 极 少 数 简 单 计 算 的 叠 加 与 组 合 因 此 最 终 我 们 已 经 至 少 在 理 论 上 可 以 期 望 使 用 计 算 机 来 完 成 那 些 具 有 明 确 求 解 过 程 的 计 算 任 务 然 而 问 题 是 当 我 们 需 要 向 计 算 机 提 交 一 个 数 值 计 算 任 务 时, 如 果 总 是 要 求 我 们 首 先 把 计 算 任 务 的 描 述 按 照 计 算 机 所 能 够 理 解 和 执 行 的 程 度 来 进 行 的 话, 无 疑 会 使 得 向 计 算 机 提 交 计 算 任 务 成 为 一 件 极 其 麻 烦 的 事 情, 本 来 我 们 利 用 计 算 机 的 目 的 是 为 了 减 轻 自 己 的 机 械 劳 动 工 作 量, 如 果 向 计 算 机 提 交 问 题 是 如 此 麻 烦 的 话, 显 然 不 符 合 我 们 发 明 计 算 机 的 初 衷 因 此 进 入 二 十 世 纪 五 十 年 代 后, 提 出 了 计 算 机 高 级 语 言 的 概 念, 所 谓 高 级 语 言, 就 是 非 常 接 近 我 们 平 常 对 于 数 学 问 题 的 描 述 的 语 言, 而 所 谓 给 出 计 算 机 高 级 语 言, 实 质 上 并 不 是 说 计 算 机 能 够 直 接 理 解 高 级 语 言 了, 而 是 把 高 级 语 言 到 计 算 机 内 部 的 机 器 语 言 的 翻 译 工 作 本 身 交 给 计 算 机 来 完 成, 因 为 这 种 翻 译 工 作 在 规 范 了 高 级 语 言 之 后, 是 计 算 机 自 身 就 完 全 可 以 做 到 的, 当 然 这 个 翻 译 任 务 本 身 又 是 一 个 需 要 我 们 首 先 明 确 给 出 一 般 解 答 的 计 算 问 题 世 界 上 第 一 个 诞 生 的 计 算 机 高 级 语 言 就 是 我 们 在 这 本 书 里 要 给 出 的 FORTRAN FORTRAN 最 早 是 IBM 公 司 在 1957 给 出 的, 专 门 用 于 向 IBM 自 己 生 产 的 704 计 算 机 提 交 表 述 计 算 问 题 的 一 个 计 算 问 题 的 求 解 过 程 如 果 使 用 了 计 算 机 语 言 来 表 述, 就 称 为 一 个 程 序, FORTRAN 正 是 这 样 一 种 专 门 用 来 写 程 序 的 语 言 由 于 IBM 的 709 计 算 机 的 成 功, 同 时 也 使 得 FORTRAN 获 得 了 广 泛 的 传 播, 这 时 FORTRAN 的 语 言 本 性 开 始 在 另 外 一 个 方 面 显 示 了 出 来, 即 语 言 的 生 命 就 在 于 它 的 传 播 于 是 大 多 数 其 它 计 算 机 制 造 商 也 纷 纷 使 得 他 们 的 产 品 能 够 输 入 和 理 解 FORTRAN 语 言 FORTRAN 语 言 从 它 的 名 称 来 源 就 可 以 知 道 是 一 种 与 某 些 特 定 机 器 进 行 通 讯 的 语 言 工 具 即 FORTRAN 语 句 可 以 通 过 特 定 的 机 器 上 配 置 的 编 译 程 序 而 翻 译 成 机 器 语 言, 因 此 早 期 的 FORTRAN 语 言 具 有 强 烈 的 与 机 器 系 统 相 关 的 一 些 特 征, 它 们 反 映 了 那 些 特 定 机 器 的 某 些 特 点, 显 然 如 果 考 虑 到 高 级 语 言 的 本 质 是 要 用 来 描 述 计 算 过 程, 即 所 谓 算 法 语 言, 那 么 这 些 与 机 器 相 关 的 特 征 是 没 有 意 义 的, 而 FORTRAN 不 断 更 新 版 本 所 带 来 的 进 步, 也 就 包 含 了 不 断 舍 弃 这 种 特 征 的 目 的 在 内 FORTRAN 的 这 种 历 史 痕 迹 的 一 个 例 子 就 是 把 语 言 用 那 些 特 定 机 器 所 能 接 受 的 字 符 序 列 ( 亦 就 是 IBM 公 司 用 来 向 计 算 机 输 入 程 序 的 卡 片 穿 孔 设 备 的 48 个 字 符 ) 来 定 义. 而 它 的 那 种 卡 片 输 入 方 式 决 定 了 很 多 的 程 序 书 写 格 式 例 如 通 常 把 语 言 中 的 一 个 语 句 写 在 一 个 记 录 上, 也 就 对 应 着 穿 孔 的 一 张 卡 片 ; 各 个 语 句 按 顺 序 读 入, 对 应 着 卡 片 的 顺 序 读 入 ; 卡 片 的 格 式 是 固 定 的, 构 成 后 来 所 谓 的 固 定 源 码 形 式 这 就 是 最 初 提 出 计 算 机 高 级 语 言 时 我 们 所 拥 有 的 第 一 种 高 级 语 言 的 状 况 不 久 降 生 的 另 外 一 种 高 级 语 言 是 ALGOL, 这 个 名 称 就 是 算 法 语 言 的 简 称, 因 此 可 以 预 料 到 这 种 语 言 具 有 与 FORTRAN 非 常 不 同 的 面 貌, 因 为 这 种 语 言 在 设 计 初 始, 就 不 是 计 算 机 制 造 公 司 为 某 种 特 定 机 器 设 计 的, 而 是 纯 粹 面 向 描 述 计 算 过 程 的, 也 就 是 所 谓 面 向 算 法 描 述 的

ALGOL 最 早 是 在 1958 年 由 德 意 志 联 邦 共 和 国 应 用 数 学 与 力 学 协 会 提 出 的 ALGOL 的 设 计 目 标 显 然 比 FORTRAN 要 来 得 高 远, 它 希 望 不 仅 能 够 用 于 人 对 机 器 转 述 计 算 过 程, 也 希 望 能 够 直 接 用 于 人 与 人 之 间 的 对 于 算 法 的 描 述 为 了 实 现 这 个 通 用 的 目 的,ALGOL 的 字 符 不 是 针 对 任 一 具 体 机 器 定 义 的, 因 此 它 不 反 映 任 何 一 台 特 定 机 器 的 特 性 实 际 上 ALGOL 所 使 用 的 字 符 与 词 汇 完 全 是 独 立 定 义 的 除 此 之 外 ALGOL 还 具 有 许 多 更 加 独 特 的 性 质 不 过 语 言 终 久 摆 脱 不 了 它 的 市 场 属 性, 由 于 FORTRAN 更 加 具 有 市 场 侵 占 能 力, 最 终 FORTRAN 至 今 还 是 主 流 的 科 学 计 算 编 程 语 言, 而 ALGOL 语 言 则 不 幸 成 为 了 任 人 凭 吊 的 古 董 1.3 为 什 么 选 择 FORTRAN 到 底 选 择 什 么 样 的 语 言, 本 身 是 一 类 非 常 具 有 争 议 性 的 问 题 曾 几 何 时, 在 科 学 计 算 领 域, 就 沸 沸 腾 腾 地 讨 论 过 最 好 使 用 什 么 样 的 语 言 也 许 我 们 可 以 说 这 是 一 个 见 仁 见 智 的 问 题, 因 为 我 们 作 为 语 言 的 使 用 者, 总 是 拣 自 己 已 经 很 熟 悉 的 语 言, 当 然 总 是 自 己 能 够 很 好 驾 驭 的 语 言 是 最 好 的 但 是 具 体 地 针 对 科 学 计 算 来 说, 由 于 科 学 计 算 问 题 具 有 自 身 的 独 特 的 价 值 标 准, 在 这 个 价 值 标 准 之 下, 各 种 不 同 的 语 言 还 是 可 以 进 行 客 观 比 较 的 首 先 我 们 得 把 自 己 面 临 的 任 务 界 定 清 楚, 也 就 是 什 么 是 科 学 计 算 问 题? 所 谓 科 学 计 算 问 题 大 体 上 包 括 如 下 三 个 涵 义 : 问 题 本 身 以 及 问 题 的 解 答 都 能 够 使 用 数 学 语 言 予 以 精 确 描 述 ; 如 果 要 使 用 通 常 的 数 学 方 法 来 给 出 我 们 所 需 要 的 数 值 答 案, 会 很 麻 烦 或 者 根 本 无 法 给 出 ; 问 题 以 一 定 的 科 学 与 技 术 知 识 作 为 背 景 我 们 会 看 到 正 是 科 学 计 算 问 题 的 这 种 内 涵 决 定 了 它 在 选 择 计 算 语 言 时 所 具 有 的 价 值 标 准 首 先, 一 个 科 学 计 算 问 题 总 是 要 以 一 个 数 学 计 算 问 题 的 形 式 出 现, 因 此 描 述 科 学 计 算 问 题 的 语 言 应 该 能 够 自 然 地 描 述 数 学 问 题, 即 要 求 编 程 语 言 和 数 学 语 言 在 表 达 方 式 上 具 有 比 较 直 接 自 然 的 对 应 关 系 然 后 一 个 科 学 计 算 问 题 之 所 以 需 要 使 用 计 算 机, 那 肯 定 是 因 为 这 个 问 题 具 有 一 定 的 计 算 量, 那 么 程 序 的 运 行 效 率 往 往 是 选 择 语 言 时 最 重 要 的 考 量 因 素 正 是 在 这 两 点 上,FORTRAN 是 现 在 众 多 语 言 当 中 的 绝 对 胜 出 者 在 描 述 数 学 语 言 的 自 然 性 方 面, FORTRAN 可 以 说 比 现 在 还 活 着 的 任 何 语 言 都 强 当 然 在 历 史 上 曾 经 出 现 过 象 ALGOL 那 样 的 相 当 数 学 化 的 语 言, 可 惜 的 是 它 缺 乏 市 场 生 存 能 力, 所 以 就 只 剩 下 FORTRAN 独 美 于 今 了 FORTRAN 擅 长 描 述 数 学 计 算, 这 点 应 该 是 几 乎 没 有 什 么 争 议 的 也 正 是 由 于 这 个 缘 故,FORTRAN 的 易 学 是 公 认 的 任 何 一 个 科 技 专 业 人 员, 只 要 对 于 一 个 具 体 问 题 的 数 学 求 解 过 程 有 明 晰 的 概 念, 要 把 这 个 求 解 过 程 翻 译 为 FORTRAN 语 言 是 非 常 轻 松 的 至 于 执 行 速 度 方 面, 则 常 常 有 些 似 是 而 非 的 说 法 误 导 初 学 者 最 典 型 的 一 个 错 误 观 念 就 是 C 代 码 的 执 行 速 度 最 快 这 个 说 法 来 源 于 C 语 言 的 特 殊 性, 因 为 C 语 言 更 多 的 是 一 种 系 统 编 程 语 言, 对 硬 件 的 控 制 能 力 很 强, 在 高 级 语 言 里 面 无 出 其 右 者, 于 是 给 人 以 C 程 序 的 速 度 必 定 最 快 的 印 象 但 是 忘 记 了 这 个 速 度 快 是 来 自 C 语 言 的 系 统 编 程 特 性, 而 在 做 科 学 计 算 时, 并 不 需 要 过 多 地 涉 及 到 系 统 内 核, 因 此 C 语 言 的 长 处 在 科 学 计 算 方 面 可 以 说 并 不 能 适 当 地 发 挥, 相 反, 在 数 值 计 算 方 面,C 绝 对 不 是 FORTRAN 的 对 手, 因 为 相 对 于 C 以 系 统 编 程 为 目 的,FORTRAN 是 以 科

学 计 算 为 目 的 的, 语 言 本 身 在 设 计 之 初, 就 考 虑 到 了 针 对 科 学 计 算 而 进 行 优 化, 因 此 FORTRAN 生 成 的 可 执 行 代 码 是 高 度 优 化 的 实 际 的 运 行 效 率 方 面 的 比 较 也 表 明 了 FORTRAN 在 科 学 计 算 方 面 的 优 越 性 无 论 是 国 内 还 是 国 外, 也 无 论 是 经 典 的 串 行 机 还 是 并 行 矢 量 机, 大 量 的 经 验 表 明, 在 执 行 同 一 个 科 学 计 算 任 务 时, C 或 C++ 代 码 的 效 率 都 低 于 FORTRAN 代 码, 除 了 常 见 的 对 于 C 有 着 高 效 的 迷 信 之 外, 还 常 常 有 着 对 于 FORTRAN 是 如 何 如 何 落 后 的 偏 见 当 然 这 种 偏 见 是 有 来 源 的, 那 就 是 曾 经 功 勋 卓 著 的 FORTRAN 77 在 很 长 一 段 时 间 里 面, 都 缺 乏 进 取 心, 使 得 迄 今 很 多 人 提 起 FORTRAN, 想 到 的 就 是 在 当 今 时 代 已 经 显 得 非 常 落 后 的 FORTRAN 77 实 质 上,FORTRAN 标 准 在 进 入 FORTRAN 90 时 代 之 后, 特 别 是 现 时 的 FORTRAN 95 版 本, 可 以 说 只 要 是 对 于 科 学 计 算 有 用 的 特 性,C 和 C++ 有 的, 现 在 FORTRAN 95 绝 对 不 缺, 而 反 过 来 FORTRAN 95 所 具 有 的 很 多 针 对 科 学 计 算 的 特 性, 却 是 C 和 C++ 所 不 具 有 的 哪 怕 是 C++ 最 引 以 为 傲 的 面 向 对 象 性 质,FORTRAN 2000 也 将 全 面 引 入 所 以 说,FORTRAN 已 经 完 全 赶 上 了 编 程 语 言 的 潮 流 与 程 序 运 行 的 效 能 有 关 的 另 外 一 个 重 要 方 面, 是 程 序 语 言 能 否 支 持 程 序 的 并 行 运 行, 在 这 点 上, 可 以 说 FORTRAN 表 现 了 它 的 最 大 优 势, 因 为 FORTRAN 95 正 是 着 力 于 获 得 并 行 计 算 的 能 力 的 一 个 版 本 由 于 现 代 科 学 计 算 的 规 模 越 来 越 大, 计 算 并 行 化 是 一 条 不 得 不 走 的 路 线, 现 代 计 算 机 硬 件 的 发 展, 也 使 得 并 行 化 具 有 实 际 的 普 及 前 景, 因 为 不 仅 专 门 的 大 型 计 算 机 是 并 行 的, 现 在 的 一 般 PC 都 可 以 拥 有 多 个 处 理 器, 因 此 现 代 的 从 事 科 学 计 算 的 用 户 不 得 不 掌 握 并 行 化 计 算 的 编 程 能 力 但 是 进 行 并 行 化 编 程 所 遇 到 的 一 个 主 要 问 题, 就 是 任 何 过 程 编 程 语 言 都 内 在 地 使 用 线 性 存 储 模 式, 也 就 是 一 个 数 组 的 元 素 总 是 被 认 为 按 照 数 组 元 素 的 先 后 顺 序 而 连 续 地 存 储 在 内 存 单 位 里 面, 这 样 一 种 模 式 就 决 定 了 这 样 的 过 程 编 程 语 言 无 法 真 正 地 实 现 对 并 行 计 算 的 描 述 而 FORTRAN 95 则 完 全 改 观 了 这 种 制 约, 因 为 在 FORTRAN 95 里 面 对 于 数 组 以 及 数 组 运 算 建 立 了 全 新 的 面 向 并 行 化 计 算 的 概 念, 诸 如 纯 过 程 的 概 念, 逐 元 过 程 的 概 念,FORALL 结 构 等 等, 都 有 效 地 摆 脱 了 线 性 存 储 模 式 的 制 约, 使 得 FORTRAN 95 成 为 描 述 并 行 计 算 的 标 准 语 言, 特 别 是 那 些 专 用 的 数 据 并 行 化 语 言 都 纷 纷 采 用 FORTRAN 作 为 基 础 语 言, 例 如 高 性 能 FORTRAN(High Performance Fortran),Fortran D,Vienna Fortran, 以 及 CRAFT 等 这 样 就 使 得 使 用 FORTRAN 95 编 写 的 程 序 可 以 直 接 在 这 些 数 据 并 行 化 语 言 的 平 台 上 运 行, 而 反 过 来 使 用 这 些 专 用 语 言 编 写 的 程 序 也 可 以 毫 不 困 难 地 转 移 到 FORTRAN 95 平 台 上 运 行, 这 样 一 种 局 面 使 得 FORTRAN 在 并 行 计 算 领 域 独 领 风 骚 综 上 所 述, 我 们 完 全 可 以 说 FORTRAN 95 是 进 行 科 学 计 算 的 最 佳 语 言, 作 为 需 要 进 行 科 学 计 算 的 科 学 与 技 术 领 域 的 工 作 人 员, 掌 握 FORTRAN 95 远 比 掌 握 C,C++ 等 语 言 要 重 要 得 多, 至 于 那 些 计 算 机 符 号 代 数 与 数 值 计 算 软 件, 例 如 MATHEMATICA,MAPLE,MATLAB,Macsyma, MATHCAD 等 等, 只 能 说 是 进 行 科 学 计 算 的 教 学 模 型 与 辅 助 工 具, 由 于 它 们 都 提 供 了 现 成 的 算 法, 因 此 可 以 使 得 初 学 者 能 够 应 用 于 一 些 简 单 的 场 合, 真 正 要 用 它 们 来 对 付 稍 微 大 一 点 的 问 题, 有 经 验 的 用 户 都 知 道, 那 会 是 一 件 非 常 痛 苦 的 强 人 所 难 的 事 情 因 此 最 终 要 自 由 地 进 行 科 学 计 算, 则 非 FORTRAN 莫 属 1.4 FORTRAN 的 进 步 下 面 我 们 介 绍 一 下 FORTRAN 在 历 史 上 所 取 得 的 重 要 进 步, 特 别 是 FORTRAN 95 有 别 于

FOR TRAN 90 的 特 征, 更 能 够 引 导 我 们 走 向 高 性 能 的 FORTRAN 并 行 编 程 的 领 域 1.4.1 FORTRAN 95 的 进 步 FORTRAN 的 每 一 个 进 步, 都 意 味 着 要 把 很 多 的 语 言 特 征 归 结 为 三 类 : 新 的 语 言 特 征 ; 顾 名 思 义, 就 是 FORTRAN 最 新 版 本 引 入 的 全 新 语 言 过 时 的 语 言 特 征 ; 就 是 暂 时 在 最 新 的 FORTRAN 标 准 里 面 仍 然 可 以 使 用, 而 不 会 出 现 不 兼 容 的 情 形, 但 是 被 指 明 为 过 时 的 语 言 特 征, 是 在 未 来 的 下 一 个 FORTRAN 版 本 里 面 将 要 被 淘 汰 的 部 分 废 弃 的 语 言 特 征 顾 名 思 义, 就 是 在 过 去 的 FORTRAN 版 本 里 面 曾 经 出 现 过, 但 在 现 在 的 版 本 里 面 已 经 不 许 使 用 的 语 言 特 征 下 面 分 别 介 绍 它 们 1.4.2 新 的 语 言 特 征 FORTRAN 95 所 增 加 的 新 的 语 言 成 分 包 括 全 新 的 功 能 和 对 旧 有 功 能 的 改 进 两 个 部 分 它 们 主 要 包 括 : FORALL 语 句 与 结 构 纯 (PURE) 过 程 逐 元 (ELEMENTAL) 过 程 WHERE 结 构 的 扩 展 默 认 初 始 化 NULL 固 有 函 数 CPU_TIME 固 有 子 例 行 程 序 固 有 函 数 CEILING,FLOOR,MAXLOC,MINLOC 的 扩 展 可 分 配 数 组 的 动 态 去 分 配 名 称 列 表 输 入 里 面 的 注 释 最 小 域 宽 格 式 说 明 用 于 支 持 IEEE 754/854 浮 点 运 算 标 准 的 某 些 修 改 下 面 分 别 予 以 说 明 1. FORALL 语 句 与 结 构 FORALL 语 句 与 结 构 和 纯 过 程 这 两 个 新 的 语 言 成 分, 主 要 是 为 了 提 高 在 多 处 理 器 系 统 上 面 的 程 序 并 行 运 行 效 率 而 引 进 的 只 要 系 统 支 持 并 行 的 赋 值,FORALL 语 句 以 及 结 构, 就 能 够 自 然 地 实 现 对 一 个 庞 大 的 数 组 的 所 有 元 素 进 行 同 时 赋 值, 从 而 充 分 地 利 用 了 系 统 的 并 行 效 能 这 个 新 特 征 的 引 入 充 分 显 示 了 FORTRAN 在 并 行 运 算 方 面 的 努 力 2. 纯 (PURE) 过 程 PURE 是 一 个 完 全 新 引 入 的 过 程 属 性 具 有 PURE 属 性 的 函 数 或 子 例 行 程 序, 除 了 返 回 值 之 外, 将 不 具 有 任 何 的 后 效 也 就 是 说, 对 于 它 的 任 意 变 元 或 全 局 变 量, 它 都 不 改 变 它 们 的 值, 指

针 关 联 状 态, 以 及 数 据 映 射, 也 不 执 行 输 入 输 出 在 FORTRAN 95 标 准 里 面, 一 些 场 合 要 求 其 中 的 过 程 必 须 具 有 PURE 属 性 特 别 地 PURE 属 性 对 于 应 用 FORALL 语 句 或 结 构 进 行 并 行 赋 值 是 必 要 条 件 3. 逐 元 (ELEMENTAL) 过 程 逐 元 过 程 同 样 是 执 行 并 行 运 算 的 强 大 工 具 把 一 个 逐 元 过 程 应 用 到 一 个 数 组, 就 把 这 个 针 对 数 组 的 运 算 转 化 为 对 数 组 的 所 有 元 素 的 单 个 的 运 算, 所 有 单 个 的 结 果 再 组 合 起 来, 返 回 一 个 同 样 形 状 的 数 组 4. WHERE 结 构 的 扩 展 WHERE 结 构 经 过 扩 展, 可 以 包 含 一 个 FORALL 结 构 的 嵌 套, 而 FORALL 结 构 又 可 以 包 含 WHERE 语 句 或 结 构 的 嵌 套 两 者 的 配 合 使 用 具 有 强 大 的 功 能 5. 默 认 初 始 化 默 认 初 始 化 可 以 应 用 于 派 生 类 型, 包 括 哑 元, 这 样 就 能 保 证 具 有 指 针 成 员 的 派 生 类 型 对 象 能 够 一 直 可 以 访 问 从 而 避 免 了 出 现 内 存 可 分 配, 但 是 不 能 去 分 配 的 情 形 对 于 指 针, 可 以 使 用 新 的 固 有 函 数 NULL 来 给 出 初 始 的 关 联 状 态, 也 可 以 在 使 用 数 据 之 前, 使 用 NULLIFY 语 句 来 获 得 初 始 化 6. NULL 固 有 函 数 新 引 入 的 固 有 函 数 NULL 的 功 能 主 要 是 给 指 针 赋 予 一 个 初 始 的 去 关 联 的 关 联 状 态 NULL 函 数 可 以 在 一 个 类 型 声 明 语 句 当 中 使 用, 给 定 一 个 指 针 的 初 始 去 关 联 状 态, 也 可 以 在 一 个 结 构 构 造 器 里 面 使 用, 用 来 给 定 其 中 指 针 成 员 的 初 始 去 关 联 状 态 7. CPU_TIME 固 有 子 例 行 程 序 固 有 函 数 CPU_TIME 用 来 测 量 一 个 程 序 或 一 段 代 码 所 消 耗 的 处 理 器 时 间 这 个 函 数 的 测 量 结 果 不 一 定 是 非 常 准 确 的, 但 在 一 些 情 形 下 是 非 常 有 用 的 例 如 用 来 比 较 不 同 代 码 的 运 行 时 间, 从 而 比 较 它 们 的 效 率 ; 也 可 以 用 来 检 测 一 个 并 行 程 序 是 不 是 真 正 地 把 一 个 变 元 作 为 一 个 数 组 来 并 行 处 理, 从 而 评 价 它 的 并 行 效 率 8. 固 有 函 数 CEILING,FLOOR,MAXLOC,MINLOC 的 扩 展 在 FORTRAN 90 和 高 性 能 FORTRAN 之 间, 某 些 固 有 函 数 以 及 相 关 函 数 存 在 某 些 不 兼 容, 因 为 在 高 性 能 FORTRAN 里 面, 在 不 同 的 变 元 位 置 增 加 了 一 个 DIM 函 数 在 FORTRAN 95 里 面, 就 放 松 了 对 于 变 元 顺 序 的 要 求, 这 样 在 变 元 序 列 当 中 MASK 和 DIM 的 出 现 就 可 以 是 任 意 的 了, 从 而 保 证 了 FORTRAN 95 与 高 性 能 FORTRAN 的 兼 容 性 9. 可 分 配 数 组 的 动 态 去 分 配 在 FORTRAN 95 里 面, 当 退 出 一 个 给 定 的 作 用 域 时, 其 中 没 有 通 过 使 用 SAVE 而 得 到 保 留 的 可 分 配 数 组, 就 自 动 地 去 分 配, 和 使 用 DEALLOCATE 语 句 的 效 果 一 样 这 样 就 可 以 防 止 可 能 发 生 的 内 存 遗 漏, 从 而 规 范 分 配 过 程 10. 名 称 列 表 输 入 里 面 的 注 释 在 名 称 列 表 输 入 纪 录 当 中 可 以 使 用 注 释, 从 而 方 便 了 用 户

11. 最 小 域 宽 格 式 说 明 在 使 用 数 值 的 格 式 输 出 的 时 候, 运 用 增 强 的 输 出 格 式 编 辑 描 述 符, 就 可 以 对 域 宽 进 行 极 小 化, 从 而 避 免 输 出 时 的 白 边 12. 用 于 支 持 IEEE 754/854 浮 点 运 算 标 准 的 某 些 修 改 在 所 有 以 前 的 FORTRAN 版 本 里 面, 都 不 区 分 +0. 和 -0., 即 正 0 和 负 0, 在 FORTRAN 95 版 本 里 面, 就 能 够 区 分 这 两 者 了, 即 在 使 用 SIGN 函 数 时, 可 以 通 过 让 第 一 个 变 元 为 0, 而 第 二 个 变 元 为 负 号, 就 得 到 负 0 1.4.3 过 时 的 语 言 特 征 FORTRAN 95 里 面 被 划 归 为 过 时 的 语 言 特 征, 在 FORTRAN 90 里 面 还 是 允 许 正 常 使 用 的, 但 是 在 FORTRAN 95 里 面 已 经 强 烈 地 不 提 倡 使 用, 因 为 它 们 在 下 一 个 FORTRAN 版 本 里 面 会 被 彻 底 淘 汰 这 些 过 时 的 语 言 特 征 主 要 包 括 : 算 术 IF 语 句 DO 终 止 的 某 些 形 式 替 代 返 回 计 算 GO TO 语 句 语 句 函 数 可 执 行 语 句 之 间 的 DATA 语 句 哑 长 度 字 符 函 数 固 定 源 码 形 式 字 符 型 声 明 里 面 的 CHARACTER* 形 式 下 面 分 别 说 明, 并 特 别 要 注 意 它 们 为 什 么 是 多 余 的 或 容 易 产 生 错 误 的 1. 算 术 IF 语 句 算 术 IF 语 句 的 功 能 完 全 可 以 通 过 使 用 IF 语 句 或 IF 结 构 来 替 代 2. DO 终 止 的 某 些 形 式 共 享 DO 终 止, 或 者 不 是 使 用 END DO 语 句 或 CONTINUE 语 句 的 DO 终 止 都 是 过 时 的, 无 论 是 从 安 全 的 角 度, 还 是 从 清 晰 的 角 度, 都 最 好 使 用 具 有 不 带 标 签 的 END DO 语 句 的 DO 结 构 块 形 式 3. 替 代 返 回 替 代 返 回 强 烈 地 依 赖 标 签, 是 不 值 得 提 倡 的, 而 且 同 样 的 功 能 完 全 可 以 通 过 CASE 结 构 来 实 现 4. 计 算 GO TO 语 句 计 算 GO TO 语 句 完 全 可 以 使 用 CASE 结 构 来 代 替, 而 且 CASE 结 构 还 具 有 比 计 算 GO TO 语 句 更 加 广 泛 的 功 能 从 结 构 化 编 程 的 角 度 来 看, 也 应 该 使 用 CASE 结 构, 而 不 是 完 全 非 结 构 化 的, 带 有 早 期 与 系 统 相 关 特 征 的 计 算 GO TO 语 句 5. 语 句 函 数 内 部 函 数 就 具 有 语 句 函 数 的 许 多 特 征 而 语 句 函 数 非 常 容 易 与 赋 值 语 句 相 混 淆, 所 以 语 句 函

数 也 是 不 提 倡 使 用 的 6. 可 执 行 语 句 之 间 的 DATA 语 句 如 果 在 程 序 的 可 执 行 部 分 使 用 DATA 语 句 的 话, 会 容 易 让 人 产 生 一 种 错 觉, 即 DATA 语 句 能 够 在 程 序 的 执 行 过 程 当 中 进 行 赋 值, 而 实 际 上,DATA 语 句 只 能 用 于 数 据 的 初 始 化, 因 此 DATA 语 句 最 好 还 是 只 用 于 程 序 的 说 明 部 分 7. 哑 长 度 字 符 函 数 哑 长 度 字 符 函 数 要 求 在 调 用 程 序 当 中 声 明 函 数 的 名 称, 它 完 全 可 以 通 过 运 用 具 有 显 式 界 面 或 动 态 字 符 长 度 的 子 例 行 程 序 或 函 数 来 替 代 8. 固 定 源 码 形 式 固 定 源 码 形 式 完 全 是 由 早 期 的 卡 片 纸 带 式 输 入 输 出 方 式 所 决 定, 而 现 在 卡 片 纸 带 式 输 入 输 出 早 已 经 不 再 使 用, 因 此 这 种 源 码 形 式 必 定 是 要 被 淘 汰 的 9. 字 符 型 声 明 里 面 的 CHARACTER* 形 式 在 字 符 型 声 明 语 句 当 中 用 来 说 明 字 符 长 度 的 CHARACTER* 完 全 是 多 余 的, 一 般 提 倡 采 用 更 为 合 乎 英 语 习 惯 的 形 式 1.4.4 废 弃 的 语 言 特 征 在 FORTRAN 90 里 面 还 可 以 使 用 的 语 言 特 征 有 些 已 经 被 FORTRAN 95 完 全 废 弃 了, 因 此 要 特 别 留 意 它 们, 以 免 出 现 源 代 码 无 法 在 FORTRAN 95 系 统 里 面 调 试 通 过 的 情 况 这 些 被 FORTRAN 95 废 弃 的 语 言 特 征 主 要 包 括 : 实 型 和 双 精 度 实 型 的 DO 变 量 从 块 的 外 部 分 支 到 块 内 部 的 END IF 语 句 PAUSE 语 句 ASSIGN 语 句, 带 标 签 的 GO TO 语 句 nh 编 辑 描 述 符 为 了 能 够 阅 读 使 用 FORTRAN 90 以 及 更 早 版 本 的 源 代 码, 下 面 还 是 分 别 予 以 简 要 的 说 明 请 注 意 它 们 遭 到 淘 汰 的 原 因 所 在 1. 实 型 和 双 精 度 实 型 的 DO 变 量 实 型 和 双 精 度 实 型 的 DO 变 量 或 循 环 控 制 的 DO 参 数 都 是 难 以 移 植 的, 而 且 也 是 很 少 用 到 的 因 此 现 代 的 FORTRAN 版 本 都 要 求 DO 变 量 为 标 量 整 型 变 量 2. 从 块 的 外 部 分 支 到 块 内 部 的 END IF 语 句 从 块 的 外 部 分 支 到 块 内 部 的 END IF 语 句 对 于 语 句 的 执 行 序 列 的 控 制, 是 完 全 不 必 要 的, 也 是 不 规 范 的, 因 此 已 经 被 完 全 淘 汰 了 3. PAUSE 语 句 PAUSE 语 句 用 于 把 一 个 正 在 运 行 的 程 序 挂 起 来, 直 到 系 统 或 操 作 重 新 开 始 运 行 它 的 功 能 完 全 是 多 余 的, 因 为 WRITE 语 句 可 以 发 送 消 息 到 任 何 设 备, 例 如 操 作 控 制 台 或 终 端, 而 READ 语 句 则 可 以 等 待 或 接 收 来 自 同 一 个 设 备 的 消 息 它 们 的 配 合 使 用 就 可 以 替 代 特 别 的 PAUSE 语 句

4. ASSIGN 语 句, 带 标 签 的 GO TO 语 句 ASSIGN 语 句 用 来 给 一 个 整 型 变 量 赋 予 一 个 语 句 的 标 签 它 的 一 般 用 途 就 是, 在 程 序 的 运 行 过 程 当 中, 通 过 ASSIGN 语 句 就 可 以 给 该 整 型 变 量 赋 予 分 支 目 标 语 句 的 标 签, 从 而 给 程 序 提 供 一 种 动 态 分 支 的 能 力 然 而 整 型 变 量 除 了 可 以 具 有 标 签 值 之 外, 还 有 可 能 具 有 一 般 的 整 数 值, 这 就 会 容 易 导 致 程 序 错 误, 也 使 得 程 序 难 以 阅 读 实 际 上 ASSIGN 语 句, 以 及 带 标 签 的 GO TO 语 句 的 功 能, 都 可 以 由 内 部 过 程 实 现, 因 为 ASS IGN 语 句 无 非 就 是 纪 录 了 一 个 可 重 用 代 码 块 完 成 运 行 后 的 返 回 点 ASSIGN 语 句 还 可 以 把 一 个 FORMAT 语 句 的 标 签 动 态 地 赋 予 一 个 整 型 变 量, 然 后 该 变 量 就 可 以 用 作 WRITE,READ,PRINT 语 句 的 格 式 说 明 符 不 过 这 个 功 能 也 可 以 通 过 把 字 符 型 变 量, 数 组, 以 及 常 量 用 作 格 式 说 明 符 而 得 到 实 现 总 之, 标 签 的 使 用 总 是 不 合 时 宜 的 5. nh 编 辑 描 述 符 使 用 这 个 编 辑 描 述 符 非 常 容 易 导 致 错 误, 因 为 跟 在 该 描 述 符 后 面 的 字 符 数 目 很 容 易 计 算 错 误, 而 如 果 使 用 字 符 常 量 编 辑 描 述 符 来 行 使 相 同 的 功 能 的 话, 则 根 本 不 需 要 计 算 字 符 数 目 第 二 篇 计 算 的 叙 述 算 法 的 每 一 个 步 骤, 都 必 须 给 予 确 切 的 定 义 对 于 算 法 当 中 所 考 虑 的 每 一 种 情 况, 每 一 个 有 待 执 行 的 动 作, 都 必 须 严 格 地 和 不 含 混 地 加 以 规 定 对 于 以 描 述 算 法 作 为 目 的 而 设 计 出 来 的, 采 用 了 形 式 的 定 义 的 程 序 设 计 语 言, 或 者 说 计 算 机 语 言, 它 的 每 一 个 语 句 都 必 须 有 非 常 确 切 的 意 义 ---- D.E.Knuth [1] The Art of Computer Programming 本 质 上 FORTRAN 就 是 一 门 语 言, 一 门 人 与 计 算 机 赖 以 进 行 有 效 交 流 的 语 言, 在 这 个 意 义 上 和 我 们 使 用 的 中 文, 英 文 等 没 有 本 质 差 别 现 在 假 设 要 来 描 述 一 种 大 家 都 陌 生 的 语 言, 那 么 总 是 要 分 成 两 个 方 面 来 描 述, 即 一 方 面 要 描 述 这 门 语 言 的 表 象 和 形 态, 也 就 是 它 使 用 哪 些 符 号, 哪 些 词 汇, 一 般 的 句 式 如 何, 怎 样 才 能 完 整 叙 述 一 个 任 务 之 类 ; 另 一 方 面 需 要 说 明 这 门 语 言 的 语 义, 也 就 是 说 这 门 语 言 是 如 何 用 来 表 达 我 们 需 要 它 表 达 的 意 思 的 第 4 章 基 本 上 就 是 描 述 FORTRAN 作 为 一 种 语 言 的 基 本 形 态, 也 就 是 书 写 这 种 语 言 的 书 写 规 则 接 下 来 几 章 则 逐 步 说 明 如 何 用 FORTRAN 来 表 达 我 们 的 要 求, 或 者 反 过 来 说,FORTRAN 提 供 了 些 什 么 表 达 方 式, 以 便 我 们 用 来 向 计 算 机 提 出 合 理 的 任 务 : 表 达 基 本 数 据 ; 表 达 数 据 的 结 构 ; 完 整 地 描 述 数 据 ; 构 造 表 达 式 ;

驱 动 计 算 的 赋 值 ; 计 算 过 程 的 结 构 控 制 ; 在 整 个 第 二 篇, 我 们 将 领 略 到 FORTRAN 95 是 如 何 能 够 做 到 精 致 地 描 述 计 算 的, 而 把 一 个 问 题 阐 述 清 楚 了, 就 意 味 着 问 题 已 经 解 决 了 一 大 半 [1] Donald E. Knuth ( 高 纳 德 ), Stanford University 的 The Art of Computer Programming 荣 休 教 授, 而 The Art of Computer Programming( 计 算 机 程 序 设 计 技 巧 ) 正 是 他 的 伟 大 著 作 的 名 称 洋 洋 七 大 卷 的 The Art of Computer Programming 是 当 今 全 世 界 每 一 个 计 算 机 科 学 家 所 膜 拜 的 圣 经 1974 年 在 该 书 刚 完 成 前 面 很 少 一 部 分 时, 就 给 他 带 来 了 计 算 机 科 学 家 们 梦 寐 以 求 的 图 灵 奖 第 4 章 FORTRAN 95 语 言 的 形 貌 要 说 明 一 门 语 言 的 形 态, 必 须 回 答 以 下 问 题 : 它 使 用 哪 些 符 号 来 表 达 信 息? 它 的 词 汇 如 何 构 成? 它 的 语 句 如 何 构 成? 如 何 表 达 一 个 完 整 的 任 务? 具 体 的 对 于 一 门 计 算 机 语 言, 把 这 几 个 问 题 更 加 明 确 地 转 换 过 来, 就 是 : 它 使 用 键 盘 上 的 哪 些 符 号, 各 个 符 号 有 哪 些 用 途? 它 的 词 汇 如 何 由 键 盘 字 符 构 成? 含 有 哪 些 固 定 的 词 汇? 以 及 容 许 自 由 构 成 合 法 词 汇 的 规 则 是 什 么? 它 具 有 哪 些 固 定 的 语 句 格 式? 以 及 容 许 自 由 构 成 合 法 语 句 的 规 则 是 什 么? 我 们 交 待 给 计 算 机 的 任 何 任 务, 都 必 须 明 确 说 明 任 务 的 开 始, 执 行 步 骤 和 完 成, 因 此 一 段 完 整 的 源 代 码 应 该 具 备 什 么 样 的 形 式? 以 及 应 该 具 备 哪 些 要 素? 本 章 就 是 要 回 答 这 些 问 题 4.1 FORTRAN 语 言 所 使 用 的 字 符 从 最 抽 象 的 层 面 来 看, 人 与 计 算 机 的 交 流 只 是 信 息 的 交 流, 而 信 息 总 是 需 要 依 靠 某 种 信 号 来 表 示, 对 于 人 来 说, 最 方 便 的 就 是 字 符 而 对 于 计 算 机 来 说, 自 然 就 是 键 盘 所 能 敲 出 的 那 些 字 符 ( 信 号 ), 因 此 下 面 就 是 要 说 明 : FORTRAN 95 能 识 别 键 盘 上 敲 出 的 哪 些 字 符? 每 个 字 符 对 于 FORTRAN 95 来 说 又 意 味 着 什 么? 4.1.1 FORTRAN 95 所 使 用 的 基 本 字 符 按 照 FORTRAN 95 标 准 的 规 定, 一 切 FORTRAN 95 的 实 现 平 台 都 必 须 使 用 下 面 表 4-1 所 列 出 来 的 这 个 基 本 的 字 符 集, 或 者 说, 这 个 字 符 集 是 所 有 遵 循 FORTRAN 95 标 准 的 编 译 器 所 使 用

的 字 符 集 的 公 共 子 集 这 样 原 则 上, 局 限 在 这 个 字 符 集 上 的 源 码 是 能 够 被 任 何 遵 循 FORTRAN 95 标 准 的 编 译 器 所 识 别 的 表 4-1 基 本 的 FORTRAN 95 字 符 集 : 文 字 字 符 英 文 字 母 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 数 字 0 1 2 3 4 5 6 7 8 9 下 划 线 _ 特 殊 字 符 图 形 名 称 空 格 = 等 号 十 加 号 图 形 名 称 : 冒 号! 叹 号 引 号 一 减 号 % 百 分 号 * 星 号 & 英 语 的 and / 斜 线 ; 分 号 ( 左 括 号 < 小 于 ) 右 活 号 > 大 于, 逗 号? 问 号. 小 数 点 或 句 号 $ 货 币 符 号 撇 号 可 以 看 到 基 本 字 符 分 为 两 大 类 : 文 字 字 符 和 特 殊 字 符 除 了 货 币 符 号 可 以 本 地 化 之 外, 其 他 任 何 字 符 都 必 须 依 照 表 里 的 形 式 对 于 基 本 字 符 有 如 下 几 个 问 题 需 要 予 以 注 意 一. 文 字 字 符 的 用 处 : 主 要 是 命 名 的 作 用, 可 以 用 来 命 名 语 言 中 的 一 切 对 象, 这 三 种 符 号 可 以 混 合 使 用 ; 其 中 数 字 还 具 有 它 本 来 的 含 义, 就 是 表 示 数 目 二. 特 殊 字 符 的 用 处 : 特 殊 字 符 主 要 具 有 功 能 的 意 义, 如 编 辑 功 能, 运 算 功 能, 语 法 功 能 等 FORTRAN 95 标 准 原 则 上 接 受 小 写 字 母 因 此 除 了 以 下 位 置, 大 小 写 是 等 价 的 三. 大 小 写 必 须 区 分 的 位 置 : 作 为 字 符 常 量 的 字 符 串 里 面 ; 输 入 输 出 的 纪 录 里 面 ; 作 为 编 辑 描 述 符 的 引 号 或 撇 号 里 面 因 为 在 上 述 几 种 情 形, 大 小 写 是 字 符 型 数 据 的 不 同 数 据 取 值 如 果 不 幸 遇 到 一 个 FORTRAN 95 标 准 的 怪 异 的 编 译 平 台, 偏 偏 不 接 受 小 写 字 母, 这 是 FORTRAN 95 标 准 所 许 可 的, 这 时 就 得 小 心 了 不 过 幸 好 我 们 常 用 的 编 译 平 台, 例 如 CVF, 都 是 接 受 小 写 字 母 的 另 外, 在 OPEN 或 者 INQUIRE 语 句 里 面 的 FILE= 或 NAME= 后 面 是 否 区 分 大 小 写, 也 是 由 编 译 平 台 指 定 的

如 果 是 需 要 调 用 其 他 语 言 写 的 子 程 序, 而 恰 好 该 种 语 言 ( 例 如 C 语 言 ) 是 区 分 大 小 写 的, 这 时 就 需 要 特 别 小 心 例 4-1 如 果 用 C 写 了 两 个 子 程 序 EIGEN 和 eigen, 然 后 有 如 下 的 FROTRAN 片 断 : EXTERNAL EIGEN... CALL EIGEN... END 这 时 它 是 该 引 用 EIGEN 还 是 eigen 呢? 如 果 所 使 用 的 FROTRAN 系 统 正 好 是 怪 异 的 那 种, 没 问 题 如 果 是 常 见 的 如 CVF, 这 时 它 就 无 法 区 分 EIGEN 和 eigen, 这 样 就 必 须 给 它 们 更 换 名 称 了 四. 数 字 的 涵 义 : 除 了 以 下 情 形, 数 字 总 是 表 示 十 进 位 数 字 属 于 二 进 制, 八 进 制, 十 六 进 制 的 字 面 常 量 ; 带 有 B,O,Z 编 辑 描 述 符 的 输 入 输 出 纪 录 例 4-2 以 下 语 句 当 中 的 数 字 不 是 属 于 十 进 位 数 字 : DATA I, J, K / O 1001, 23.54, Z 5CA2 / 其 中 第 一 个 为 八 进 制 数, 第 二 个 为 十 进 制 数, 第 三 个 为 十 六 进 制 数 五. 下 划 线 的 涵 义 : 下 划 线 的 主 要 作 用 就 是 置 于 单 词 之 间 代 替 空 格, 使 得 我 们 在 命 名 时 使 用 清 楚 的 英 语 词 汇 下 划 线 不 能 置 于 任 意 名 称 的 前 面, 但 是 可 以 置 于 名 称 的 最 后 下 划 线 也 用 于 在 字 面 常 量 中 区 隔 常 量 的 值 和 种 别 参 数 无 论 给 什 么 对 象 起 名, 都 尽 量 使 用 完 整 的 英 语 单 词, 同 时 使 用 下 划 线 以 区 隔 不 同 的 单 词 所 谓 好 记 性 不 如 烂 笔 头, 只 有 这 样 才 能 切 实 保 证 你 在 任 何 时 候, 在 程 序 代 码 的 任 意 位 置 都 知 道 任 意 变 量 等 的 含 义 4.1.2 与 平 台 有 关 的 FORTRAN 辅 助 字 符 集 上 节 列 出 的 基 本 字 符 集 是 在 一 切 FROTRAN 的 编 译 平 台 都 可 以 使 用 的, 被 FORTRAN 95 标 准 规 定 为 必 须 使 用 的 默 认 字 符 集 另 外 还 有 些 辅 助 的 字 符 则 是 不 同 的 平 台 有 不 同 的 用 法 约 定 辅 助 字 符 分 两 类 : 可 打 印 字 符 和 不 可 打 印 字 符 可 打 印 字 符 ; 各 种 本 地 化 语 言 的 字 符, 象 汉 字, 希 腊 字 母 等, 都 可 以 应 用 在 字 符 串, 注 释, 和 输 入 输 出 纪 录 当 中 不 可 打 印 字 符 主 要 就 是 控 制 字 符, 例 如 制 表 符 Tab 键 制 表 符 (Tab 键 ) 在 FORTRAN77 标 准 当 中 主 要 用 来 表 示 6 个 空 格, 这 样 在 固 定 源 程 序 形 式 的 代 码 的 每 行 的 开 头 使 用 Tab, 就 自 动 地 空 出 6 个 空 格 对 于 一 个 FORTRAN77 标 准 的 编 译 系 统 来 说, 在 固 定 源 程 序 形 式 里 的 Tab 被 看 成 是 至 少 6 个 空 格, 而 在 自 由 源 程 序 形 式 里 的 Tab 被 看 成 1 个 空 格 这 样 如 果 Tab 被 放 在 文 本 当 中 用 于 输 出 格 式 控 制, 那 么 这 种 默 认 的 转 换 方 式, 有 时 就 会 导 致 输 出 格 式 的 混 乱

有 关 FORTRAN 95 的 辅 助 字 符 集 的 使 用 规 则, 请 参 考 具 体 的 编 译 系 统 的 说 明 4.2 词 汇 所 谓 FORTRAN 的 词 汇 就 是 一 个 语 句 的 最 小 的 意 义 单 位, 它 由 一 个 或 多 个 FORTRAN 字 符 集 里 的 字 符 组 成 包 括 两 类 共 6 种, 分 类 例 举 如 下 : 由 文 字 字 符 组 成 的 词 汇, 包 括 4 种 : 语 句 关 键 词 :IMPLICIT 名 称 :EIGEN_FREQUENCY_3 由 单 个 词 汇 组 成 的 字 面 常 量 :1.234567_long 标 识 符 :213 由 特 殊 字 符 组 成 的 算 符 : +,.OR. 定 界 符 : 逗 号,=,=,:,::,;,% FORTRAN 95 的 一 切 合 法 的 词 汇 都 必 须 按 照 语 法 来 构 成 完 备 的 构 词 语 法 规 则 在 附 录 B 给 出 下 面 分 别 予 以 详 细 说 明 1. 语 句 关 键 词 语 句 关 键 词 的 功 用 : 标 志 语 句 本 身 例 4-3 下 面 的 DO 语 句 中 的 关 键 词 DO 本 身 标 志 了 该 语 句 DO I=1,500 标 志 选 项 例 4-4 下 面 的 INTENT 语 句 当 中 的 IN,OUT, 或 INOUT INTENT(IN),A B INTENT(INOUT),X,Y,Z 用 在 语 句 当 中, 起 分 界 的 作 用 例 4-5 如 下 面 DO 语 句 当 中 的 WHILE DO WHILE(. NOT. VECTOR ) 键 词 并 非 所 有 的 语 句 都 必 须 包 含 关 键 词, 在 FORTRAN 里 面, 赋 值 语 句 和 函 数 都 不 需 要 关 尽 管 FORTRAN 95 不 区 分 大 小 写, 本 书 任 何 地 方 出 现 的 语 句 关 键 词 都 使 用 大 写 字 母 纯 粹 是 为 了 醒 目 的 原 因 2. 名 称 在 一 个 程 序 当 中, 任 何 对 象 都 需 要 有 一 个 名 称, 给 它 们 命 名 所 得 到 的 词 汇, 可 以 说 就 是 一 般 语 言 里 的 名 词, 这 样 的 对 象 包 括 : 变 量, 命 名 常 量, 程 序 单 元, 过 程, 公 用 块, 构 造, 派 生 类 型, 哑 元 等

名 称 的 拼 写 规 则 为 : 名 称 必 须 由 字 母 开 头, 可 以 由 文 字 字 符 混 合 组 成, 而 下 划 线 不 能 作 为 名 称 的 第 一 个 字 符 一 个 名 称 至 多 允 许 含 有 31 个 字 符 3. 常 量 一 个 常 量 就 是 对 一 个 值 的 合 乎 语 法 的 字 符 标 记 常 量 分 为 字 面 常 量 和 命 名 常 量 两 种 : 一 个 值 如 果 没 有 在 程 序 里 面 经 过 命 名, 则 称 为 字 面 常 量, 这 种 常 量 不 能 取 派 生 数 据 类 型 例 4-6 66953 Z 5120A 2.3417.TRUE. (33.2, 5.0) 一 个 值 如 果 在 程 序 里 面 经 过 命 名, 则 称 为 命 名 常 量, 这 种 常 量 能 取 派 生 数 据 类 型 例 4-7 在 如 下 声 明 语 句 当 中 的 常 量 UNSTABLE_POINT 为 命 名 常 量 : REAL, DIMENSION(3), PARAMETER ::UNSTABLE_POINT =& (/5.332, 0.221, 190.632/) 对 于 常 量 的 语 义, 将 在 说 明 数 据 时 进 一 步 讨 论 4. 语 句 标 签 在 一 个 程 序 单 元 内 部, 对 任 何 一 条 语 句, 都 可 以 在 该 语 句 的 前 面 加 上 语 句 标 签, 以 便 在 该 程 序 单 元 内 部 的 任 何 其 他 位 置 引 用 该 语 句 需 要 引 用 其 他 语 句 的 语 句 包 括 CALL 语 句,DO 结 构, 分 支 语 句, 输 入 输 出 语 句 等 语 句 标 签 的 书 写 规 则 为 : 语 句 标 签 由 1 到 5 个 十 进 制 数 字 组 成, 其 中 必 须 至 少 有 一 个 数 字 不 能 是 0, 例 如 000 不 能 作 为 标 识 符 ; 标 识 符 以 0 开 头 是 没 有 任 何 意 义 的, 例 如 0034 与 34 没 有 区 别 标 识 符 不 能 放 置 于 空 语 句 之 前 例 4-8 456 上 面 的 语 句 只 出 现 了 一 个 语 句 标 签, 是 不 合 法 的 对 于 在 一 个 程 序 单 元 内 部, 标 识 符 不 唯 一 出 现 的 情 形, 具 有 特 殊 的 含 义, 将 在 后 面 讨 论 5. 算 符 算 符 用 在 表 达 式 当 中, 通 过 运 算 而 获 得 某 种 类 型 的 值 算 符 分 为 固 有 算 符 和 自 定 义 算 符 两 类 : 固 有 算 符 在 FORTRAN 95 语 法 当 中, R310 规 定 了 固 有 算 符 的 构 成 法 则 例 4-9

// 表 示 字 符 串 的 连 接 + 表 示 对 数 值 的 加 法.NOT. 表 示 逻 辑 否.OR. 表 示 逻 辑 或 上 面 都 是 固 有 算 符 自 定 义 算 符 自 定 义 算 符 的 一 般 语 法 形 式 为 :.XXX. 即 在 两 个 句 点 之 间 有 n 个 字 符 构 成 的 字 符 串,n 不 大 于 31 中 间 的 字 母 串 最 好 是 一 个 表 达 该 运 算 含 义 的 英 文 单 词 这 个 单 词 不 能 与 固 有 算 符 或 者 逻 辑 常 量 里 面 已 经 使 用 了 的 单 词 重 复 6. 定 界 符 全 部 的 定 界 符 有 如 下 12 种 形 式 : / ( ) (/ /), = => : :: ; % 其 中 ( 和 ),(/ 和 /) 都 必 须 成 对 出 现 顾 名 思 义, 这 些 定 界 符 的 功 能 就 是 在 一 个 连 续 的 源 码 文 本 当 中, 用 来 把 不 同 性 质 的 源 码 成 分 区 分 开 它 们 的 具 体 含 义 将 在 具 体 的 语 句 当 中 说 明 4.3 语 句 一 条 语 句 由 一 些 词 汇 组 成, 可 以 理 解 为 表 示 要 求 计 算 机 进 行 的 一 个 动 作, 但 一 个 说 明, 一 个 描 述 之 类 的, 表 面 看 好 象 不 是 计 算 机 的 一 个 动 作, 不 过 实 质 上 同 样 要 求 机 器 内 部 的 一 个 动 作 与 之 相 对 应, 因 此 同 样 也 构 成 FORTRAN 的 一 条 语 句 FORTRAN 95 的 语 句 分 为 两 大 类 : 非 执 行 语 句 当 需 要 引 入 或 说 明 一 个 程 序 单 元 或 子 程 序, 或 者 是 说 明 数 据 类 型 时, 就 需 要 使 用 非 执 行 语 句 可 执 行 语 句 当 需 要 计 算 机 进 行 一 个 指 定 动 作 时, 就 需 要 使 用 可 执 行 语 句 FORTRAN 95 全 部 的 语 句 的 具 体 分 类, 以 及 语 法 和 例 示 参 见 附 录 A, 语 句 的 语 法 也 参 见 附 录 B 在 后 面 的 有 关 章 节 则 分 别 说 明 了 所 涉 及 到 的 主 要 的 语 句 4.4 源 码 形 式 一 个 FORTRAN 95 程 序 就 是 由 以 下 三 种 形 式 的 程 序 成 分 所 构 成 的 分 行 的 文 本 : FORTRAN 语 句 注 释 INCLUDE 行

在 一 个 FORTRAN 95 程 序 里 面, 一 条 语 句 占 一 行 或 多 行, 一 行 也 可 以 有 多 条 语 句, 程 序 文 本 当 中 可 以 包 含 空 行, 但 不 具 有 任 何 含 义, 被 FORTRAN 编 译 器 忽 略 这 种 形 态 的 文 本 就 是 FORTRAN 的 源 代 码 ( 源 程 序 ) 从 FORTRAN90 开 始, 对 于 源 程 序 的 书 写 格 式 要 求 已 经 完 全 现 代 化 了, 也 就 是 出 现 了 所 谓 自 由 源 程 序 格 式, 而 此 前,FORTRAN 的 固 定 源 程 序 格 式 一 直 是 初 学 者 视 为 畏 途 的 主 要 因 素, 那 种 传 统 的 固 定 源 程 序 格 式 完 全 是 FORTRAN 作 为 始 祖 级 的 高 级 语 言 的 遗 留 痕 迹, 因 为 早 期 的 源 程 序 输 入 不 是 通 过 键 盘, 而 是 运 用 穿 孔 纸 带, 正 是 穿 孔 纸 带 的 格 式 规 定 了 相 应 的 源 程 序 的 书 写 格 式 现 在 之 所 以 我 们 还 需 要 了 解 这 点, 是 因 为 FORTRAN 的 悠 久 历 史, 决 定 了 有 大 量 的 源 代 码 正 是 使 用 了 那 种 古 老 格 式, 那 是 一 个 今 天 我 们 不 得 不 继 承 的 宝 库, 要 想 使 用 它 们, 显 然 就 得 会 读 那 种 格 式, 因 此 我 们 只 需 要 了 解 固 定 格 式, 却 不 需 要 遵 循 固 定 格 式 来 写 代 码 例 4-10 在 这 个 例 子 里 面, 表 明 了 行 与 语 句 之 间 可 以 有 多 种 排 列 形 式 : 这 里 的 例 子 显 示 了 所 谓 自 由 源 程 序 格 式 的 自 由 之 所 在 这 里 使 用 了 & 作 为 一 个 语 句 在 行 与 行 之 间 连 续 的 标 志, 而! 后 面 的 字 符 永 远 是 注 释 23 FORMAT( 6Y, J9)! 这 是 一 条 语 句 占 有 完 整 的 一 行 的 例 子 37 FUNCTION string_concat(s1, &! 这 里 一 条 语 句 被 分 到 两 行 s2) 空 格 是 被 忽 略 的 64 FORMAT( 6Y, J0);37 FUNCTION &! 这 里 一 行 里 有 两 条 语 句, 其 中 一 条 string_concat(s1, s2)! 语 句 还 只 是 它 的 一 部 分 TYPE (string) :: s1, s2, string_concat string_concat%string_data = s1% string_data(1:s1%length) // & s2%string_data(1:s2%length);string_concat%length &! 这 行 里 包 含 两 条 = s1%length + s2%length! 部 分 语 句 END FUNCTION string_concat 源 码 文 本 的 一 般 规 则 如 下 : 在 一 个 程 序 单 元 内 部, 行 与 行 之 间 的 顺 序 是 有 意 义 的, 只 有 两 个 例 外 : 注 释 行 的 顺 序 与 位 置 可 以 非 常 自 由 ; 在 CONTAINS 语 句 和 END 语 句 之 间 的 子 程 序 的 顺 序 也 可 以 是 任 意 的 在 一 个 程 序 单 元 内 部, 或 者 完 全 使 用 自 由 格 式, 或 者 完 全 使 用 固 定 格 式 但 是 一 个 程 序 内 部 的 不 同 程 序 单 元 则 可 以 使 用 不 同 的 格 式 后 面 要 说 明 为 了 便 于 协 调 起 见, 如 何 使 用 一 种 自 由 格 式 与 固 定 格 式 兼 容 的 特 定 格 式 所 谓 字 符 文 本 是 指 如 下 两 种 情 形 下 的 字 符 串 : 作 为 一 个 字 符 字 面 常 量 的 取 值 的 字 符 或 字 符 串 ; 被 字 符 串 编 辑 描 述 符 控 制 的 字 符 或 字 符 串 那 么 描 述 符 本 身 和 续 行 符 & 永 远 都 不 属 于 其 邻 近 的 字 符 文 本

针 对 字 符 文 本 的 规 则 与 针 对 非 字 符 文 本 的 规 则 是 不 一 样 的 例 4-11 下 面 例 子 说 明 了 空 格 在 字 符 文 本 与 非 字 符 文 本 当 中 的 不 同 使 用 规 则 : 22 CHAR = NAME01 // KNOWLEDGE ARCHIVE 23 CHAR = NAME02 // KNOWLEDGEARCHIVE 在 双 引 号 里 的 字 符 串 之 间 的 空 格 是 有 意 义 的, 因 此 上 面 的 两 个 字 符 串 是 不 同 的 DO43I=1,N DO 43 I = 1,N 而 上 面 这 两 条 语 句 是 等 价 的 4.4.1 自 由 源 程 序 格 式 自 由 源 程 序 格 式 的 主 要 思 想 就 是 不 限 制 语 句 在 行 内 的 位 置 与 固 定 格 式 相 比, 主 要 是 空 格 的 用 法 有 差 异 自 由 源 程 序 格 式 的 一 般 规 则 如 下 : 对 于 FORTRAN 的 基 本 字 符 集 而 言, 一 行 至 多 能 容 纳 132 个 字 符, 如 果 出 现 非 基 本 字 符 集 当 中 的 字 符, 则 具 体 的 平 台 会 有 相 应 的 规 定, 这 时, 可 能 能 够 容 纳 的 字 符 数 目 就 会 少 于 132 例 4-12 假 如 下 面 的 语 句 刚 好 包 含 132 个 字 符, 但 是 其 中 含 有 中 文 字 符 : TEXT = CHINESE_SENTENCE this line has exactly 132 characters and contains 人 这 时, 一 个 具 体 的 实 现 平 台 会 有 相 应 的 规 定, 一 般 来 说 它 会 认 为 上 面 语 句 的 字 符 太 多 了, 因 此 为 保 险 起 见, 尽 量 使 用 续 行 符 只 要 字 符! 不 是 作 为 字 符 文 本 当 中 的 一 个 字 符, 那 么 在 该 行 内 它 后 面 的 所 有 字 符 都 是 属 于 注 释 的 内 容 而 FORTRAN 对 于 注 释 内 容 没 有 任 何 限 制, 可 以 是 任 意 形 式, 因 为 反 正 任 何 编 译 器 对 于 注 释 部 分 都 是 忽 略 掉 的 一 行 内 可 以 在 语 句 后 面 接 注 释 内 容, 也 可 以 整 行 就 以! 开 头, 这 时 该 行 就 是 完 全 的 注 释 行 总 之, 注 释 的 位 置 可 以 是 任 意 的, 关 键 是 一 行 的 任 意 位 置 只 要 出 现 了 注 释 符!, 那 么 它 后 面 直 到 行 末, 都 会 被 编 译 器 认 为 是 注 释 内 容 而 不 加 理 会 因 此 不 要 把 语 句 放 置 在 一 行 内 的 注 释 后 面 只 要 字 符 & 不 是 作 为 字 符 文 本 当 中 的 一 个 字 符, 那 么 在 该 行 内 它 后 面 只 能 接 空 格 以 及 注 释, 在 紧 接 着 的 行 内 只 要 存 在 非 注 释 部 分, 那 就 是 和 该 & 前 面 的 部 分 是 连 续 的, 被 称 为 连 续 行 在 FORTRAN 里, 一 个 语 句 所 跟 随 的 连 续 行 不 能 超 过 39 行 一 行 的 非 注 释 部 分 不 能 只 是 一 个 续 行 符 & 注 释 不 能 利 用 该 字 符 来 表 示 续 行, 因 此 如 果 注 释 部 分 的 行 末 为 字 符 &, 则 它 只 是 属 于 注 释 内 容 的 一 个 字 符, 不 具 有 续 行 的 意 思 一 行 如 果 只 包 含 空 格 字 符, 或 者 根 本 不 包 含 任 何 字 符 ( 这 两 者 表 现 一 样 ), 那 么 编 译 器 总 是 把 该 行 视 为 注 释 行, 予 以 忽 略 一 行 之 内 可 以 不 止 包 含 一 条 语 句, 语 句 之 间 必 须 用 (;) 加 以 分 隔 任 何 辅 助 字 符 集 当 中 的 字 符 都 可 以 在 字 符 字 面 常 量 和 字 符 串 编 辑 符 当 中 使 用

标 签 被 放 置 于 语 句 之 前, 任 何 情 形 下 都 必 须 避 免 标 签 被 认 为 是 属 于 一 条 语 句 内 部 的 字 符 按 照 FORTRAN 语 法, 空 语 句 是 合 法 语 句, 只 要 空 语 句 不 是 出 现 在 一 行 的 开 头, 因 此 连 续 的 ;;, 甚 至 中 间 包 含 空 格 ; ;, 都 会 被 认 为 是 单 个 的 ;, 因 为 字 符 ; 总 是 意 味 着 它 的 前 面 是 一 条 语 句, 即 使 为 空 语 句, 也 不 算 语 法 错 误 例 4-13 下 面 的 语 句 都 是 合 法 的 X=(3.0,4.6);Y=(44.5,566.0) 这 里 的 ; 是 作 为 语 句 分 隔 符 X=(3.0,4.6); 这 里 的 ; 被 忽 略 而 不 认 为 是 错 误 X=(3.0,4.6); ;;; ;Y=(44.5,566.0) 这 里 的 ; ;;; ; 等 价 于 一 个 ;, 因 为 分 号 之 间 的 空 格 被 认 为 是 空 语 句, 不 算 语 法 错 误 X=(3.0,4.6)& ;Y=(44.5, 566.0) 这 里 分 号 放 在 一 行 的 开 头, 因 为 该 行 是 连 续 行 Y=(44.5,& 566.0);Z= ZERO 例 4-14 下 面 的 写 法 是 错 误 的 53 INTEGER X,Y! 这 里 53 是 合 法 的 标 签 IF (X==0)76 Y=X! 这 里 的 标 签 76 不 能 说 明 自 己 不 属 于 IF 语 句 下 面 我 们 更 加 详 细 地 说 明 在 自 由 源 码 形 式 里 面 续 行 符 和 空 格 的 用 法 1. 续 行 符 只 是 采 用 续 行 符 的 不 同 用 法, 就 有 可 能 产 生 完 全 不 等 价 的 语 句, 因 为 续 行 符 能 够 导 致 名 称 的 变 化 所 以 如 果 一 个 名 称, 字 符 常 量, 或 词 汇 被 迫 分 行, 则 必 须 在 前 一 行 的 末 尾 和 后 一 行 的 开 头 紧 接 着 字 符 使 用 & 例 4-15 ENERGY = 0.5*MASS * VILOC&! 这 里 VILOCITY 是 一 个 变 量 名 &ITY**2 ENERGY = 0.5*MASS * VILOC &! 这 里 变 量 名 成 了 VILOC ITY! &ITY**2 ENERGY = 0.5*MASS * VILOC & &! 这 里 变 量 名 成 了 VILOC & ITY! &ITY**2 上 面 的 三 个 语 句 是 完 全 不 等 价 的!

2. 空 格 的 使 用 规 则 在 具 有 固 定 名 称 以 及 固 定 格 式 的 算 符 当 中, 不 能 随 意 使 用 空 格 因 为 空 格 默 认 的 功 能 就 是 分 隔 不 同 的 词 汇 例 4-16 CALL SUBROUTINE A CALL SUBRO UTINE A! 错 误 语 句! IF X =.NOT. IF X =.NOT.! 这 两 条 语 句 不 同 例 4-17 下 面 语 句 当 中 的 空 格 是 不 可 少 的 : INTEGER X,Y IF A=0 DO Y=1, 20 但 不 是 所 有 情 形 下 的 词 汇 之 间 必 须 要 有 空 格, 在 不 会 产 生 混 乱 的 前 提 下, 有 些 语 句 关 键 词 之 间 的 空 格 是 可 以 省 略 的, 对 于 语 句 关 键 词 来 说, 所 有 这 些 不 同 的 情 形 列 举 如 下 表 4-1: 非 必 须 的 空 格 表 4-1 语 句 关 键 词 中 间 空 格 含 义 的 不 同 情 形 必 要 的 空 格 BLOCK DATA DOUBLE COMPLEX DOUBLE COMPLEX DOUBLE PRECISION ELSE IF END BLOCK DATA END DO END FILE END FORALL END FUNCTION END IF END INTERFACE END MODULE END PROGRAM END SELECT END SUBROUTINE CASE DEFAULT DO WHILE DO WHILE IMPLICIT type-specifier IMPLICIT NONE INTERFACE ASSIGNMENT INTERFACE OPERATOR MODULE PROCEDURE RECURSIVE FUNCTION RECURSIVE SUBROUTINE RECURSIVE type-specifier FUNCTION type-specifier FUNCTION type-specifier RECURSIVE FUNCTION END TYPE END WHERE GO TO IN OUT SELECT CASE

4.4.2 固 定 源 程 序 格 式 今 天 已 经 没 有 必 要 按 照 固 定 格 式 书 写 源 程 序, 只 需 要 能 够 阅 读 古 老 的 使 用 固 定 格 式 的 代 码, 如 果 有 必 要 把 固 定 格 式 的 源 程 序 转 换 为 自 由 格 式, 也 可 以 运 用 某 些 小 软 件 完 成, 因 此 下 面 只 是 简 要 地 介 绍 固 定 格 式 的 几 个 规 则 语 句 只 能 书 写 在 一 行 的 第 7 到 第 72 个 格 子 上 空 格 除 了 在 字 符 常 量 里 以 外, 都 是 没 有 意 义 的 在 某 行 第 一 格 为 字 符 C, 或 *, 就 表 示 该 行 整 行 都 是 注 释 注 释 总 是 被 忽 略 字 符! 只 要 不 是 出 现 在 第 6 格, 也 不 是 属 于 字 符 文 本, 则 从 它 开 始 一 直 到 该 行 的 行 末, 都 属 于 注 释 一 行 如 果 只 包 含 空 格 字 符, 或 者 根 本 不 包 含 任 何 字 符 ( 这 两 者 表 现 一 样 ), 那 么 编 译 器 总 是 把 该 行 视 为 注 释 行, 予 以 忽 略 一 行 中 的 多 条 语 句 用 一 个 或 多 个 分 号 分 隔 ; 分 号 可 以 出 现 在 行 末, 但 没 有 更 多 的 意 义 ; 分 号 不 能 是 一 行 的 第 7 到 第 72 个 格 子 上 第 一 个 非 空 格 字 符 除 了 空 格 和 0 之 外 的 任 意 字 符, 只 要 出 现 在 某 行 第 6 格 上, 则 表 示 该 行 为 连 续 行 一 行 后 面 最 多 只 能 有 19 个 连 续 行, 第 一 行 称 为 初 始 行 标 识 符 只 能 出 现 在 第 1 到 第 5 格 上, 被 连 续 的 语 句 只 有 第 一 行 可 以 使 用 标 识 符, 这 样 下 面 所 有 的 连 续 行 的 第 1 到 第 5 格 上 只 能 是 空 格 END 语 句 不 能 被 连 续, 它 也 不 能 被 视 为 初 始 行 4.4. 3 兼 容 源 程 序 格 式 在 某 些 情 形 下, 需 要 书 写 能 够 同 时 被 自 由 格 式 和 固 定 格 式 兼 容 的 源 码, 要 做 到 这 点, 只 需 要 遵 循 以 下 规 则 即 可 : 标 识 符 只 能 出 现 在 第 1 到 第 5 格 上, 语 句 只 能 书 写 在 一 行 的 第 7 到 第 72 个 格 子 上 按 照 自 由 格 式 的 规 则 使 用 空 格 使 用! 作 注 释 符, 但 不 要 放 置 在 第 6 格, 也 不 要 是 用 使 用 字 符 C, 或 * 作 注 释 符 需 要 连 续 行 时, 在 被 连 续 行 的 第 73 格 写 &, 同 时 在 连 续 行 的 第 6 格 也 写 &, 第 74 格 到 80 格 保 持 空 格 或 者 只 写 注 释 而 连 续 行 的 第 1 到 第 5 格 上 只 能 是 空 格 下 面 就 是 一 个 同 时 满 足 两 种 源 码 形 式 要 求 的 代 码 例 程 : 例 4-18 Column: 12345678...73! Define the function CUT_SIN DOUBLE PRECISION FUNCTION CUT_SIN(X) CUT_SIN = X - X**3/FACTOR(3) + X**5/FACTOR(5)& &- X**7/FACTOR(7) CONTAINS

INTEGER FUNCTION FACTOR(N) FACTOR = 1 DO 10 I = N, 1, -1 10 FACTOR = FACTOR * I END FUNCTION FACTOR END FUNCTION CUT_SIN 4.4.4 程 序 结 构 在 FORTRAN 95 的 语 法 规 则 里 面 规 定 了 程 序 结 构 的 完 整 定 义, 参 见 附 录 B 不 过 那 里 的 语 法 规 则 并 没 有 完 备 地 表 述 在 一 个 程 序 单 元 里, 各 种 语 句 应 该 遵 循 什 么 顺 序 下 面 给 出 一 般 原 则 : 数 据 类 型 声 明 和 指 定 的 语 句 必 须 放 置 在 可 执 行 结 构 或 语 句 之 前 ; FORMAT,DATA,ENTRY 语 句 也 可 以 放 置 在 可 执 行 语 句 中 间, 不 过 把 DATA 语 句 放 置 在 可 执 行 语 句 中 间 是 一 种 过 时 的 做 法 ; 如 果 出 现 USE 语 句, 必 须 总 是 放 在 最 前 面 ; 如 果 出 现 内 部 子 程 序 或 模 块 子 程 序, 则 必 须 跟 在 CONTAINS 语 句 后 面 例 4-19 下 面 是 一 个 典 型 的 只 包 含 一 个 程 序 单 元, 也 就 是 主 程 序 的 FORTRAN 程 序 :! 本 程 序 能 够 求 出 所 有 100-999 之 间 每 一 位 上 的 数 字 的 立 方 和 等 于 自 身 的 三 位 数 PROGRAM SUM_OF_ CUBES INTEGER A,B,C DO A = 1,9 DO B = 0,9 DO C = 0,9 IF (100*A + 10*B + C == A**3 + B**3 + C**3) & PRINT (3I1), A,B,C END DO END DO END DO END PROGRAM SUM_OF_CUBES RUN SUM_OF_CUBES 153 370 371 407 大 家 不 妨 尝 试 一 下,1000-9999 之 间 还 存 在 这 样 的 数 字 吗? 如 果 是 平 方 呢? 下 面 的 表 4-2 给 出 了 程 序 单 元 的 基 本 模 式, 其 中 处 于 同 一 水 平 位 置 的 各 语 句 之 间 没 有 严 格 的 前 后 顺 序, 而 不 同 的 行 则 表 示 了 严 格 的 在 程 序 当 中 出 现 的 前 后 顺 序 :

表 4-2 程 序 单 元 的 基 本 模 式 程 序, 函 数, 子 例 行 程 序, 模 块, 数 据 块 语 句 USE 语 句 FORMAT 语 句, IMPLICIT NONE ENTRY 语 句 PARAMETER 语 句 PARAMETER 语 句, DATA 语 句 DATA 语 句 CONTAINS 语 句 内 部 子 程 序 或 模 块 子 程 序 END 语 句 IMPLICIT 语 句 派 生 数 据 类 型 定 义, 接 口 块, 数 据 类 型 声 明 语 句, 语 句 函 数 语 句, 特 定 语 句 可 执 行 结 构 把 DATA 语 句 放 置 在 可 执 行 结 构 中 间 已 经 过 时 语 句 函 数 语 句 已 经 过 时 表 4-3 给 出 一 个 特 定 的 语 句 能 够 在 什 么 结 构 中 出 现, 不 能 在 什 么 结 构 中 出 现 的 概 貌 : 表 4-3 语 句 的 环 境 作 用 单 元 的 种 类 语 句 主 程 序 模 块 数 据 块 外 部 子 程 序 模 块 子 程 序 内 部 子 程 序 接 口 块 USE 语 句 Y Y Y Y Y Y Y ENTRY 语 句 N N N Y Y N N FORMAT 语 Y N N Y Y Y N 句 其 他 声 明 Y Y Y Y Y Y Y DATA 语 句 Y Y Y Y Y Y N 派 生 类 型 定 Y Y Y Y Y Y Y 义 接 口 块 Y Y N Y Y Y Y 语 句 函 数 Y N N Y Y Y N CONTAINS Y Y N Y Y N N 可 执 行 语 句 Y N N Y Y Y N 其 中 Y 表 示 该 语 句 可 以 在 相 应 的 结 构 当 中 出 现,N 表 示 不 能 出 现 4.5 INCLUDE 行 很 多 时 候 一 个 完 整 程 序 的 源 码 还 可 以 原 封 不 动 地 移 植 到 另 一 个 程 序 源 码 的 中 间, 这 时 并 不 需 要 把 被 移 植 源 码 完 整 地 抄 写 过 来, 而 只 需 要 简 单 地 运 用 INCLUDE 行 即 可

例 4-20 PROGRAM GREEN_FUNCTION REAL X,Y,Z.! 语 句 省 略 INCLUDE GAUSE.! 语 句 省 略 END 这 样 源 码 文 件 GAUSE 就 直 接 进 入 程 序 GREEN_FUNCTION 的 源 码 里 面, 取 代 了 INCLUDE 行 的 位 置 INCLUDE 行 由 关 键 词 INCLUDE 和 其 后 的 文 件 名 称 组 成 其 中 的 文 件 名 称 是 一 个 字 符 文 本 常 量 INCLUDE 行 只 是 针 对 编 译 器 的 一 个 提 示, 而 不 是 属 于 程 序 内 的 FORTRAN 语 句 其 中 的 字 符 文 本 常 量 不 能 带 作 为 命 名 常 量 的 种 别 参 数 INCLUDE 行 必 须 放 置 在 程 序 当 中, 其 所 引 用 文 件 应 当 出 现 的 位 置 INCLUDE 行 所 在 行 不 能 有 任 何 其 他 文 字, 包 括 标 识 符, 当 然 可 以 有 注 释 INCLUDE 行 可 以 进 行 嵌 套, 嵌 套 的 层 数 由 具 体 的 编 译 器 规 定 注 意 在 嵌 套 的 同 时 不 能 导 致 定 义 循 环 INCLUDE 行 之 前 的 语 句 不 能 是 被 连 续 行, 其 后 的 语 句 也 不 能 是 连 续 行 4.6 与 其 他 语 言 的 语 法 要 素 方 面 的 比 较 下 面 简 要 地 比 较 一 下, 作 为 一 种 语 言,FORTRAN 和 其 它 语 言 在 总 的 语 法 风 格 方 面 的 异 同 一 种 计 算 机 语 言 的 语 法 远 比 任 何 自 然 语 言 的 语 法 要 来 得 简 单 明 了, 计 算 机 语 言 的 语 法 风 格 可 以 明 确 地 归 结 为 各 种 基 本 语 法 要 素 的 选 择 因 此 可 以 按 照 语 法 要 素 对 不 同 的 语 言 加 以 比 较 1. 字 符 集 按 照 语 言 的 所 谓 形 式 定 义, 语 言 就 是 取 自 一 个 有 限 字 符 集 合 的 任 意 字 符 所 构 成 的 有 限 字 符 串 的 集 合 显 然, 一 种 语 言 选 择 哪 些 字 符 作 为 它 的 字 符 集, 正 是 语 言 文 法 设 计 的 第 一 步 最 常 用 的 字 符 集 就 是 ASCII 字 符 集, 而 一 套 完 整 的 字 符 集 除 基 本 字 母 和 数 字 外, 通 常 还 包 含 一 些 特 殊 字 符, 以 便 为 语 言 提 供 足 够 的 表 达 手 段 表 面 看 来, 一 种 语 言 所 使 用 的 字 符 越 多, 它 的 表 达 能 力 应 该 是 越 大, 然 而 在 增 大 字 符 集 的 同 时, 也 增 加 了 编 译 时 词 法 分 析 的 分 量, 因 此 这 里 的 折 衷 方 式 的 不 同, 造 就 了 不 同 语 言 的 字 符 集 的 差 异 字 符 集 的 选 择 首 先 来 自 语 言 的 输 入 输 出 设 备 对 于 FORTRAN,C 等 大 多 数 语 言, 是 面 向 以 工 业 标 准 键 盘 为 主 的 输 入 输 出 设 备 的, 因 此 这 些 语 言 的 字 符 集 可 以 说 是 大 同 小 异 的, 不 过 也 有 例 外, 如 APL 语 言 就 使 用 了 ASCII 字 符 集 之 外 非 常 特 殊 的 字 符, 因 此 这 种 语 言 的 字 符 集 就 不 能 被 大 多 数 输 入 输 出 设 备 直 接 使 用 从 计 算 机 历 史 来 讲, 到 了 1960 年 代 的 早 期, 计 算 机 行 业 对 字 符 的 表 示 大 都 由 六 位 字 节 转 变 为 八 位 字 节, 这 样 理 论 上 就 有 了 256 个 字 符 可 用, 分 配 给 52 个 大 小 写 字 母 十 个 数 字 以 及 一 些 标 点 符 号, 应 该 是 足 够 了 不 过, 由 于 计 算 机 语 言 本 地 化 的 趋 势 越 来 越 流 行, 语 言 的 国 际 化 导 致

各 种 民 族 语 言 的 文 字 都 要 求 进 入 字 符 集 除 了 法 语, 德 语 里 的 语 音 符 号 之 外, 希 腊 语, 阿 拉 伯 语 之 类 的 语 言 有 着 完 全 不 同 的 字 符 集 而 如 果 中 文 和 日 文 要 进 入 计 算 机 语 言, 则 需 要 一 个 有 一 万 多 符 号 的 字 符 集 因 此 甚 至 出 现 了 一 种 想 法, 就 是 考 虑 用 十 六 位 (65536) 来 表 示 字 符 集 2. 语 句 标 签 在 FORTRAN77 及 其 前 面 的 标 准 里, 语 句 标 签 的 使 用 具 有 严 重 的 时 代 烙 印, 而 随 着 技 术 的 进 步, 这 种 过 时 的 玩 意 在 大 多 数 情 况 下 不 再 具 有 任 何 价 值, 特 别 是 严 重 地 损 害 源 码 的 可 读 性 因 此 语 句 标 签 在 任 何 语 言 里 都 是 属 于 需 要 淘 汰 的 对 象 3. 运 算 算 符 字 符 + 和 -( 加 号 和 减 号 ) 在 大 多 数 语 言 里 都 是 代 表 两 种 基 本 的 数 学 运 算, 不 过 除 了 这 两 个 符 号 之 外, 其 他 的 运 算 算 符 就 有 相 当 多 的 花 样 了 例 如 只 是 用 特 殊 字 符 来 表 示 基 本 运 算 算 符, 典 型 的 就 是 APL 语 言, 还 有 LISP 语 言 TIMES 语 言 等 的 逻 辑 运 算 符 ; 而 大 多 数 语 言 使 用 一 些 字 符 组 合, 同 时 也 利 用 特 殊 字 符 来 表 示 部 分 运 算 算 符, 有 时 还 使 用 一 些 不 属 于 上 述 两 种 之 中 任 意 一 种 的 字 符 串 来 表 示 部 分 运 算 算 符, 例 如 FORTRAN 里 面 的.EQ. 表 示 相 等, 指 数 运 算 用 ** 表 示 等 4. 关 键 词 计 算 机 语 言 大 都 使 用 保 留 字 与 关 键 词, 从 而 能 够 提 高 翻 译 器 的 检 错 能 力 而 且 大 多 数 以 关 键 词 开 始 的 语 句 本 身 就 表 明 了 语 句 的 类 型 例 如 IF READ 等 一 种 语 言 究 竟 使 用 多 少 保 留 字 和 关 键 词, 往 往 是 一 个 折 衷 的 结 果 : 保 留 字 少, 可 以 减 少 编 程 者 的 记 忆 负 担, 同 时 却 会 增 加 语 法 分 析 的 困 难 ; 而 如 果 使 用 大 量 的 保 留 字, 例 如 COBOL 语 言, 使 用 了 大 量 的 保 留 字, 使 得 编 程 者 很 难 全 部 记 下, 因 此 就 会 常 常 出 现 不 小 心 使 用 保 留 字 作 变 量 名 的 错 误, 当 然 使 用 很 多 的 保 留 字, 就 会 使 得 翻 译 过 程 中 的 语 法 分 析 变 得 更 为 简 单 特 别 需 要 注 意 的 是, 当 一 种 语 言 出 现 新 版 本 时, 得 小 心 是 否 引 入 了 新 的 保 留 字, 例 如 COBOL 语 言, 就 在 新 标 准 里 引 入 了 新 的 保 留 字, 这 就 意 味 着 那 些 在 程 序 中 使 用 新 的 保 留 字 作 为 变 量 名 ( 或 其 他 名 字 ) 的 旧 程 序, 按 照 新 标 准 在 语 法 上 就 不 再 正 确 了, 尽 管 这 个 程 序 一 点 也 没 有 改 过 对 于 FORTRAN 来 说, 这 类 问 题 就 没 那 么 严 重 5. 注 释 尽 管 注 释 一 定 是 被 编 译 器 忽 略 的, 但 却 是 文 件 中 十 分 重 要 的 一 部 分, 因 为 注 释 是 保 证 源 码 的 可 读 性 非 常 重 要 的 手 段 在 不 同 的 语 言 里, 表 示 注 释 的 方 式 非 常 不 同, 甚 至 在 一 种 语 言 里, 也 可 能 有 几 种 方 法 引 入 注 释 : 在 C 语 言 程 序 中, 需 要 使 用 /* 和 */ 这 样 的 特 殊 标 记 来 界 定 而 不 管 行 边 界, 这 时 常 常 出 现 的 错 误 就 是 漏 掉 结 束 的 界 定 符, 使 得 后 面 的 语 句 也 变 成 了 注 解! FORTRAN 95 语 言 中 的!,Ada 语 言 中 的 -, 或 是 C 十 十 语 言 中 的 //, 都 是 在 行 的 任 意 位 置 开 始 而 直 到 行 的 末 尾 结 束 这 种 做 法 就 更 为 合 理 方 便 6. 空 格 在 不 同 的 语 言 里 空 格 的 使 用 规 则 非 常 不 同 这 点 需 要 引 起 注 意 在 FORTRAN 语 言 中, 空 格 在 除 了 字 符 串 数 据 以 外 的 任 何 其 他 地 方 都 没 有 意 义 而 在 很 多 语 言 当 中 使 用 空 格 来 作 为 分 界 符, 这 就 使 得 空 格 在 语 法 中 有 实 际 的 含 义 对 于 初 学 者 来 说, 常 常 意 识 不 到 空 格 带 来 的 问 题

7. 定 界 符 和 括 号 定 界 符 的 作 用 就 是 简 单 地 标 志 类 似 语 句 或 表 达 式 之 类 的 语 法 元 素, 目 的 就 是 增 加 源 码 的 可 读 性, 并 且 使 得 语 法 分 析 更 加 简 单 特 别 需 要 注 意 的 是, 成 对 的 定 界 符 用 来 清 楚 地 界 定 特 定 语 法 结 构 的 边 界, 从 而 可 以 有 效 地 消 除 二 义 性 8. 自 由 或 固 定 格 式 严 格 的 固 定 字 段 格 式 一 般 是 应 用 在 汇 编 语 言 当 中 而 早 期 的 FORTRAN 则 是 使 用 了 部 分 固 定 字 段 格 式 ; 其 实 很 多 语 言 早 期 同 样 是 具 有 部 分 固 定 字 段 格 式, 不 过 现 代 语 言 的 风 格 是 完 全 排 斥 那 种 固 定 格 式 的, 因 此 几 乎 所 有 语 言, 只 要 还 没 有 被 废 弃, 都 已 经 采 用 了 自 由 字 段 格 式 第 5 章 准 备 数 据 从 本 章 开 始, 我 们 将 赋 予 语 言 实 质 性 的 语 义, 也 就 是 规 定 上 章 所 描 述 的 语 言 的 每 一 个 细 节 所 具 有 的 涵 义 这 种 涵 义 与 其 说 是 我 们 对 于 一 种 语 言 细 节 的 定 义, 不 如 说 是 算 法 的 要 求, 要 求 语 言 具 有 足 够 多 的 细 节, 用 来 表 达 在 算 法 当 中 有 可 能 出 现 的 精 细 情 节 对 于 任 何 的 问 题, 站 在 计 算 机 的 角 度 来 看, 总 是 可 以 把 它 抽 象 为 如 下 图 所 示 的 结 构 : 输 入 数 据 计 算 过 程 输 出 数 据 因 此 要 准 备 通 过 计 算 来 解 决 一 个 问 题, 首 先 要 作 到 的 是 把 该 问 题 所 涉 及 到 的 数 据 整 理 好, 也 就 是 列 出 所 有 的 数 据, 然 后 根 据 数 据 的 数 学 属 性 进 行 分 类, 这 个 分 类 的 过 程 就 是 对 数 据 施 加 足 够 的 标 记 的 过 程, 将 来 把 这 些 数 据 输 入 到 计 算 机, 计 算 机 将 能 够 依 据 这 些 标 记, 辨 识 出 数 据 所 应 该 具 有 的 数 学 属 性, 从 而 施 加 相 应 的 合 法 数 学 运 算 所 以 作 为 向 计 算 机 描 述 计 算 问 题 的 FORTRAN 语 言, 它 首 先 要 作 到 的 是 约 定 如 何 给 数 据 施 加 足 够 详 细 的 标 记 对 这 个 标 记 过 程 的 第 一 个 要 求 是 保 证 准 确 性, 也 就 是 说 这 个 语 言 的 标 记 系 统 必 须 正 确 地 反 映 真 实 世 界 的 问 题 里 面, 数 据 所 具 有 的 数 学 属 性, 因 此 这 个 标 记 系 统 必 然 是 与 数 据 的 数 学 分 类 结 构 保 持 一 致 的 从 数 学 的 观 点 来 看, 世 界 上 的 所 有 数 据, 总 是 可 以 被 表 示 为 整 数, 实 数, 复 数 等 等 基 本 的 数 据 种 类, 因 此 本 章 的 内 容 就 是 讨 论 : FORTRAN 语 言 如 何 把 数 据 归 结 为 一 些 基 本 数 据 类 型 ; 然 后 为 了 足 够 详 尽 地 描 述 每 一 个 数 据 类 型 的 属 性,FORTRAN 是 如 何 施 加 相 应 的 标 记 的 ; FORTRAN 语 言 对 于 这 些 标 记 ( 语 法 形 式 ) 所 约 定 的 语 义 是 什 么 然 后 我 们 就 可 以 知 道, 要 想 用 FORTRAN 来 描 述 一 个 问 题 的 算 法, 并 进 而 以 问 题 算 法 的 FORTRAN 语 言 版 本 为 媒 介, 通 过 计 算 机 来 得 到 计 算 结 果, 第 一 个 步 骤, 就 是 准 备 好 数 据 的 FORTRAN 描 述

5.1 数 据 是 什 么 在 上 一 章 里, 据 称 计 算 机 能 够 使 用 语 言, 而 且 是 非 常 类 似 于 人 类 的 语 言, 至 少 从 形 式 上 看 很 象, 这 难 免 会 令 某 些 人 ( 特 别 是 看 过 KUBRICK 的 影 片 2001: A Space Odyssey 的 观 众 们 ) 感 到 恐 惧 别 怕! 且 先 不 讨 论 FORTRAN 作 为 语 言 是 否 具 有 与 人 类 语 言 等 价 的 表 达 能 力, 至 少 从 自 然 语 言 的 语 义 学 的 角 度 来 看,FORTRAN 说 出 来 的 话 其 实 是 绝 对 空 洞 的, 因 为 FORTRAN 语 言 的 全 部 语 义 基 础 就 只 是 数 据, 而 数 据 对 机 器 而 言, 只 是 意 味 着 经 过 编 码 的 符 号 一 台 计 算 机 其 实 是 由 以 下 6 个 部 分 组 成 : 数 据 ------ 也 就 是 基 本 数 据 元 素 以 及 数 据 结 构 ; 基 本 操 作 ------ 也 就 是 一 个 对 上 述 数 据 进 行 操 作 的 基 本 操 作 集 ; 顺 序 控 制 ------ 也 就 是 一 个 控 制 针 对 数 据 的 基 本 操 作 执 行 的 时 间 顺 序 的 机 制 ; 数 据 存 取 ------ 也 就 是 一 个 如 何 给 操 作 提 供 数 据 的 机 制 ; 存 储 管 理 ------ 也 就 是 一 个 数 据 存 储 分 配 机 制 ; 操 作 环 境 ------ 也 就 是 一 个 支 持 程 序 和 外 部 环 境 进 行 数 据 通 讯 的 机 制 因 此 一 台 计 算 机 在 程 序 的 使 用 者 看 来, 就 是 给 它 输 入 数 据, 它 再 给 你 加 工 过 的 结 果 数 据 ; 在 程 序 的 编 制 者 看 来, 就 是 把 对 数 据 的 处 理 过 程 表 示 为 计 算 机 有 限 的 一 系 列 基 本 操 作 ( 指 令 ) 的 集 合, 使 得 计 算 机 能 够 处 理 相 应 的 数 据 ; 因 此, 计 算 机 的 一 切 可 以 说 都 是 围 绕 着 数 据 ---- 如 何 表 达 数 据, 如 何 处 理 数 据 而 计 算 机 语 言 所 要 具 备 的 两 个 部 分 的 功 能, 首 先 就 是 完 备 的 描 述 数 据 的 性 质, 然 后 就 是 描 述 数 据 的 处 理 过 程 那 么, 什 么 是 数 据 呢? 数 据 就 是 符 号 化 了 的 信 息! 对 于 计 算 机 来 说, 任 何 信 息 都 只 有 表 示 为 符 号, 才 能 被 认 可 ; 反 过 来 说, 计 算 机 只 能 输 入 符 号, 而 不 会 也 不 能 理 解 符 号 的 含 义, 它 的 能 力 只 是 体 现 在 按 照 既 定 规 则 来 处 理 符 号 然 后, 就 是 给 出 数 据 的 表 示, 即 如 何 用 符 号 来 明 确 而 无 歧 义 地 表 达 数 据 要 使 得 符 号 具 备 数 据 的 含 义, 需 要 经 过 这 么 几 个 步 骤 : 处 理 符 号 的 第 一 步 : 给 符 号 分 类, 并 给 出 描 述 符 号 性 质 的 方 法 这 个 分 类 是 人 作 为 设 计 者 给 符 号 规 定 语 义 的 第 一 步, 因 为 对 于 人 来 说, 数 据 不 能 只 是 符 号, 而 是 具 有 来 自 真 实 世 界 的 语 义, 设 计 者 正 是 根 据 符 号 的 这 种 语 义, 制 定 相 应 的 处 理 符 号 的 规 则, 而 计 算 机 要 想 能 够 正 确 地 处 理 符 号, 基 本 的 前 提, 就 是 每 当 引 入 一 个 数 据, 都 得 由 人 向 机 器 声 明 这 个 数 据 是 什 么 类 型, 这 个 数 据 具 备 什 么 性 质, 而 且 假 设 计 算 机 已 经 被 引 入 处 理 该 种 数 据 类 型 的 规 则 处 理 符 号 的 第 二 步 : 区 分 常 量 与 变 量 这 一 对 范 畴 反 映 了 最 基 本 的 人 类 抽 象 能 力, 也 正 是 人 类 思 维 的 基 本 模 式 要 想 让 机 器 模 拟 这 种 能 力, 最 简 单 的 做 法 就 是 : 任 何 时 候 都 必 须 首 先 声 明, 哪 些 符 号 表 示 常 量, 哪 些 符 号 表 示 变 量, 而 变 量 相 应 的 取 值 范 围 必 须 规 定 好, 也 就 是 说 必 须 描 述 其 取 值 为 具 有 何 种 属 性 的 常 量 值 的 集 合 ; 或 至 少 已 经 被 机 器 默 认 处 理 符 号 的 第 三 步 : 给 每 一 类 数 据 规 定 相 应 的 合 法 运 算 对 于 一 种 数 据 可 以 执 行 什 么 样 的 运 算, 来 自 于 语 言 设 计 者 对 数 据 语 义 的 规 定, 只 有 当 运 算 被 表 示 为 相 应 的 机 器 指 令 或 指 令 集 合, 这 时 在 表 面 看 来, 机 器 才 开 始 真 正 理 解 了 数 据 的 涵 义