《二阶段练习题参考答案解析web》由会员分享,可在线阅读,更多相关《二阶段练习题参考答案解析web(15页珍藏版)》请在金锄头文库上搜索。
1、二 阶 段 练 习 题 参 考 答 案 解 析 二 阶 段 这 一 阶 段 , 主 要 在 于 循 环 结 构 的 训 练 。 在 程 序 设 计 语 言 中 , 分 支 结 构 较 为 简 单 , 而 循 环 结 构 相 对 复 杂 , 因 为 循 环 内 部 可 以 嵌 套 二 层 循 环 , 会 使 得 程 序 执 行 的 次 数 大 大 增 加 , 逻 辑 性 也 大 大 加 深 , 然 而 这 也 会 数 组 中 常 用 的 一 个 结 构 , 因 此 相 对 而 言 较 为 重 要 。 有 1、 2、 3、 4个 数 字 , 能 组 成 多 少 个 互 不 相 同 且 无 重 复
2、数 字 的 三 位 数 ? 都 是 多 少 ? 由 指 定 数 字 组 成 的 不 同 的 三 位 数 , 如 1 2 3 , 1 2 4 , 1 3 4 , 2 1 4 等 等 , 这 些 数 由 上 述 数 字 组 成 。 解 析 : 需 要 构 造 三 位 数 , 则 我 们 可 以 分 三 个 循 环 嵌 套 , 分 别 代 表 个 十 百 位 遍 历 可 能 的 数 字 1 2 3 4 , 按 照 排 列 组 合 , 我 们 将 会 有 6 4 个 结 果 。 #include int m ain() int i, j, k; int count = 0; printf(“以 下 是
3、 所 有 的 数 字 : n“); for (i = 1;i #include int m ain() int num = -100; while (1) int value_1 = num + 100; int value_2 = num + 168; int tm p = sqrt(value_1); if (tm p * tm p = = value_1) / 由 于 sqrt返 回 一 个 double数 , 因 此 我 们 转 为 int再 次 验 证 , 确 保 精 度 tm p = sqrt(value_2); if (tm p * tm p = = value_2) break
4、; num + + ; printf(“这 个 数 是 : % dn“, num ); 运 行 截 图 : 输 出 9*9口 诀 。 这 是 一 个 经 典 的 二 层 循 环 嵌 套 的 训 练 题 , 充 分 理 解 9 *9 口 诀 表 的 输 出 , 可 以 较 好 的 理 清 楚 , 循 环 之 间 的 关 系 , 以 及 内 外 层 循 环 其 步 骤 等 关 键 信 息 。 解 析 : 口 诀 表 是 从 n 一 直 与 m 相 乘 , 并 始 终 保 持 1 int m ain() int row; for (row = 1; row = 0; whiteSpace-) pri
5、ntf(“ “); / 控 制 空 格 的 输 出 , 调 整 口 诀 表 的 形 状 int colum n = 1; for (; colum n #include int m ain() int num ber; printf(“101-200的 所 有 素 数 为 : n“); for (num ber = 101; num ber int m ain() int num ber; printf(“所 有 的 水 仙 花 数 为 : n“); for (num ber = 100; num ber #include int m ain() int num ber; int splitP
6、art = 2; printf(“请 输 入 要 分 解 的 数 ( 0): “); scanf(“% d“, if (num ber 1) / 判 断 因 子 是 否 为 质 数 int tm p; int isSim ple = 1; for (tm p = 2; tm p int m ain() int num ber1, num ber2; int storedN um 1, storedN um 2; printf(“请 输 入 两 个 数 字 , 以 空 格 分 割 : “); scanf(“% d% d“, if (0 = = num ber1 | 0 = = num ber2)
7、 printf(“数 字 中 不 能 含 有 0n“); return; / 存 储 , 便 于 计 算 公 倍 数 storedN um 2 = num ber2; storedN um 1 = num ber1; / 保 证 num ber1 = num ber2 if (num ber1 int m ain() int num ; printf(“= = 在 这 里 计 算 s = a + aa + aaa + aaaa+ . + aaaaaaa.n“); printf(“输 入 a的 值 (大 于 0): “); scanf(“% d“, if (num 1) / 控 制 每 个 累
8、加 数 的 输 出 printf(“+ % d“, iteratorN um ber); else printf(“% d“, iteratorN um ber); printf(“= % dn“, sum ); 运 行 截 图 : 一 个 数 如 果 恰 好 等 于 它 的 因 子 之 和 , 这 个 数 就 称 为 “ 完 数 ” 。 例 如 6=1 2 3.编 程 找 出 1000以 内 的 所 有 完 数 。 同 样 的 , 本 题 隐 含 的 一 个 问 题 在 于 , 如 何 找 出 某 个 数 的 所 有 因 子 , 找 出 因 子 后 如 何 比 对 因 子 的 和 与 原 数
9、 的 大 小 。 解 析 : 在 该 题 中 , 只 要 我 们 找 出 该 数 的 因 子 , 并 将 其 累 加 即 可 , 并 最 终 判 断 该 数 是 否 和 原 数 相 等 。 #include int m ain() int num ber; / 循 环 从 1-1000进 行 检 查 for (num ber = 1; num ber int m ain() double par = 1; / 分 母 double sub = par + 1; / 分 子 int tim es = 0; / 迭 代 次 数 double sum = 0;/ 累 加 while (tim es+
10、 + int m ain() long sum = 0; int num = 1; int tm pN um = 1; for (; num int m ain() int num ber; int count = 0; / 计 数 器 printf(“请 输 入 一 个 不 多 于 5位 的 数 : “); scanf(“% d“, if (num ber = 100000) printf(“你 的 数 字 超 出 了 范 围 ! n“); return; while (num ber) printf(“% -2d“, num ber % 10); / 取 出 个 位 num ber /=
11、10; / 去 除 个 位 count+ + ; / 统 计 位 数 printf(“n这 是 一 个 % d位 数 n“, count); 运 行 截 图 : 循 环 将 是 后 面 经 常 用 到 的 一 种 结 构 , 也 是 较 为 常 用 的 一 种 处 理 的 方 式 , 因 此 需 要 熟 练 的 掌 握 。 因 为 在 我 们 的 实 际 运 用 中 , 数 据 往 往 不 是 离 散 的 , 离 散 的 数 据 意 义 是 很 小 的 , 而 我 们 通 常 要 处 理 成 批 的 数 据 , 并 且 往 往 这 些 数 据 是 按 照 某 种 类 别 进 行 分 类 聚 集 , 我 们 都 需 要 借 助 循 环 的 处 理 方 式 , 来 对 各 种 集 群 分 部 的 数 据 , 进 行 依 次 的 处 理 , 这 也 将 是 数 据 结 构 和 算 法 分 析 中 经 常 面 对 的 一 种 处 理 方 式 , 因 此 循 环 结 构 , 必 须 牢 牢 的 掌 握 而 熟 练 的 应 用 , 这 是 后 面 的 一 大 基 础 环 节 。