谭浩强C++课后习题答案.pdf
《谭浩强C++课后习题答案.pdf》由会员分享,可在线阅读,更多相关《谭浩强C++课后习题答案.pdf(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、浩 强 C+课 后 习 题 答 案 一 1.请 根 据 你 的 了 解,叙 述 C+的 特 点。C+对 C 有 哪 些 发 展?【解】略。2.一 个 C+的 程 序 是 由 哪 几 部 分 构 成 的?其 中 的 每 一 部 分 起 什 么 作 用?【解】略。3.从 拿 到 一 个 任 务 到 得 到 最 终 结 果,一 般 要 经 过 几 个 步 骤?【解】略。4.请 说 明 编 辑、编 译、连 接 的 作 用。在 编 译 后 得 到 的 目 标 文 件 为 什 么 不 能 直 接 运 行?【解】编 译 是 以 源 程 序 文 件 为 单 位 进 行 的,而 一 个 完 整 的 程 序 可
2、能 包 含 若 干 个 程 序 文 件,在 分 别 对 它 们 编 译 之 后,得 到 若 干 个 目 标 文 件(后 缀 一 般 为.o b j),然 后 要 将 它 们 连 接 为 一 个 整 体。此 外,还 需 要 与 编 译 系 统 提 供 的 标 准 库 相 连 接,才 能 生 成 一 个 可 执 行 文 件(后 缀 为.e x e)。不 能 直 接 运 行 后 缀 为.obj的 目 标 文 件,只 能 运 行 后 缀 为.exe的 可 执 行 文 件。5.分 析 下 面 程 序 运 行 的 结 果。#include using namespace std;int main()(co
3、utThis n i sc o u tMa vvC+c o u t program.,/e n d l;return 0;)【解】输 出 的 结 果 为 ThisisaC+program.4C+面 向 对 象 程 序 设 计 题 解 与 上 机 指 导.-一-一 6.分 析 下 面 程 序 运 行 的 结 果。#include using namespace std;int main()(int a,b,c;a=10;b=23;c=a+b;co u t a+b=;coutc;coutendl;return 0:)【解】前 两 个 cout语 句 在 输 出 数 据 后 不 换 行,第 3 个
4、cout语 句 输 出 一 个 换 行,因 此 输 出 的 结 果 为 a+b=337.分 析 下 面 程 序 运 行 的 结 果。请 先 阅 读 程 序 写 出 程 序 运 行 时 应 输 出 的 结 果,然 后 上 机 运 行 程 序,验 证 自 己 分 析 的 结 果 是 否 正 确。以 下 各 题 同。#include using namespace std;int main()(int a.b,c;int f(int x,int y,int z);c in a b c;c=f(a,b,c);coulcendl;return 0;)int f(int xjnt yjnl z)(int
5、m;if(xy)m=x;else m=y;if(zm)m=z;return(m);I【解】程 序 的 作 用 是:输 入 3 个 整 数,然 后 输 出 其 中 值 最 小 的 数。在 主 函 数 中 输 入 3 个 整 数,然 后 调 用 f 函 数,在 f 函 数 中 实 现 找 最 小 的 整 数,用 i f语 句 比 较 两 个 数,将小 者 存 放 在 变 量 m 中,经 过 两 个 i f语 句 的 比 较,m 中 存 放 的 是 3 个 整 数 中 最 小 的 数。运 行 情 况 如 下:1 5 3/(输 入 3 个 整 数)1(输 出 其 中 最 小 的 数)8.在 你 所 用
6、 的 C+系 统 上,输 入 以 下 程 序,进 行 编 译,观 察 编 译 情 况,如 果 有 错 误,请 修 改 程 序,再 进 行 编 译,直 到 没 有 错 误,然 后 进 行 连 接 和 运 行,分 析 运 行 结 果。int main();(int a,b;c=a+b;cout a+b=”a+b;)【解】上 机 编 译 出 错,编 译 出 错 信 息 告 知 在 第 2 行 出 错,经 检 查,发 现 第 1行 的 末 尾 多 了 一 个 分 号,编 译 系 统 无 法 理 解 第 2 行 的 花 括 号,导 致 报 告 第 2 行 出 错。将 第 1行 的 末 尾 的 分 号 去
7、 掉,重 新 编 译,编 译 出 错 信 息 告 知 在 第 5 行 和 第 6 行 出 错。第 5 行 出 错 原 因 是 c o u t未 经 声 明,因 为 cout不 是 C+语 言 提 供 的 系 统 的 关 键 字,而 是 输 出 流 的 对 象,必 须 使 用 头 文 件 iostream。第 6 行 出 错 原 因 是 m ain是 in t型 函 数,应 返 回 一 个 整 型 值。将 程 序 改 为#include int main()(int a,b;c=a+b;cout a+b=a+b;return 0;)重 新 编 译。编 译 出 错 信 息 告 知 在 第 5 行
8、和 第 6 行 出 错。第 5 行 出 错 原 因 是 变 量 c 未 定 义,第 6 行 出 错 原 因 是 cout未 经 声 明,说 明#include viostream命 令 行 未 能 起 作 用,原 因 是 未 指 明 命 名 空 间。将 程 序 改 为#include using namespace std;int main()(int a,b,c;c=a+b;c o u tr,a+b=r,a+b;return 0;6C+面 向 对 象 程 序 设 计 题 解 与 上 机 指 导 重 新 编 译。编 译 出 错 信 息 告 知 在 第 7 行 出 错,经 检 查,是“”用 得
9、不 当,“”是 提 取 运 算 符,应 与 cin联 合 使 用,用 来 从 输 入 流 中 提 取 数 据,输 出 时 应 该 用 插 入 运 算 符 把 两 处”都 妫“,再 重 新 编 译,发 现 没 有 error错 误,但 有 两 个 警 告(warning),原 因 是 定 义 了 a 和 b,但 未 对 它 们 赋 值。应 增 加 赋 值 语 句 或 输 入 语 句,使 a 和 b 获 得 值,将 程 序 改 为#include using namespace std;int main()(int a,b,c;c in a b;c=a+b;c o u tr,a+b=a+b;ret
10、urn 0;)重 新 编 译,没 有 编 译 错 误,能 通 过 编 译 和 连 接,可 以 正 常 运 行,在 Visual C+6.0环 境 下 运 行 时 屏 幕 显 示 如 下:5 9/a+b=14Press any key to continue显 然 这 样 的 输 出 不 理 想,uPress any key to continue”是 Visual C+系 统 在 输 出 了 运 行 结 果 后 自 动 显 示 的 一 个 信 息,告 诉 用 户“如 果 想 继 续 工 作,请 按 任 何 一 个 键”。当 用 户 按 任 何 一 个 键 后,显 示 运 行 结 果 的 窗 口
11、 消 失,屏 幕 显 示 回 到 Visual C+的 主 窗 口,显 示 出 源 程 序 和 编 译 信 息。为 了 解 决 以 上 输 出 不 理 想 的 情 况,可 以 在 最 后 一 个 输 出 语 句 中 增 加 输 出 一 个 换 行 符。最 后 的 程 序 如 下:#include using namespace std;int main()(int a,b,c;c in a b;c=a+b;c o u t,ra+b=,a+b en d l;return 0;运 行 时 屏 幕 显 示 如 下:5a+b=l4Press any key to continue这 就 完 成 了 程
12、 序 的 调 试。这 里 对 本 题 的 调 试 过 程 作 了 比 较 详 细 的 分 析,以 便 使 读 者 对 如 何 调 试 程 序 有 比 较 具 体 而 清 晰 的 了 解。需 要 说 明:(1)编 译 系 统 给 出 的 编 译 出 错 信 息,只 是 提 示 性 的,引 导 用 户 去 检 查 错 误,用 户 必 须 根 据 程 序 的 上 下 文 和 编 译 出 错 信 息,全 面 考 虑,找 出 真 正 出 错 之 处。例 如 编 译 出 错 信 息 通 知 第 2 行 出 错,其 实 可 能 是 第 1行 出 错。(2)有 时,有 的 错 误 开 始 时 未 被 检 查
13、出 来 并 告 知 用 户(例 如 未 定 义 变 量 c),由 于 其 他 错 误 未 解 决,掩 盖 了 这 个 错 误。当 解 决 了 其 他 错 误 后,这 个 错 误 会 被 检 查 出 来。有 时 在 调 试 过 程 中 会 不 断 检 查 出 新 的 错 误,这 是 不 奇 怪 的。一 一 处 理,问 题 会 迎 刃 而 解。(3)为 了 说 明 调 试 过 程,这 里 全 部 依 靠 计 算 机 系 统 来 检 查 错 误,其 实 有 些 明 显 的 错 误,完 全 可 以 由 人 工 查 出,这 样 可 以 提 高 调 试 效 率。由 人 工 在 纸 面 或 屏 幕 上 检
14、查 错 误,称 为 静 态 查 错,用 计 算 机 编 译 系 统 检 查 错 误,称 为 动 态 查 错。建 议 尽 量 先 用 静 态 查 错 的 方 法 排 除 错 误,只 有 人 工 检 查 不 出 来 的 错 误 才 让 计 算 机 检 查。9.输 入 以 下 程 序,进 行 编 译,观 察 编 译 情 况,如 果 有 错 误,请 修 改 程 序,再 进 行 编 译,直 到 没 有 错 误,然 后 进 行 连 接 和 运 行,分 析 运 行 结 果。#include using namespace std;int m ain()(int a,b;c=add(a,b)c o u t a
15、+b=,f c e n d l;return 0;)int add(int x,int y);(z=x+y;retrun(z);)【解】发 现 7 个 错 误:(1)对 add函 数 未 声 明 就 调 用,应 在 main函 数 中 对,add函 数 进 行 声 明。(2)定 义 add函 数 时,函 数 首 行 末 尾 不 应 有 分 号。(3)变 量 c未 经 定 义。(4)add函 数 中 的 变 量 z 未 经 定 义。(5)第 6 行 末 尾 少 了 一 个 分 号.(6)add函 数 中 的 retrun拼 写 错 误,应 为 return。编 译 系 统 把 retain作 为
16、 未 声 明 的 标 识 符 而 报 错,因 为 retrun(z)会 被 认 为 是 函 数 调 用 的 形 式。8C+面 向 对 象 程 序 设 计 题 解 与 上 机 指 导.?(7)变 量 a 和 b 未 被 赋 值。改 正 后 的 程 序 如 下:#include using namespace std;int m ain()int add(int x,int y);int a,b,c;cin a b;c=add(a,b);cout vv a+b=c e n d l;return 0;)int add(int x,int y)int z;z=x+y;retum(z);)运 行 情 况
17、 如 下:5 8/1310.输 入 以 下 程 序,编 译 并 运 行,分 析 运 行 结 果。#include using namespace std;int m ain()void sort(int x,int y,int z);int x,y,z;cin x y z;sort(x,y,z);return 0;void sort(int x,int y,int z)(int temp;if(xy)temp=x;x=y;y=temp;/内 3 个 语 句 的 作 用 是 将 x 和 y 的 值 互 换 if(zx)cout z r x r/y endl;else if(zy)cout x/z
18、 7 y endl;else cout x r/y z endl;请 分 析 此 程 序 的 作 用。sort函 数 中 的 i f 语 句 是 一 个 嵌 套 的 i f语 句。运 行 时 先 后 输 入 以 下 几 组 数 据,观 察 并 分 析 运 行 结 果。3 6 10/6 3 101 1()6 3/10,6,3/【解】程 序 的 作 用 是 对 输 入 的 3 个 整 数 按 由 小 到 大 的 顺 序 进 行 排 序。sort函 数 中 的 第 1个 i f 语 句 的 作 用 是 先 将 x 和 y 排 序,使 x 小 于 或 等 于 y。第 2 个 i f语 句 是 一 个
19、嵌 套 的 i f语 句,先 比 较 z和 x,如 果 z x,显 然 由 小 到 大 的 顺 序 应 当 是 z,x,y,按 此 顺 序 输 出;如 果 z 不 小 于 x,而 小 于 y,显 然 由 小 到 大 的 顺 序 应 当 是 x,z,y,按 此 顺 序 输 出;如 果 z既 不 小 于 x,又 不 小 于 y,显 然 由 小 到 大 的 顺 序 应 当 是 x,y,z,按 此 顺 序 输 出。按 题 目 要 求 分 别 输 入 以 下 几 组 数 据,运 行 结 果 如 下.:3 6 10/3,6,1()6 3 1003.6-10 10 6 3/3,6-10 10,6,3/-85
20、8993460,-858993460,10以 上 是 在 Visual C+6.0环 境 下 运 行 的 情 况,前 3 次 运 行 正 常,表 明 当 输 入 不 同 的 数 据 时,程 序 能 实 现 由 小 到 大 的 排 序 功 能。第 4 次 运 行 的 结 果 显 然 不 正 常,这 是 由 于 输 入 数 据 时 出 了 问 题,本 来 要 求 在 输 入 数 据 时,数 据 之 间 以 空 格 或 换 行 相 隔,而 现 在 却 以 逗 号 相 隔,只 有 第 一 个 整 数 能 正 常 赋 给 变 量 x,第 二 和 第 三 个 数 据 均 无 法 正 常 赋 给 变 量 y
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 谭浩强 C+ 课后 习题 答案
限制150内