课 程 信 息 课 程 名 称 : 学 时 学 分 :54+36,3 学 分 主 讲 教 师 : 刘 鹏 副 教 授 电 子 邮 箱 :cxlp990211003@126.com 联 系 电 话 :15987874917
教 材 和 参 考 书 胡 明, 王 红 梅. 程 序 设 计 基 础 从 问 题 到 程 序. 清 华 大 学 出 版 社. 2011 充 分 利 用 学 校 的 图 书 馆 阅 览 室
教 学 目 标 掌 握 C 语 言 的 基 本 语 法 和 编 程 环 境 语 言 是 ( 与 计 算 机 交 流 的 ) 工 具, 工 欲 善 必 先 利 其 器 掌 握 程 序 设 计 的 基 本 思 想 和 一 般 方 法 从 计 算 机 的 角 度 设 想 问 题 求 解 的 操 作 步 骤 培 养 良 好 的 编 程 风 格 和 一 定 的 程 序 设 计 能 力 能 够 应 用 程 序 设 计 语 言 解 决 ( 简 单 的 ) 实 际 问 题 培 养 初 步 的 计 算 思 维 能 力 和 算 法 设 计 能 力 计 算 思 维 模 型 化 形 式 化 逻 辑 思 维 抽 象 思 维 ( 程 序 是 蓝 色 的 诗,) 算 法 是 程 序 的 灵 魂 你 有 没 有 一 点 激 动 呢 激 情 热 情
学 习 技 巧 模 仿 练 习 提 锡 壶, 游 西 湖, 锡 壶 掉 西 湖, 惜 乎 锡 壶 捧 玉 杯, 看 御 碑, 玉 杯 碎 御 碑, 欲 悲 玉 杯 知 后 羿, 有 后 裔, 后 裔 源 后 羿, 厚 矣 后 裔 听 物 理, 如 雾 里, 雾 里 看 物 理, 勿 理 物 理 熟 读 唐 诗 三 百 首, 不 会 作 诗 也 会 吟! 程 序 设 计 能 力 依 赖 于 对 具 体 的 程 序 设 计 语 言 和 开 发 环 境 的 掌 握 程 度, 依 赖 于 数 学 统 计 学 数 据 结 构 编 译 原 理 操 作 系 统 算 法 设 计 与 分 析 等 知 识 的 积 累, 依 赖 于 逻 辑 思 维 和 抽 象 思 维 等 计 算 思 维 的 具 体 运 用, 因 此 是 一 种 综 合 能 力
学 编 程 的 境 界 学 会 写 程 序 ( 程 序 设 计 基 础 的 教 学 目 标 之 一 ) 学 会 高 效 地 写 程 序 ( 代 码 量 与 编 程 的 速 度 成 正 比 ) 学 会 写 高 效 的 程 序 ( 数 据 结 构 的 教 学 目 标 之 一 ) 学 会 设 计 算 法 ( 我 们 一 直 在 努 力 ) 学 会 设 计 有 用 的 算 法 ( 发 明 算 法 是 最 高 境 界 ) 代 码 量 的 要 求 ( 本 学 期 要 统 计 这 个 数 据 ): 1. 老 师 带 领 同 学 完 成 的 代 码 量 :300 行 左 右 ; 2. 同 学 实 验 ( 课 程 设 计 ) 应 该 完 成 的 代 码 量 :500~700 行 ; 3. 同 学 课 后 应 该 完 成 的 代 码 量 :1000 行 左 右
成 绩 评 定 平 时 成 绩 30%: 出 勤 + 作 业 + 测 验 实 验 成 绩 10%: 出 勤 + 报 告 期 末 考 试 成 绩 60%:
第 1 章 绪 论 本 章 的 基 本 内 容 是 : 问 题 求 解 与 程 序 设 计 算 法 及 其 描 述 方 法 程 序 设 计 语 言 程 序 的 基 本 构 成 程 序 的 上 机 过 程 程 序 风 格
1.1 问 题 求 解 与 程 序 设 计 程 序 有 什 么 用 处? 人 有 问 题 需 要 解 决 的 人 问 题 是 丰 富 多 彩 的 人 具 有 思 维 程 序 计 算 机 可 以 解 决 问 题 的 计 算 机 计 算 机 只 认 识 0 和 1 计 算 机 没 有 思 维 人 和 计 算 机 通 过 程 序 进 行 沟 通, 只 有 在 计 算 机 上 能 够 运 行 良 好 的 程 序 才 能 为 人 们 解 决 特 定 的 实 际 问 题
1.1 问 题 求 解 与 程 序 设 计 什 么 是 程 序? 什 么 是 程 序 设 计? 程 序 : 能 够 实 现 特 定 功 能 的 指 令 序 列 的 集 合, 这 些 指 令 序 列 描 述 了 计 算 机 求 解 某 一 问 题 的 工 作 步 骤 程 序 设 计 : 给 出 解 决 特 定 问 题 的 程 序 的 过 程, 是 软 件 构 造 活 动 中 的 重 要 组 成 部 分 程 序 设 计 往 往 以 某 种 程 序 设 计 语 言 为 工 具, 给 出 这 种 语 言 下 的 程 序 程 序 设 计 过 程 应 当 包 括 分 析 设 计 编 码 测 试 排 错 等 不 同 阶 段 程 序 员 : 专 业 的 程 序 设 计 人 员 称 为 程 序 员
1.1 问 题 求 解 与 程 序 设 计 程 序 是 怎 么 写 出 来 的? 人 ( 设 计 方 案 ) 计 算 机 ( 执 行 方 案 ) 问 题 想 法 算 法 程 序 抽 象 模 型 基 本 思 路 数 据 表 示 数 据 处 理 程 序 语 言 编 程 环 境
1.2 算 法 及 其 描 述 方 法 算 法 及 其 特 性 解 决 问 题 的 方 法 算 法 : 对 特 定 问 题 求 解 步 骤 的 一 种 描 述, 是 指 令 的 有 限 序 列 算 法 必 须 满 足 下 列 五 个 重 要 特 性 : 1. 输 入 ; 2. 输 出 ; 3. 有 穷 性 ; 4. 确 定 性 ; 5. 可 行 性 算 法 (y = f (x)) 输 入 有 穷 性 : 在 合 理 时 间 内 结 束 ; 确 定 性 : 不 存 在 二 义 性 ; 输 出 可 行 性 : 机 器 可 执 行 ;
1.2 算 法 及 其 描 述 方 法 例 : 欧 几 里 德 算 法 辗 转 相 除 法 求 两 个 自 然 数 的 最 大 公 约 数 描 述 算 法 : 算 法 设 计 者 在 构 思 和 设 计 了 一 个 算 法 之 后, 必 须 清 楚 准 确 地 将 所 设 计 的 求 解 步 骤 记 录 下 来 使 用 算 法 : 算 法 使 用 者 知 道 如 何 调 用 算 法 m n 欧 几 里 德 算 法 r
1.2 算 法 及 其 描 述 方 法 描 述 算 法 的 方 法 1. 自 然 语 言 步 骤 1: 将 m 除 以 n 得 到 余 数 r; 步 骤 2: 若 r 等 于 0, 则 n 为 最 大 公 约 数, 算 法 结 束 ; 否 则 执 行 步 骤 3 步 骤 3: 将 n 的 值 放 在 m 中, 将 r 的 值 放 在 n 中 ; 步 骤 4: 重 新 执 行 步 骤 1;
1.2 算 法 及 其 描 述 方 法 描 述 算 法 的 方 法 2. 程 序 流 程 图 图 形 符 号 名 称 含 义 起 止 框 表 示 算 法 的 开 始 或 结 束 处 理 框 表 示 处 理 或 运 算 等 功 能 输 入 / 输 出 框 表 示 进 行 输 入 / 输 出 操 作 判 断 框 根 据 给 定 的 条 件 是 否 满 足 决 定 执 行 两 条 路 径 中 的 某 一 条 路 径 控 制 流 表 示 算 法 执 行 的 路 径, 箭 头 代 表 方 向 开 始 输 入 m 和 n r=m % n r=0 N m=n;n=r 输 出 n 结 束 Y
1.2 算 法 及 其 描 述 方 法 描 述 算 法 的 方 法 3. 伪 代 码 : 介 于 自 然 语 言 和 程 序 设 计 语 言 之 间 处 理 和 条 件 结 构 语 句 和 控 制 成 分 1. r = m % n ; 2. 循 环 直 到 r = 0 2.1 m = n ; 2.2 n = r ; 2.3 r = m % n ; 3. 输 出 n ;
简 单 的 算 法 举 例 例 求 1 2 3 4 5 1000 可 以 用 最 原 始 的 方 法 进 行 : 太 繁 琐 步 骤 1: 先 求 1*2, 得 到 结 果 2 步 骤 2: 将 步 骤 1 得 到 的 乘 积 2 再 乘 以 3, 得 到 结 果 6 步 骤 3: 将 6 再 乘 以 4, 得 24 步 骤 4: 将 24 再 乘 以 5, 得 120 这 就 是 最 后 的 结 果
改 进 的 算 法 : 简 单 的 算 法 举 例 设 变 量 p 为 被 乘 数 变 量 i 为 乘 数 用 循 环 算 法 求 结 果
简 单 的 算 法 举 例 S1: 使 p=1, 或 写 成 1 p S2: 使 i=2, 或 写 成 2 i S3: 使 p 与 i 相 乘, 乘 积 仍 放 在 变 量 p 中, 可 表 示 为 :p*i p 若 是 1000, 怎 么 办? S4: 使 i 的 值 加 1, 即 i+1 i S5: 如 果 i 不 大 于 5, 返 回 重 新 执 行 S3; 否 则, 算 法 结 束 最 后 得 到 p 的 值 就 是 5! 的 值
简 单 的 算 法 举 例 若 求 1 3 5 7 9 11 S1: 使 p=1, 或 写 成 1 p S2: 使 i=2, 或 写 成 2 i S3: 使 p 与 i 相 乘, 乘 积 仍 放 在 变 量 p 中, 可 表 示 为 :p*i p 相 当 于 i 11 S4: 使 i 的 值 加 1, 即 i+1 i S5: 如 果 i 不 大 于 5, 返 回 重 新 执 行 S3; 否 则, 算 法 结 束 3 3 2 2 11 11 最 后 得 到 p 的 值 就 是 5! 的 值
开 始 算 法 用 流 程 图 表 示 求 1 2 3 4 5 如 果 需 要 将 最 后 结 果 输 出 : 1 t 2 i t*i t i+1 i N i>5 Y 结 束
开 始 算 法 用 流 程 图 表 示 求 1 2 3 4 5 如 果 需 要 将 最 后 结 果 输 出 : 结 束 N 1 t 2 i t*i t i+1 i i>5 Y 输 出 t
例 判 定 2000 2500 年 中 的 每 一 年 是 否 闰 年, 并 将 结 果 输 出 闰 年 的 条 件 : (1) 能 被 4 整 除, 但 不 能 被 100 整 除 的 年 份 都 是 闰 年, 如 2008 2012 2048 年 (2) 能 被 400 整 除 的 年 份 是 闰 年, 如 2000 年 不 符 合 这 两 个 条 件 的 年 份 不 是 闰 年 例 如 2009 2100 年
设 year 为 被 检 测 的 年 份 算 法 表 示 如 下 : S1:2000 year S2: 若 year 不 能 被 4 整 除, 则 输 出 year 的 值 和 不 是 闰 年 然 后 转 到 S6 S3: 若 year 能 被 4 整 除, 不 能 被 100 整 除, 则 输 出 year 的 值 和 是 闰 年 然 后 转 到 S6 S4: 若 year 能 被 400 整 除, 则 输 出 year 的 值 和 是 闰 年, 然 后 转 到 S6 S5: 其 他 情 况 输 出 year 的 值 和 不 是 闰 年 S6:year+1 year S7: 当 year 2500 时, 转 S2, 否 则 停 止
闰 年 year 被 100 整 除, 又 能 被 400 整 除 其 他 非 闰 年 year 不 能 被 4 整 除 非 闰 年 year 被 4 整 除, 但 不 能 被 100 整 除 闰 年 逐 渐 缩 小 判 断 的 范 围
开 始 输 入 n 2 i n%i r N r=0 N i+1 i i> n Y 输 出 结 果 Y 输 出 结 果 结 束
通 过 以 上 几 个 例 子 可 以 看 出 流 程 图 是 表 示 算 法 的 较 好 的 工 具 一 个 流 程 图 包 括 以 下 几 部 分 : (1) 表 示 相 应 操 作 的 框 (2) 带 箭 头 的 流 程 线 (3) 框 内 外 必 要 的 文 字 说 明 流 程 线 不 要 忘 记 画 箭 头, 否 则 难 以 判 定 各 框 的 执 行 次 序
三 种 基 本 结 构 和 改 进 的 流 程 图 1. 传 统 流 程 图 的 弊 端 传 统 的 流 程 图 用 流 程 线 指 出 各 框 的 执 行 顺 序, 对 流 程 线 的 使 用 没 有 严 格 限 制 使 用 者 可 以 毫 不 受 限 制 地 使 流 程 随 意 地 转 来 转 去, 使 人 难 以 理 解 算 法 的 逻 辑
三 种 基 本 结 构 和 改 进 的 流 程 图 2. 三 种 基 本 结 构 (1) 顺 序 结 构 A B
三 种 基 本 结 构 和 改 进 的 流 程 图 2. 三 种 基 本 结 构 (2) 选 择 结 构 Y p N Y p N A B A
三 种 基 本 结 构 和 改 进 的 流 程 图 输 出 1,2,3,4,5 2. 三 种 基 本 结 构 (3) 循 环 结 构 1 当 型 循 环 结 构 p1 Y A N 0 x x<5 Y 输 出 x 的 值 x+1 x N
三 种 基 本 结 构 和 改 进 的 流 程 图 2. 三 种 基 本 结 构 输 出 1,2,3,4,5 (3) 循 环 结 构 2 直 到 型 循 环 结 构 A 0 x x+1 x 输 出 x 的 值 N p2 N x 5 Y Y
以 上 三 种 基 本 结 构, 有 以 下 共 同 特 点 : (1) 只 有 一 个 入 口 (2) 只 有 一 个 出 口 一 个 判 断 框 有 两 个 出 口 一 个 选 择 结 构 只 有 一 个 出 口 (3) 结 构 内 的 每 一 部 分 都 有 机 会 被 执 行 到 也 就 是 说, 对 每 一 个 框 来 说, 都 应 当 有 一 条 从 入 口 到 出 口 的 路 径 通 过 它 (4) 结 构 内 不 存 在 死 循 环
用 N-S 流 程 图 表 示 算 法 N-S 流 程 图 用 以 下 的 流 程 图 符 号 : p A Y N B A B 当 p 1 成 立 A A 直 到 p 2 成 立 顺 序 结 构 选 择 结 构 循 环 结 构 ( 当 型 ) 循 环 结 构 ( 直 到 型 )
将 求 5! 算 法 用 N-S 图 表 示 1 t 2 i t*i t i+1 i 直 到 i>5 输 出 t
将 判 定 闰 年 的 算 法 用 N-S 图 表 示 是 是 输 出 year 闰 年 year%100 不 为 0 是 输 出 year 闰 年 2000 year year%4 为 0 year%400 为 0 year+1 year 直 到 year>2500 否 输 出 year 非 闰 年 否 否 输 出 year 非 闰 年
1.3 程 序 设 计 语 言 程 序 设 计 语 言 的 发 展 1. 第 一 代 程 序 设 计 语 言 (1GL) 机 器 语 言 2. 第 二 代 程 序 设 计 语 言 (2GL) 汇 编 语 言 3. 第 三 代 程 序 设 计 语 言 (3GL) 高 级 语 言 4. 第 四 代 程 序 设 计 语 言 (4GL) 非 过 程 式 语 言 5. 第 五 代 程 序 设 计 语 言 (5GL) 知 识 型 语 言 源 程 序 : 用 高 级 语 言 编 写 的 程 序 ; 目 标 程 序 : 用 机 器 语 言 或 汇 编 语 言 编 写 的 程 序 ; 机 器 代 码 : 由 二 进 制 代 码 表 示 的 程 序
1.3 程 序 设 计 语 言 程 序 设 计 语 言 的 发 展 程 序 设 计 语 言 发 展 的 推 动 力 是 对 抽 象 的 更 高 要 求, 以 及 对 程 序 设 计 思 想 的 更 好 支 持 第 一 代 程 序 设 计 语 言 (1GL) 机 器 语 言 机 器 语 言 使 用 内 置 在 计 算 机 电 路 中 的 指 令, 烦 琐 易 出 错, 可 移 植 性 差 如 果 不 小 心 弄 错 了 一 个 二 进 制 位, 该 如 何 找 出 来?
1.3 程 序 设 计 语 言 程 序 设 计 语 言 的 发 展 程 序 设 计 语 言 发 展 的 推 动 力 是 对 抽 象 的 更 高 要 求, 以 及 对 程 序 设 计 思 想 的 更 好 支 持 第 二 代 程 序 设 计 语 言 (2GL) 汇 编 语 言 助 记 符 二 进 制 编 码 MOV 01010011 ADD 00110110 SHL 10001100
1.3 程 序 设 计 语 言 程 序 设 计 语 言 的 发 展 程 序 设 计 语 言 发 展 的 推 动 力 是 对 抽 象 的 更 高 要 求, 以 及 对 程 序 设 计 思 想 的 更 好 支 持 第 二 代 程 序 设 计 语 言 (2GL) 汇 编 语 言 汇 编 器
1.3 程 序 设 计 语 言 程 序 设 计 语 言 的 发 展 程 序 设 计 语 言 发 展 的 推 动 力 是 对 抽 象 的 更 高 要 求, 以 及 对 程 序 设 计 思 想 的 更 好 支 持 第 二 代 程 序 设 计 语 言 (2GL) 汇 编 语 言 相 对 于 机 器 语 言, 汇 编 语 言 简 化 了 程 序 编 写, 而 且 不 容 易 出 错, 但 程 序 仍 不 具 有 可 移 植 性
1.3 程 序 设 计 语 言 程 序 设 计 语 言 的 发 展 程 序 设 计 语 言 发 展 的 推 动 力 是 对 抽 象 的 更 高 要 求, 以 及 对 程 序 设 计 思 想 的 更 好 支 持 第 三 代 程 序 设 计 语 言 (3GL) 高 级 语 言 高 级 语 言 : 高 级 程 序 设 计 语 言, 相 应 地, 机 器 语 言 和 汇 编 语 言 称 为 低 级 语 言, 低 级 意 味 着 从 机 器 的 层 次 上 考 虑 问 题 int x = 3, y = 5, z = 0; z = x + y; printf("%d + %d = %d/n", x, y, z); 高 级 语 言 类 似 于 自 然 语 言 和 数 学 语 言, 方 便 编 程, 可 读 性 和 可 移 植 性 较 强
1.3 程 序 设 计 语 言 程 序 设 计 语 言 的 发 展 程 序 设 计 语 言 发 展 的 推 动 力 是 对 抽 象 的 更 高 要 求, 以 及 对 程 序 设 计 思 想 的 更 好 支 持 第 三 代 程 序 设 计 语 言 (3GL) 高 级 语 言 int x = 3, y = 5, z = 0; z = x + y; printf("%d + %d = %d/n", x, y, z); 编 译 器
1.3 程 序 设 计 语 言 程 序 设 计 语 言 的 发 展 程 序 设 计 语 言 发 展 的 推 动 力 是 对 抽 象 的 更 高 要 求, 以 及 对 程 序 设 计 思 想 的 更 好 支 持 第 三 代 程 序 设 计 语 言 (3GL) 高 级 语 言 结 构 化 程 序 设 计 语 言 : BASIC PASCAL C 等 面 向 对 象 程 序 设 计 语 言 :Java C++ C# 等 可 视 化 程 序 设 计 语 言 :VB Delphi Visual C++ 等 网 络 程 序 设 计 语 言 :ASP PHP 和 JSP 等
1.3 程 序 设 计 语 言 程 序 设 计 语 言 的 发 展 程 序 设 计 语 言 发 展 的 推 动 力 是 对 抽 象 的 更 高 要 求, 以 及 对 程 序 设 计 思 想 的 更 好 支 持 第 四 代 程 序 设 计 语 言 (4GL) 非 过 程 式 语 言 利 用 4GL 开 发 软 件 只 需 要 考 虑 做 什 么 而 不 必 考 虑 如 何 做, 不 涉 及 太 多 的 算 法 细 节, 从 而 大 大 提 高 软 件 生 产 率 迄 今 为 止, 使 用 最 成 熟 的 4GL 是 数 据 库 查 询 语 言 (SQL 语 言 ), 许 多 数 据 库 语 言 如 Oracle DB2 Informix Sybase 等 都 包 含 有 4GL 成 分
1.3 程 序 设 计 语 言 程 序 设 计 语 言 的 发 展 程 序 设 计 语 言 发 展 的 推 动 力 是 对 抽 象 的 更 高 要 求, 以 及 对 程 序 设 计 思 想 的 更 好 支 持 第 五 代 程 序 设 计 语 言 (5GL) 知 识 型 语 言 5GL 主 要 应 用 在 人 工 智 能 研 究 上, 典 型 代 表 是 LISP 语 言 和 PROLOG 语 言 目 前,4GL 和 5GL 的 发 展 都 不 是 很 成 熟, 在 效 率 应 用 等 方 面 都 存 在 诸 多 问 题, 常 用 的 程 序 设 计 语 言 仍 然 是 3GL
1.3 程 序 设 计 语 言 程 序 设 计 语 言 的 排 名 2009 年 2 月 排 名 2008 年 2 月 排 名 排 名 变 化 编 程 语 言 2009 年 2 月 流 行 度 自 2008 年 2 月 变 化 值 1 1 = Java 19. 401% -2.08% 2 2 = C 15.837% +0.98% 3 5 C++ 9.633% +0.36% 4 3 (Visual) Basic 8.843% -2.76% 5 4 PHP 8.779% -1.11% 6 8 C# 5.062% +0.55% 7 7 = Python 4.567% -0.20% 8 6 Perl 4.117% -2.09% 9 9 = Delphi 3.624% +0.83% 10 10 = JavaScript 3.540% +1.21%
语 法 : 包 括 词 法 规 则 和 语 法 规 则, 词 法 规 则 规 定 了 如 何 从 语 言 的 基 本 符 号 构 成 词 法 单 位 ( 也 称 单 词 ), 语 法 规 则 规 定 了 如 何 由 单 词 构 成 语 法 单 位 ( 例 如 表 达 式 语 句 等 ), 这 些 规 则 是 判 断 一 个 字 符 串 是 否 构 成 一 个 形 式 上 正 确 的 程 序 的 依 据 语 义 : 包 括 语 义 规 则, 规 定 了 各 词 法 单 位 和 语 法 单 位 的 具 体 含 义 1.4 程 序 设 计 语 言 的 基 本 构 成 程 序 设 计 语 言 符 号 系 统 设 计 程 序 设 计 语 言 的 根 本 目 标 在 于 使 人 类 能 够 以 熟 悉 的 方 式 编 写 程 序
1.4 程 序 设 计 语 言 的 基 本 构 成 程 序 设 计 语 言 符 号 系 统 词 法 规 则 语 法 规 则 功 能 逻 辑 有 机 组 合 基 本 符 号 单 词 语 句 函 数 程 序 类 比 自 然 语 言 : 基 本 符 号 字 母 语 句 句 子 程 序 文 章 单 词 单 词 函 数 段 落
基 本 字 符 集 1.4 程 序 设 计 语 言 的 基 本 构 成 将 一 些 特 定 的 字 符 按 照 一 定 的 规 则 进 行 排 列 就 组 成 了 程 序, 这 些 特 定 的 字 符 构 成 了 程 序 设 计 语 言 的 基 本 字 符 集 C 语 言 的 基 本 字 符 集 包 括 : 1. 英 文 字 母 : 包 括 26 个 大 写 英 文 字 母 A~Z 和 26 个 小 写 英 文 字 符 a~z; 其 他 任 何 符 号 不 2. 数 字 : 包 括 0~9 等 10 个 数 字 ; 允 许 出 现 在 用 这 3. 空 白 符 : 包 括 空 格 符 回 车 符 制 表 符 ; 种 程 序 设 计 语 言 4. 特 殊 字 符 : 包 括 29 个 特 殊 字 符 编 写 的 程 序 中!
1.4 程 序 设 计 语 言 的 基 本 构 成 词 法 单 位 ( 单 词 ) 单 词 : 由 基 本 字 符 集 中 的 字 符 根 据 词 法 规 则 组 合 而 成, 基 本 的 单 词 有 关 键 字 标 识 符 运 算 符 分 隔 符 等 1. 关 键 字 ( 也 称 保 留 字 ): 程 序 设 计 语 言 预 先 声 明 的 单 词, 关 键 字 的 拼 写 是 固 定 的, 具 有 特 殊 的 含 义 和 作 用
词 法 单 位 1.4 程 序 设 计 语 言 的 基 本 构 成 2. 标 识 符 : 编 程 人 员 声 明 的 单 词, 用 来 表 示 各 种 程 序 对 象 ( 如 变 量 类 型 函 数 文 件 等 ) 的 名 字 不 同 的 程 序 设 计 语 言 对 于 标 识 符 的 构 成 遵 循 不 同 的 规 则,C 语 言 中 标 识 符 的 构 成 规 则 如 下 : (1) 以 字 母 ( 大 写 或 小 写 ) 或 下 划 线 _ 开 始 ; (2) 由 字 母 ( 大 / 小 写 ) 下 划 线 _ 或 数 字 (0~9) 组 成 ; (3) 大 写 字 母 和 小 写 字 母 代 表 不 同 的 标 识 符 A,P_o,P-o,from,_123,temp,int,6day,program, ok? 良 好 的 编 程 习 惯 : 见 名 知 意
词 法 单 位 1.4 程 序 设 计 语 言 的 基 本 构 成 3. 运 算 符 : 程 序 设 计 语 言 预 先 规 定 的 操 作 符, 用 于 实 现 特 定 的 算 术 运 算 或 逻 辑 运 算 + - * / % = += -= *= /= %= &! ~. ^ ++ -- << >> <<= >>= <= >= = =!= &= = ^= && < >? ->
词 法 单 位 1.4 程 序 设 计 语 言 的 基 本 构 成 4. 分 隔 符 : 用 于 分 隔 单 词 或 程 序 正 文 的 单 词 分 隔 符 不 表 示 任 何 实 际 的 操 作, 仅 用 于 构 造 程 序 ( ) { } [ ] ; :, # \ int length; intlength; int length, width; int lengthwidth; 由 多 个 字 符 组 成 的 单 词 中 间 不 允 许 夹 有 任 何 其 他 符 号 ( 包 括 空 格 ), 否 则 可 能 会 改 变 程 序 的 含 义 并 且 引 发 错 误
1.4 程 序 的 基 本 构 成 语 法 单 位 语 法 单 位 : 由 单 词 根 据 语 法 规 则 构 成 的 最 常 见 的 语 法 单 位 是 表 达 式 和 语 句, 是 构 成 程 序 的 基 本 成 分 1. 表 达 式 : 由 运 算 符 运 算 对 象 ( 也 称 操 作 数 ) 和 括 号 组 成, 能 够 对 数 据 进 行 各 种 运 算 处 理 算 术 表 达 式 :8 * (2 + 3) 5/2 逻 辑 表 达 式 :(a >= 3) && (a <= 6)
语 法 单 位 1.4 程 序 设 计 语 言 的 基 本 构 成 2. 语 句 : 描 述 动 作 的 基 本 单 位, 用 来 向 计 算 机 系 统 发 出 操 作 指 令, 程 序 的 功 能 就 是 通 过 执 行 一 系 列 语 句 来 实 现 的 类 似 于 自 然 语 言 中 的 一 句 话, 语 句 与 行 的 长 短 无 关, 有 些 语 句 比 较 长 可 以 写 在 两 行 或 更 多 行, 但 仍 是 一 条 语 句, 如 果 相 邻 语 句 都 比 较 短, 也 可 以 写 在 同 一 行, 因 此, 需 要 采 取 某 种 办 法 标 识 语 句 的 结 束 位 置,C 语 言 规 定 每 条 语 句 都 以 分 号 结 尾 ; ; ; ; ; 一 条 语 句 三 条 语 句 一 条 语 句
语 法 单 位 1.4 程 序 设 计 语 言 的 基 本 构 成 3. 模 块 为 了 使 程 序 的 逻 辑 清 晰, 通 常 将 一 个 复 杂 的 问 题 分 解 为 多 个 子 问 题, 每 个 子 问 题 完 成 一 项 基 本 任 务, 求 解 子 问 题 的 语 句 序 列 构 成 模 块 C 语 言 用 函 数 实 现 模 块 功 能 相 同 的 代 码 编 码 一 次 功 能 相 同 的 代 码 模 块 化 调 用 代 码 调 用 代 码
程 序 1.4 程 序 设 计 语 言 的 基 本 构 成 一 个 程 序 可 以 是 非 常 简 单 的, 也 可 以 是 特 别 复 杂 的, 这 取 决 于 程 序 所 要 实 现 的 功 能 和 具 体 的 程 序 设 计 语 言 任 何 一 种 程 序 设 计 语 言 对 于 程 序 的 构 成 都 有 具 体 的 规 定, 程 序 必 须 严 格 按 照 该 语 言 规 定 的 语 法 和 表 达 方 式 编 写 第 1 部 分 : 预 处 理 命 令 数 据 类 型 定 义 或 全 局 变 量 定 义 函 数 声 明 第 2 部 分 : 主 函 数 第 3 部 分 : 其 他 函 数 定 义
1.4 程 序 设 计 语 言 的 基 本 构 成 例 : 计 算 x + y 的 值 第 1 部 分 第 2 部 分
1.4 程 序 设 计 语 言 的 基 本 构 成 例 : 求 两 个 整 数 中 较 大 者 1 /* 程 序 名 :max.cpp */ 2 #include <stdio.h> 注 释 信 息 文 件 包 含 预 处 理 命 令 3 int Max (int x, int y) ; 函 数 声 明 4 返 回 类 型, 由 操 作 系 统 检 测 5 int main ( ) 6 { 库 函 数, 位 于 stdio.h 文 件 中 7 printf ("%d", Max(6, 5)); 函 数 调 用, 输 出 max(6, 5) 的 结 果 8 return 0; 9 } 10 返 回 类 型, 与 return 相 对 应 11 int Max (int x, int y) 12 { 自 定 义 函 数,Max 为 函 数 名 13 int max; 14 if (x>=y) max=x; 15 else max=y; 16 return max; 将 较 大 值 max 返 回, 即 函 数 的 执 行 结 果 17 } 第 1 部 分 第 2 部 分 第 3 部 分
1.4 程 序 设 计 语 言 的 基 本 构 成 C 程 序 的 主 要 特 点 : 1. 注 释 注 释 不 是 程 序 的 可 执 行 语 句, 在 程 序 中 的 作 用 是 对 程 序 进 行 注 解 和 说 明 2. 预 处 理 指 令 C 程 序 是 由 函 数 组 成 的,C 语 言 的 函 数 分 为 两 大 类 : 一 类 是 编 程 人 员 编 写 的 函 数, 称 为 自 定 义 函 数, 另 一 类 是 C 语 言 编 译 器 提 供 的 函 数, 称 为 库 函 数 3. main 函 数 一 个 C 程 序 不 论 包 含 多 少 个 函 数, 都 有 且 只 能 有 一 个 main 函 数, 称 为 主 函 数 4. main 函 数 的 典 型 构 成 是 输 入 数 据 处 理 数 据 输 出 结 果 5. main 函 数 的 执 行 main 函 数 由 操 作 系 统 调 用, 在 main 函 数 执 行 结 束 时 通 过 return 语 句 返 回 一 个 状 态 码, 操 作 系 统 在 程 序 终 止 时 可 以 检 测 到 这 个 状 态 码
1.5 程 序 的 上 机 过 程 在 程 序 编 辑 器 中 录 入 程 序 代 码, 并 以 文 本 文 件 的 形 式 保 存
1.5 程 序 的 上 机 过 程 用 编 译 器 将 编 辑 好 的 程 序 翻 译 成 二 进 制 代 码, 生 成 目 标 程 序
1.5 程 序 的 上 机 过 程.obj 文 件 不 能 直 接 运 行 连 接 是 把 目 标 文 件 和 其 他 目 标 文 件 系 统 提 供 的 库 函 数 操 作 系 统 提 供 的 资 源, 链 接 到 一 个 可 执 行 文 件 中
1.5 程 序 的 上 机 过 程.exe 文 件 可 以 直 接 运 行 调 试 的 目 的 是 发 现 并 排 除 程 序 中 的 语 义 错 误 和 逻 辑 错 误
编 程 环 境 1.5 程 序 的 上 机 过 程 编 程 环 境 是 指 利 用 程 序 设 计 语 言 进 行 程 序 开 发 的 编 程 环 境 熟 练 使 用 编 程 工 具 和 环 境, 是 提 高 编 程 效 率 的 因 素 之 一, 初 学 者 应 该 尽 快 熟 悉 编 程 环 境
1.5 程 序 的 上 机 过 程 编 程 环 境 简 单 地, 在 VC++ 环 境 下 建 立 一 个 ( 单 ) 文 件 的 步 骤 如 下 : 1. 单 击 文 件 菜 单, 在 弹 出 的 下 拉 菜 单 中 单 击 新 建 选 项, 在 弹 出 的 对 话 框 中 选 择 文 件 标 签, 然 后 选 中 C++ Source File 2. 在 右 边 的 位 置 文 本 框 选 择 或 创 建 一 个 文 件 夹, 在 文 件 名 文 本 框 键 入 一 个 文 件 名 称, 单 击 确 定 按 钮, 一 个 C 源 程 序 文 件 就 建 立 起 来 了
程 序 编 辑 1.5 程 序 的 上 机 过 程 程 序 编 辑 : 输 入 程 序 以 及 修 改 程 序 的 过 程
程 序 编 译 1.5 程 序 的 上 机 过 程
1.5 程 序 的 上 机 过 程 程 序 编 译 编 译 按 钮 出 错 行 号 出 错 代 码 出 错 信 息 信 息 窗 口
1.5 程 序 的 上 机 过 程 程 序 编 译 1. 预 处 理 : 在 编 译 之 前 对 源 程 序 进 行 某 些 预 处 理 工 作, 如 滤 掉 注 释 文 件 包 含 宏 替 换 等, 然 后 再 对 预 处 理 之 后 的 源 程 序 进 行 编 译 注 释 不 能 嵌 套, 否 则 预 处 理 阶 段 滤 掉 注 释 后 会 产 生 语 法 错 误
1.5 程 序 的 上 机 过 程 程 序 编 译 2. 词 法 分 析 : 对 源 程 序 进 行 扫 描 和 分 解, 按 照 词 法 规 则 识 别 出 一 个 个 的 单 词, 如 关 键 字 变 量 名 运 算 符 等, 并 将 单 词 转 化 为 某 种 机 内 表 示 如 果 发 现 词 法 错 误, 则 指 出 错 误 位 置, 给 出 错 误 信 息 例 如, 词 法 分 析 将 语 句 double area = 10; 分 解 为 5 个 单 词 : double area = 10 ; 1 2 3 4 5 其 中 : 单 词 1 是 关 键 字, 单 词 2 是 标 识 符, 单 词 3 是 运 算 符, 单 词 4 是 常 量, 单 词 5 是 分 隔 符
1.5 程 序 的 上 机 过 程 程 序 编 译 3. 语 法 分 析 : 编 译 程 序 的 核 心 部 分, 它 的 任 务 是 对 词 法 分 析 阶 段 得 到 的 单 词 序 列 按 照 语 法 规 则 分 析 出 一 个 个 的 语 法 单 位, 如 表 达 式 语 句 等 如 果 发 现 语 法 错 误, 则 指 出 错 误 位 置, 给 出 错 误 信 息 例 如, 语 法 分 析 将 语 句 double area = 10; 表 示 成 如 图 所 示 的 语 法 树, 并 得 出 分 析 结 果 : 是 一 个 语 法 上 正 确 的 赋 值 语 句
程 序 编 译 1.5 程 序 的 上 机 过 程 4. 语 义 分 析 : 检 查 程 序 中 语 义 的 正 确 性, 以 保 证 单 词 或 语 法 单 位 能 有 意 义 地 结 合 在 一 起, 并 为 代 码 生 成 收 集 类 型 信 息 语 义 分 析 的 一 个 重 要 部 分 是 类 型 检 查, 即 对 每 个 运 算 符 的 运 算 对 象, 检 查 它 们 的 类 型 是 否 合 法 例 如, 对 于 语 句 double area = 10; 语 义 分 析 后 得 到 如 图 所 示 的 语 法 树 为 什 么 要 进 行 类 型 转 换?
1.5 程 序 的 上 机 过 程 程 序 编 译 5. 生 成 代 码 : 将 形 式 上 正 确 的 源 程 序 转 换 为 特 定 机 器 的 目 标 程 序 显 然, 高 级 语 言 和 计 算 机 的 多 样 性 为 目 标 代 码 生 成 的 理 论 研 究 和 实 现 技 术 带 来 很 大 的 复 杂 性 例 如, 对 于 语 句 double area = 10; 生 成 如 下 四 元 式 序 列 : (inttoreal, 10, -, t1) (=, id1, t1, -) 其 中,t1 是 编 译 程 序 生 成 的 临 时 变 量,id1 是 标 识 符 area 的 内 部 形 式
程 序 连 接 1.5 程 序 的 上 机 过 程
1.5 程 序 的 上 机 过 程 运 行 调 试 调 试 方 法 1: 设 置 断 点 观 察 变 量 (1) 设 置 断 点 : 可 以 在 程 序 的 任 何 一 个 语 句 上 做 断 点 标 记, 将 来 程 序 运 行 到 这 里 时 会 停 下 来 (2) 观 察 变 量 : 当 程 序 运 行 到 断 点 的 地 方 停 下 来 后, 就 可 以 观 察 各 个 变 量 的 值, 判 断 此 时 变 量 的 值 是 否 是 你 所 期 望 的 如 果 不 是, 则 说 明 在 断 点 之 前 肯 定 存 在 错 误, 这 样, 就 可 以 把 出 错 的 范 围 集 中 在 断 点 之 前 的 程 序 上 调 试 方 法 2: 单 步 跟 踪, 即 一 步 一 步 跟 踪 程 序 的 执 行 过 程, 同 时 观 察 变 量 的 变 化 情 况 调 试 是 一 个 需 要 耐 心 和 经 验 的 过 程, 也 是 程 序 设 计 最 基 本 的 技 能
1.6 程 序 风 格 标 识 符 的 命 名 规 则 1. 符 号 常 量 : 用 大 写 字 母 表 示 符 号 常 量, 例 如 :PI NUM 等 2. 变 量 : 变 量 名 中 除 第 一 个 单 词 外 的 每 个 单 词 的 首 字 母 大 写, 例 如 :studentname studentaddress 等 3. 函 数 : 为 了 与 变 量 名 区 分 开, 函 数 名 中 每 个 单 词 的 首 字 母 大 写, 例 如 PrintTri Max 等 VC++ 提 供 的 库 函 数 是 用 小 写 字 母 命 名 的 4. 自 定 义 数 据 类 型 : 为 了 与 变 量 名 区 分 开, 自 定 义 数 据 类 型 名 中 每 个 单 词 的 首 字 母 大 写, 并 且 以 单 词 Type 结 尾, 例 如 StudentType DateType 等 5. 全 局 变 量 : 为 了 便 于 区 别 全 局 变 量 和 局 部 变 量, 全 局 变 量 名 中 每 个 单 词 的 首 字 母 大 写, 例 如 StudentNum SecretNum 等
1.6 程 序 风 格 注 释 编 写 程 序 必 须 做 的 一 件 最 重 要 事 就 是 注 释 注 释 是 程 序 员 为 了 增 加 程 序 的 可 读 性 和 易 懂 性, 人 为 增 加 的 说 明 性 信 息 究 竟 应 该 在 什 么 地 方 加 注 释, 注 释 应 该 包 括 什 么, 注 释 应 该 采 用 什 么 格 式, 业 内 并 没 有 一 个 统 一 的 标 准, 很 多 公 司 都 建 立 自 己 的 一 套 内 部 标 准 并 要 求 开 发 团 队 遵 守 和 使 用 1. 在 程 序 开 始 的 地 方 说 明 程 序 名 作 者 功 能 编 写 日 期 以 及 其 他 内 容 例 如 : /*********************************** * 程 序 名 :Example1.cpp * * 作 者 :wanghm * * 功 能 : 求 最 大 公 约 数 * * 日 期 :02/11/2008 * ***********************************/
1.6 程 序 风 格 注 释 2. 在 函 数 开 始 的 地 方 说 明 函 数 名 作 者 功 能 形 参 的 作 用 编 写 日 期 以 及 其 他 内 容 例 如 : /*********************************** * 函 数 名 :CommonFactor * * 作 者 :wanghm * * 功 能 : 求 两 个 整 数 的 最 大 公 约 数 * * 形 参 :m 和 n, 为 两 个 自 然 数 * * 日 期 :02/11/2008 * ************************************/ 3. 对 一 个 程 序 段 一 个 语 句 或 一 个 变 量 声 明 等 加 注 释, 以 说 明 某 程 序 段 的 功 能 一 个 语 句 的 作 用 一 个 常 量 或 变 量 的 意 义 等 例 如 : int length, width; sum = 0; // length 和 width 分 别 表 示 长 方 形 的 长 和 宽 // 初 始 化 累 加 器
1.6 程 序 风 格 缩 进 按 照 程 序 的 嵌 套 层 次 使 程 序 呈 现 锯 齿 形 的 缩 进 格 式, 即 逻 辑 上 属 于 同 一 个 层 次 的 互 相 对 齐, 逻 辑 上 属 于 内 部 层 次 的 推 到 下 一 个 对 齐 的 位 置 int CommonFactor(int m, int n) { int r = m % n; while (r!= 0) { m = n; n = r; r = m % n; } return n; }
1.6 程 序 风 格 行 文 风 格 良 好 的 行 文 格 式 能 使 程 序 结 构 一 目 了 然, 使 读 程 序 的 人 更 容 易 辨 别 程 序 的 结 构, 也 有 助 于 发 现 程 序 中 的 错 误 程 序 的 行 文 格 式 主 要 通 过 合 理 利 用 空 格 和 空 行, 使 得 程 序 层 次 分 明 段 落 清 晰 意 义 明 确 volume = length * width * height ; include <stdio.h> int main( ) { int a = 0, b = 0; b = a + 5; printf("b=%d", b); return 0 ; } // 空 行
1.6 程 序 风 格 行 文 风 格 大 括 号 的 风 格 K&R 风 格 : 左 大 括 号 出 现 在 行 的 末 尾 以 保 持 程 序 的 紧 凑, 右 大 括 号 单 独 占 一 行 int main ( ) { } int main ( ) { } 大 括 号 的 风 格 Allman 风 格 : 为 了 易 于 检 查 匹 配, 每 一 个 大 括 号 都 单 独 放 在 一 行 上, 程 序 设 计 风 格 是 程 序 员 必 备 的 修 养 良 好 的 程 序 风 格 来 源 于 长 期 的 编 程 实 践, 最 好 的 程 序 风 格 就 是 遵 循 一 些 行 业 标 准