C++面向对象程序设计_教程.pdf
C+面 向 对 象 程 序 设 计 自 学 指 导 书 浙 江 师 范 大 学 信 息 科 学 与 工 程 学 院 朱 建 新 编目 录 第 一 章 C+语 言 概 述.4【学 习 要 点】.4【例 题 分 析】.4【思 考 题】.5第 二 章 基 本 数 据 类 型 运 算 符 及 表 达 式.6【学 习 要 点】.6【例 题 分 析】.6【思 考 题】.8第 三 章 控 制 结 构.8【学 习 要 点】.8【例 题 分 析】.9【思 考 题】.17第 四 章 数 组.20【学 习 要 点】.20【例 题 分 析】.21【思 考 题】.24第 五 章 函 数 与 编 译 预 处 理.33【学 习 要 点】.33【例 题 分 析】.33【思 考 题】.40第 六 章 指 针.49【学 习 要 点】.49【例 题 分 析】.50【思 考 题】.58第 七 章 结 构 体 与 共 用 体.60【学 习 要 点】.60【例 题 分 析】.60【思 考 题】.67第 八 章 类 与 对 象.70【学 习 要 点】.70【例 题 分 析】.71【思 考 题】.77第 九 章 继 承 与 派 生 类.80【学 习 要 点】.80【例 题 分 析】.80【思 考 题】.84第 十 章 运 算 符 重 载 与 虚 函 数.89【学 习 要 点】.89【例 题 分 析】.89【思 考 题】.99第 十 一 章 文 件 与 流 类 库.100【学 习 要 点】.100【例 题 分 析】.100【思 考 题】.105第 一 章 C+语 言 概 述 本 章 主 要 介 绍 C+十 的 起 源、发 展 历 史 及 其 特 点;C+十 程 序 的 基 本 结 构;Visual C+6.0集 成 开 发 环 境 及 上 机 操 作 过 程。【学 习 要 点】1.了 解 C+语 言 的 特 点。2.理 解 C+十 语 言 源 程 序 的 结 构、书 写 格 式 和 main()函 数 的 作 用。3.熟 悉 Visual C+6.0集 成 开 发 环 境。熟 练 掌 握 利 用 Visual C+6.0集 成 开 发 环 境 开 发、调 试 C+十 控 制 台 程 序 的 步 骤 和 基 本 操 作。【例 题 分 析】一、选 择 题 例 1-1 以 下 叙 述 中 正 确 的 是 A.C+十 程 序 由 main()函 数 组 成 B.C+十 程 序 由 函 数 组 成 C.C+十 程 序 的 执 行 从 第 一 个 函 数 开 始 D.在 C+十 程 序 中,注 释 只 能 位 于 一 条 语 句 之 后 解:对 于 C+程 序 应 明 确:(1)程 序 由 函 数 组 成。一 个 可 运 行 的 C+十 源 程 序 可 由 一 个 且 仅 能 由 一 个 main()函 数 加 上 其 他 的 函 数 组 成,其 他 函 数 可 有 可 无。(2)不 管 main()函 数 出 现 在 什 么 位 置,程 序 总 是 从 main()函 数 开 始 执 行。(3)注 释 的 两 种 方 法:一 是 用/*和*/把 注 释 信 息 括 起 来;二 是 用,它 表 示/之 后 到 本 行 结 束 为 注 释 内 容。可 以 在 程 序 任 何 位 置 进 行 注 释。正 确 答 案:Bo二、填 空 题 例 1-2 在 下 列 程 序 的 每 行 之 后 加 上 注 释。#includc iostrcam.hvoid main()(coutHello!n;cout Welcome to C+!n;解:注 释 如 下:#include iostream.h 指 示 编 译 器 在 此 处 将 文 件 iostream.h上 中 的 代 码 嵌 入 木 程 序。void main()主 函 数,void表 示 main()函 数 没 有 返 回 值。coutV V H ello!n;输 出 字 符 串 Hello!”到 显 示 器 上。cout Welcome to C+!n;输 出 字 符 串 Welcome to C+!n”。例 1-3 C+十 中 函 数 的 函 数 体 由 符 号 _ 开 始,用 符 号 _ 结 束。解:C+十 中 函 数 的 函 数 体 由 符 号“”开 始,用 符 号“”结 束。三、编 程 题 例 1-4编 写 一 个 程 序,运 行 时 提 示 输 入 个 数 字,再 把 这 个 数 字 显 示 出 来。解:程 序 如 下:#include iostream.hvoid m ain()int i;cout请 输 入 一 个 数 字:;c in i;c o u t 你 输 入 的 数 字 是 viendl;【思 考 题】一、选 择 题 1.C+十 语 言 规 定:在 一 个 源 程 序 中,main()函 数 的 位 置 A.必 须 在 最 开 始 B.必 须 在 系 统 调 用 的 库 函 数 的 后 面 C.可 以 任 意 D.必 须 在 最 后 2.以 下 正 确 的 叙 述 是 A.C+十 程 序 的 每 行 中 只 能 写 一 个 语 句 B.C+语 言 本 身 无 输 入、输 出 语 句 C.在 对 一 个 C+十 源 程 序 进 行 编 译 的 过 程 中,可 发 现 注 释 中 的 拼 写 错 误 D.在 C+十 程 序 中,main()函 数 必 须 位 于 程 序 的 最 前 面 3.以 下 符 号 中 能 作 为 用 户 标 识 符 的 是 A._123 B.void C.struct D.switch4.C+十 语 言 程 序 的 基 本 单 位 是 A.程 序 行 B.语 句 C.函 数 D.字 符 二、填 空 题 5.一 个 可 执 行 的 C+十 程 序 至 少 必 须 有-个 函 数。6.C+十 源 程 序 中 注 释 的 作 用 是 7.一 个 C+语 句 以 结 束。_ 是 C+十 语 句 的 组 成 部 分。8.在 C+十 语 言 中 输 入、输 出 操 作 是 通 过 来 实 现 的。9.在 下 列 程 序 的 每 行 之 后 力,上 注 释。#include void main()int nl,n2,sum;cont n l n 2;suin=nl+n2;co u t n l+n l=s u m e n d l;三、编 程 题 10.参 照 例 题 分 析,编 写 一 个 C+十 程 序 并 上 机 运 行,能 输 出 以 下 信 息:Hello,C+!11.编 写 一 个 C+十 程 序,输 入 任 意 三 个 数 a,b,c,能 输 出 其 中 的 最 大 值。第 二 章 基 本 数 据 类 型 运 算 符 及 表 达 式 本 章 是 C+十 语 言 中 需 要 熟 记 的 内 容 最 多 的 一 章,对 于 数 据 类 型、运 算 符、表 达 式 等 内 容 既 要 熟 记,更 要 灵 活 运 用;特 别 要 注 意 与 自 然 语 言 明 显 不 同 的 逗 号 运 算、自 增 自 减 等 运 算 的 特 点。【学 习 要 点】1.掌 握 常 量 与 变 量、整 型 数 与 实 型 数 的 概 念。2.掌 握 字 符 型 数 据 与 字 符 串 型 数 据 的 概 念 以 及 二 者 的 区 别。3.掌 握 各 种 类 型 的 变 量 说 明 及 其 初 始 化。4.掌 握 算 术 运 算、逻 辑 运 算、关 系 运 算、赋 值 运 算、逗 号 运 算 等 概 念。5.掌 握 运 算 符 的 优 先 级、左 结 合 和 右 结 合 规 则 以 及 目 数 的 概 念。6.掌 握 表 达 式 求 值 时 类 型 的 自 动 转 换 和 强 制 类 型 转 换。7.掌 握 表 达 式 的 组 成、表 达 式 的 优 化。8.掌 握 位 运 算 和 位 运 算 符。【例 题 分 析】、选 择 题 例 21 下 列 不 合 法 的 变 量 名 为 一 A.student B.-student C._student D.student()解:根 据 变 量 命 名 要 求,曾 字 母 以 英 文 字 母 或 下 划 线 开 头。正 确 答 案:Bo例 22 下 列 不 合 法 的 变 量 名 为 A.t%udent B.astudent C.s_tudent D.studen()解:根 据 变 量 命 名 要 求,变 量 七 组 成 只 能 由 大 小 写 字 母、数 字、下 划 线 组 成。正 确 答 案:Ao例 23 下 列 不 合 法 的 变 量 名 为 A.lint B.inti c.int D._lint解:根 据 变 量 命 名 要 求,系 统 关 键 字 示 能 作 为 变 量 名。正 确 答 案:C例 24 当 a=6,b=5 时,逻 辑 表 达 式 a 8的 值 为 _A.true B.false C.非 0 整 型 数 D.0解:根 据 题 意 和 该 逻 辑 表 达 式 的 运 算 结 果。正 确 答 案:Co例 2-5 设 X,y,Z 为 整 型 数,下 列 各 式 中,运 算 结 果 与 X=y=2 4 的 表 达 式 相 同 的 是 A.x=(y=z=8,4X6)B.x=y=(z=8,4X6)C.X=y=z=8.4X6 D.x=(y=z=8),4X6解:C+语 言 的 赋 值 运 算 有 别 于 其 他 高 级 语 言,逗 号 运 算 又 是 其 他 高 级 语 言 所 没 有 的。1.在 赋 值 表 达 式 中,可 以 有 多 个 赋 值 运 算 符;计 算 顺 序 自 右 向 左,运 算 优 先 级 低,仅 高 于 远 号 运 算 符。2.逗 号 既 是 分 隔 符,又 是 运 算 符,可 以 用 一 个 逗 号 运 算 符 或 多 个 逗 号 运 算 得 将 多 个 表 达 式 连 接 成 逗 号 表 达 式,计 算 顺 序 自 左 向 右,并 将 最 后 一 个 表 达 式 的 值 作 为 整 个 逗 号 表 达 式 的 值,运 算 优 先 级 最 低;例:a=(2X2,4+6,20/4,6);结 果 a=6正 确 答 案:Bo例 26 设 i=6,k=0下 列 各 式 中,运 算 结 果 为 k=7 的 表 达 式 是 A.k=i+k B.k=k+i+C.k=+i+k D.k=k+(十 十 i)解:自 增 十 十、自 减 一 一 运 算 符 是 C+十 语 言 特 有 的。1.运 算 符 在 变 量 的 前 面 或 后 面,其 运 算 结 果 是 不 同 的。若 十 十 或 一 一 在 变 量 前;则 先 将 变 量 的 值 加 1(或 减 1 后,再 将 变 量 的 值 参 加 运 算;反 之 则 先 将 变 量 的 值 参 加 运 算;再 将 变 量 的 值 加 1(或 减 1)O2.自 增、自 减 运 算 符 优 先 级 高 于 算 术 运 算 符,A 式 i+k,先 计 算 i+,再 力。k,D 式 k=k+(+i),若 去 掉 括 号,则 改 变 了 运 算 顺 序;变 为 k+十 后,再 十 1。正 确 答 案;C 和 D。二、填 空 题 例 27 表 达 式 A+B+2 0 的 值 为 _解:不 同 类 型 的 数 据 混 合 运 算 时,系 统 可 以 自 动 进 行 类 型 转 换,将 表 示 范 围 小 的 数 据 类 型 转 换 成 另 一 操 作 数 的 相 同 类 型 后 再 参 与 运 算,则 转 换 为 65+66+20=15k例 28 如 果 定 义 inte=8;double f=6.4,g=8.例 则 表 达 式 f+int(e/3*int(f+g)/2)%4 的 值 为 解:不 同 类 型 的 数 据 混 合 运 算 时,可 以 使 用 强 制 类 型 转 换 符,强 制 将 一 种 数 据 类 型 转 换 成 另 一 种 数 据 类 型 后 再 参 与 运 算,对 于 表 达 式,先 求 表 达 式 的 值,然 后 再 转 换 值 的 类 型,本 例 的 运 算 结 果 为 9.4。若 将 式 中 e/3 改 为 e/3.0则 运 算 结 果 为 6.4,因 为 e/3 的 值 是 整 型 数,而 e/3.0的 值 是 实 型 数,改 变 了 括 号 内 的 运 算 结 果,致 使 整 个 表 达 式 的 值 发 生 变 化。例 29 若 inti=65535,j=0 xOOOx,k:k=i&j;,贝 Ijk 值 为 i 值 为 解:将 10进 制 数 65535和 16进 制 数 OOOaH在 计 算 机 内 的 二 进 制 原 型 数 值 按 位 与 运 算,结 果 为 k=10,i为 65535。三、编 程 题 例 210 编 写 一 个 将 华 氏 温 度 转 换 为 摄 氏 温 度 的 程 序。转 换 公 式 为 C=(5.0/9)(F3 2),要 求 输 出 华 氏 温 度 和 摄 氏 温 度 的 对 应 值。解:程 序 如 下:#includevoid main()double C,F;cout”输 入 华 氏 温 度 值:“;cin F;C=(5.0/9)*(F-32);coutw哗 氏 温 度 为:“V V F V W 对 应 的 摄 氏 温 度 值 是:“C endlendl;【思 考 题】一、选 择 题 1.以 下 可 作 为 正 确 变 量 名 的 是 A.class B.class 1 C.1 class D.class2 以 下 可 作 为 正 确 变 量 名 的 是。A.case B.-cd C.33 D.33s3.若 a=1 5,b 3 时,逻 辑 表 达 式 a 8 的 值 为 A.ture B.false C.非 0 整 型 数 D.04.若 a 和 b 为 整 型 变 量,语 句 b=(a=l+2 a X 3),a+5 运 行 后,a和 b 的 结 果 为 A.9,8 B.3,8 C.3,9 D.9,145.以 下 不 正 确 的 叙 述 是 A.在 C+十 程 序 中,P I和 p i是 不 同 的 变 量 B.在 C+十 程 序 中,逗 号 运 算 符 的 优 先 级 最 低 C.当 从 键 盘 输 入 数 据 时,对 于 整 型 变 量 只 能 输 入 整 型 数 值,对 于 实 型 变 量 只 能 输 入 实 型 数 值 D.若 s、t 为 in t数,设 t=S 2后,s 的 值 不 变 6.若 in ta;charb;float c;double d;则 表 达 式 a*bc+d 值 的 数 据 类 型 为。A.int B.float C.double D.char7.已 知 字 母 A 的 A SC II码 为 十 进 制 数 65,D 为 字 符 型 变 量,则 D=A+9-4的 值。8.若 a 为 16进 制 数,若 想 通 过 a&b运 算 使 a 的 二 进 制 数 的 高 4 位 清 零,低 4 位 不 变;则 b 的 16进 制 数 是 9.编 制 程 序,输 入 相 应 字 母 的 ASCH码 值,输 出 该 字 母。10.用 C+十 描 述 下 面 命 题:(1)a 小 于 b 或 大 于 c(2)a 和 b 中 至 少 有 大 于 C o(3)a 和 b 中 只 有 一 个 大 于 c。(4)a 和 b 中 两 个 都 大 于 C o第 三 章 控 制 结 构【学 习 要 点】1.掌 握 顺 序 结 构 的 编 程 方 法,这 是 程 序 设 计 的 基 础。2.学 会 cin、cout实 现 输 入/输 出 数 据。3.学 会 应 用 字 符 输 入/输 出 函 数。4.掌 握 printf函 数 和 scanf函 数。5.掌 握 条 件 语 句 的 形 式 和 使 用.6.掌 握 条 件 语 句 的 嵌 套。7.掌 握 条 件 运 算 符 的 使 用。8.掌 握 switch语 句 的 形 式 和 使 用。9.掌 握 for,while,do一 while三 种 循 环 语 句。10.掌 握 循 环 的 嵌 套。11.掌 握 break,continue,goto 语 句.【例 题 分 析】一、多 项 选 择 题 例 3-1 如 有 以 下 定 义 和 输 入 语 句,若 要 求 ak a2、cl c 2 的 值 分 别 为 20、60、A、B,则 下 列 数 据 输 入 方 式 中 正 确 的 是 int al,a2;char cl,c2;c in a l c I a 2 c 2;A.20A 1 1 60B B.20,A,60,B C.20 1 1 A*1 60 BD.20A60B E.20A6 0 B注:此 处 一 为 空 格 符,为 回 车 键 符,下 文 同。解:C+十 语 言 没 有 专 门 的 输 入/输 出 语 句,其 输 入/输 出 可 通 过 输 入/输 出 流 来 实 现。c i n 不 能 将 输 入 的 空 格 赋 给 字 符 型 变 量,空 格 和 回 车 键 均 作 为 输 入 字 符 之 间 的 分 隔 符;字 符 型 变 量 只 能 容 纳 一 个 字 符,整 型 数 只 能 由 数 字 组 成;逗 号 不 能 作 为 分 隔 符。正 确 答 案:A、C、D、Eo例 3-2 设 有 语 句 float PI=3.14;,若 用 科 学 表 示 法 输 出 为 3.140000e+000则 下 列 正 确 的 表 达 式 为 _A.c o u t P I e n d l;B.cout.setf(ios:scientific,ios:floatfield);c o u t P I nnn;C.printfC%12.10fn”,PI);D.printfC%enn,PI);解:C+十 语 言 除 用 输 出 流 输 出 数 据 外,还 可 用 C 语 言 的 输 入/输 出 函 数,但 需 包 含 s td io.h,其 输 出 格 式 与 C+十 输 出 流 格 式 不 同:C+十 中 可 用 预 定 义 的 格 式 控 制 函 数 定 义 输 出 格 式,也 可 以 用 i o s类 的 成 员 函 数 进 行 格 式 控 制。若 学 用 科 学 表 示 法 输 出 数 据,必 须 用 io s类 成 员 函 数 s e tf设 置 状 态 标 志。p rin tf函 数 必 须 用 e 格 式 符 才 可 以 输 出 科 学 表 示 法 形 式 的 数 据。正 确 答 案:Do二、填 空 题 例 3 3 以 下 程 序 的 输 出 结 果 为#include void main()short i;i=-6;c o u t n oct=o c t i d e cH dec i M,hex=n hex i e n d l:解:i 为 sh o rt类 型,占 用 2 字 节 内 存,而 oct、dec、h e x是 C+十 中 预 定 义 的 格 式 控 制 函 数 控 制 输 入/输 出 数 据 的 格 式。答 案 为 o ct=177772,dec=-6,hex=ffTao例 3 4 以 下 程 序 的 输 出 结 果 为#includevoid main()(int i=66;char c=A;c o u tni=M(c h a r)iH,c=M d e c i n nn;解:本 程 序 采 用 了 强 制 型 转 换 符,将 i 转 换 为 字 符 型 数 据 输 出,又 用 格 式 控 制 函 数 将 字 符 型 数 据 转 换 成 数 值 型 数 据 输 出。答 案 为 i=B,C=66a例 3 5 以 下 程 序 的 输 出 结 果 为#include void main()int i=0,x=0,y=0;do i+;if(i%3!=0)x+=i;i-H-;y+=i+;while(i5),c o u tHx=n x n y=H y e n d l;)解:x=5 y=7例 3-6 以 下 程 序 的 输 出 结 果 为#include void main()(int x,y=10;while(x=y-l)y-=2;if(y%3=0)X-H-;continue;else if(y4)break;x-H-;)c o u tnx=H x H y=*yendl;)解:输 出 结 果 是:x=3 y=2例 3-7 以 下 程 序 的 输 出 结 果 为#includevoid main()int i,j,m;fbr(i=l;i4;i+)fbr(j=l;j7;j4-+-)if(j=4)break;m=i*j;c o u t i M*jn=m n;coutendl;解:运 行 结 果 如 下:1X1=1 1X2=21X3=32 X 1=2 2 X 2=4 2 X 3=63 X 1=3 3 X 2=6 3 X 3=9注 意:当 j 的 值 为 4 时,结 束 的 是 内 层 循 环,外 层 fo r循 环 继 续 执 行。例 3 8 以 下 程 序 的 输 出 结 果 为#includevoid main()intfor(i=ford=l;j7;j+)ififj=4)continue;m=i*j;c o u t i*jM=M m H M;coutendl;)解:运 行 结 果 如 下:1X1=1 1X2=2 1 X3=3 1X5=5 1 X6=62X1=2 2X2=4 2X 3=6 2X 5=10 2X6=123X1=3 3X 2=6 3X3=9 3X5=1 5 3X6=18注 意:continue结 束 本 次 循 环,即 当 j 的 值 为 4 时,内 层 循 环 体 的 条 件 语 句 后 面 的 部 分 不 执 行,循 环 变 量 j 自 加,执 行 下 次 内 层 循 环。例 39 输 入 一 个 自 然 数,输 出 其 各 因 子 的 连 乘 形 式。如 输 入 1 2,输 出 12=12X 2X3 的 形 式,请 填 空。#include void main()int i=2,n;coutw”输 入 一 个 自 然 数:;cin n;c o u t n=ln;do i/n%i=0)coutw*vvi;1:else i+;w h i l e(2);解:尸!/i;n!=l三、编 程 题 例 31 0编 程 实 现 如 下 所 示 的 函 数 关 系 式。已 知 X,求 y 的 值。-X(x 1)y=y x+5(1 WxWlO)展-5(x 2 10)解:该 函 数 实 质 是 一 个 分 段 函 数,即 根 据 x 的 不 同 取 值 范 围,山 相 应 的 函 数 式 求 y的 值。(1)使 用 缺 省 else的 i f语 句 形 式#inc 1 udevoid main()float x,y;c o u tnEnter a number:;c in x;if(x=1&x=10)y=x-5;c o u tny=y e n d l;(2)用 条 件 语 句 的 嵌 套 形 式 实 现#inc 1 udevoid main()float x,y;c o u tnEnter a number:M;cin x;if(xl)y=x;else if(x 10)y=x+5;else y=x-5;c o u t”y=y e n d l;例 31 1根 据 输 入 的 年 月,求 出 该 年 该 月 的 天 数。解:本 题 要 根 据 月 份 来 讨 论 天 数,如 是 大 月(1,3,5,7,8,10,1 2)则 天 数 是 3 1,如 是 小 月(4,6,9,1 1)则 天 数 是 30;如 是 2 月;要 看 该 年 是 否 闰 年,是 闰 年 则 为 2 9 天,非 闰 年 则 为 2 8 天,显 然 本 程 序 采 用 多 分 支 选 择 结 构。具 体 程 序 如 下:#include#inc 1 udevoid main()int year,month,days;coutEnter the year:;cinyear;c o u tnEnter the month:;cinm onth;switch(inonth)case 1:case 3:case 5:case 7:case 8:case 10:case 12:days=3 1;break;case 4:case 6:case 9:case 1 1:days=30;break;case 2:if(year%4=0&year%100!=0)|year%400=0)days=29;else days=28;break;dcfault:coutnInput error!n e n d l;exit(0);c o u tnyear:y e a r e n d l month:n m o n th e n d lndays:M d a y s e n d l;例 3-1 2 求 下 列 分 数 序 列 的 前 15项 之 和。2/1,3/2,5/3,8/5,13/8,21/1 3,.解:根 据 题 意 可 采 用 累 加 方 法,为 此 需 定 义 一 个 存 放 累 加 结 果 的 变 量 s u m,累 加 的 过 程 自 然 是 通 过 循 环 结 构 来 实 现,循 环 变 量 i 的 取 值 范 围 是 1 到 1 5,且 循 环 变 量 表 示 当 前 的 数 列 项 数;在 循 环 体 内 不 仅 要 计 算 数 列 第 i 项 的 值,还 要 计 算 前 i 项 的 累 加 和。数 列 的 规 律:从 第 2 项 开 始;每 一 项 的 分 母 是 前 一 项 的 分 子,而 分 于 是 前 一 项 的 分 子 分 母 之 和,即 第 i1 项 为 a/b,则 当 i l时,第 i 项 为(a+b)/a。程 序 如 下:(1)用 while语 句 实 现。#includevoid main()float sum,t,a,b;int i;a=2;b=l;i=2)t=a/b;sum=t;while(i=5)a=a+b;求 第 i 项 的 分 子 b=a-b;求 第 i 项 的 分 母 t=a/h;求 第 i 项 的 值 sum+=t;求 第 i 项 的 和 i+;c o u tn sum=M s u m e n d l;)(2)用 fo r语 句 实 现.#includevoid main()float sum,t,a,b;int i,a=b=1.0,sum=0.0;fbr(i=l;i=15;i+)a=a+b;求 第 i 项 的 分 子 b=a-b,;求 第 i 项 的 分 母 t=a/b;/求 第 i 项 的 值 sum+=t;求 第 i 项 的 和 c o u t sum=sum endl;)(3)用 do-while语 句 实 现#includevoid main()float sum,t,a,b;int i=l,a=b=1.0;sum=0;do a=a+b;/求 第 i 项 的 分 子 b=a-b;求 第 i 项 的 分 母 t=a/b;求 第 i 项 的 值 sum+=t;/求 第 i 项 的 和 while(+i=15);c o u t sum=s u m e n d l;例 3 1 3 正 整 数 n 从 键 盘 输 人,计 算 5n的 值。解:计 算 5n可 用 循 环 语 句 实 现,本 例 仅 以 while语 句 实 现。#include void main()(int i=l,n;float resuIt=1.0;coutw”输 入 n:n;cin n;if(n)while(i=n)result*=5.0;i+;c o u t 结 果 是:re s u lt n;)例 3-14 1-1/2+1/3-1/4H-Fl/99-1/100 的 值。解:本 题 仅 以 fbr语 句 实 现。#include void main()float sum=0.0,s=l.0;fbr(int i=l;i=100;i+)sum+=s/i;s=-s,)coutvv”结 果 是:sumn;)例 3-1 5 输 入 一 行 字 符,将 其 中 的 两 种 字 符 和+显 示 出 来,而 对 其 他 字 符 不 显 示,同 时 统 计 出 其 他 字 符 的 个 数。解:#include#include void main()char ch;int i=0;while(ch=getchar()!)if(ch!=C&ch!=+)i+;continue;coutch;)coutvv”其 他 字 符 的 个 数 为:“v v i v w;例 3-1 6 从 键 盘 输 入 某 班 若 干 名 学 生 一 门 课 程 的 成 绩,编 程 找 出 最 高 分 和 最 低 分,并 统 计 全 班 平 均 成 绩。解:要 求 程 序 具 有 灵 活 性,程 序 中 参 加 统 计 的 学 生 人 数 应 随 具 体 情 况 而 定,不 应 固 定,若 以 输 入 负 数 作 为 统 计 结 束 条 件,则 程 序 如 下:#include void main()(float score;max;min;sum=0.0;int num=0;coutw”输 入 一 个 成 绩 及 cinscore;max=min=score;while(score=0)iftscoremax)max=score;if(scoremin)min=score;sum+=score;num+;coutw”输 入 一 个 成 绩!cinscore;ififnum)coutvv共 统 计 vvnumvv人 vvendl;coutvv”最 高 分 是“vvmaxvvendl;coutw 最 低 分 是 wminvVendl;coutvv平 均 成 绩 是 Vsum/numendl;else cout无 输 入!endl;例 31 7从 键 盘 不 断 读 入 字 母,如 字 母 为 元 音 字 母,则 输 出 其 相 应 的 大 写 字 母,否 则 结 束 程 序 解:#include void main()|char ch;int quit=O;do c o u tH n 输 入 一 个 字 母:;cinch;switch(ch)case R:coutvvA;break;case e:coutvvE;break;case T:coutT;break;case o:coutvvO;break;case u:coutw U;break;default:quit=l;break;)while(iquit);例 3 1 8模 拟 计 算 器 进 行 加、减、乘、除 数 学 运 算。要 求 当 输 入 两 个 操 作 数 和 运 算 符 后,输 出 运 算 结 果。一 次 运 算 结 束 后 询 问 用 户 是 否 继 续,用 户 根 据 需 要 可 继 续 进 行 运 算。解:#include void main()(char op;char quit=y;float dl;d2;while(quit=y|quit=Y)coutw”输 入:第 一 个 操 作 数;运 算 符 和 第 二 个 操 作 数 v vendl;c in d 1 o p d 2;switch(op)c a s e c o u t d l,+d 2=,(d l+d 2)en d l;break;case c o u t d l-1 d 2=(d l-d 2)e n d l;break;case c o u t d l*d 2=(dl*d2)endl;break;case 71:if(d2=0.0)coutw”输 入 错 误!vvendl;quit=0;elsec o u t d 1/d 2,=,(d l/d2)rend 1;break;defhuit:cout v”运 算 符 错 误 w endl;break;coutvv”是 否 继 续(y)?”;cinquit;【思 考 题】一.选 择 题 1.以 下 程 序 的 输 出 结 果 是#includevoid main()int w=4,x=3,y=2,z=1,result;result=wx?w:zy?z:x;coutresultendl;)A.1 B.2.C 3.D.42.若 所 以 变 量 均 已 正 确 说 明,下 列 程 序 运 行 后 X 的 值 是 a=b=c=0;x=35;i氏!a)x-;else if(b)x=2;if(c)x=3;else x=4;co u t x e n d l;A.34 B.4 C.35 D.33.若 已 有 说 明 语 句 int x,y;则 不 能 实 现 以 下 函 数 关 系 的 程 序 段 是-1(xl)4.设 有 说 明 语 句 inta=l,b=0;则 执 行 以 下 语 句 后 输 出 为 switch(a)A.if(xO)y=l;else y=0;C.y=0;D.if(x=0)if(x=0)if(x0)y=l;if(x0)y=l;else y=0;else y=-l;else y=l;case 1:switch(b)case 0:c o u tH*O*n;break;case 1:c o u t:*1*;break;case 2:c o u t n*2*n;break;A*o*B*o*2*c*o*2*D 有 语 法 错 误 5.设 有 以 下 程 序 段,则 int x=O;s=O;while(!x!=0)s+=+x;co u t s;A.运 行 程 序 段 后 输 出 0 子 B.运 行 程 序 段 后 输 出 1C.程 序 段 中 的 控 制 表 达 式 是 非 法 D.程 序 段 执 行 无 限 次 6.以 下 程 序 段 中,能 正 确 计 算 10!的 是 A.do i=l;s=l;B.do(i=l;s=0;s=s*i;i+;while(i=10);C.i=l;s=l;do s=s*i;i+;while(i=10);s=s*i;i+;while(i=10);D.i=l;s=0;do s=s*i;i+;while(i=10);7.下 面 程 序 的 功 能 是 计 算 正 整 数 2345的 各 位 数 字 的 平 方 和。请 选 择 填 空。#includevoid main()int n,sum=0;n=2345;do sum=sum+_1 _;n=2;while(n);c o u t sum=s u m e n d l;A.n%10 B.(n%10)*(n%10)C.n/1 0 D.(n/10)*(n/1 0)A.n/1000 B.n/100 C.n/1 0 D.n%108.等 比 数 例 的 第 1项 a=l,公 比 q=2 F 面 程 序 的 功 能 是 求 满 足 前 n 项 和 小 于 1 0 0时 的 最 大 n,请 选 择 填 空。#includeniostream.hMvoid main()int a,q,n,sum;a=l;q=2;n=sum=0;do_1 _+n;a=a*q;while(sum100);2;coutn;AA sum+B.sum+=a C.sum*=a D.a+=sumn=n-2 B.n=n C.n+D.n-=l二、填 空 题 9.下 面 程 序 的 功 能 是 计 算 100至 1000之 间 有 多 少 个 数,其 各 位 数 字 之 和 是 5。#includevoid main()int i,s,k,count=0,fbr(i=IOO;i=lOOO;i+)s=0,k=i,while()s=s+;_9ififs!=5);elsecount-H-;coutcount;1 0.计