教 材 名 称 : C 语 言 程 序 设 计 ( 第 1 版 ) 黄 保 和 江 弋 编 著 清 华 大 学 出 版 社 ISBN: 978-7-302-13599-9, 红 色 封 面 答 案 制 作 时 间 :2011 年 2 月 -5 月 一 思 考 题 1 常 量 和 变 量 有 什 么 区 别? 它 们 分 别 是 如 何 定 义 的? 常 量 是 指 在 C 程 序 运 行 过 程 中 其 值 不 变 的 量, 变 量 是 一 个 值 的 存 放 处, 其 值 在 程 序 运 行 过 程 中 可 以 被 改 变 常 量 有 两 种 形 式 : 字 面 常 量 与 符 号 常 量,C 语 言 可 以 使 用 以 下 两 种 形 式 定 义 符 号 常 量 (1) 用 关 键 字 const 定 义 定 义 格 式 为 :const 类 型 名 常 量 名 = 值 ; (2) 用 编 译 预 处 理 命 令 #define 定 义 格 式 为 :#define < 常 量 名 > < 值 常 量 > 变 量 的 定 义 格 式 为 : 数 据 类 型 变 量 名 1, 变 量 名 2,, 变 量 名 n; 或 数 据 类 型 变 量 名 1= 初 值 1, 变 量 名 2= 初 值 2,, 变 量 名 n= 初 值 n; 2 变 量 的 要 素 有 哪 些? 请 用 一 个 例 子 说 明? 名 字 类 型 值 和 地 址 int a = 1;int 是 类 型,a 是 名 字,1 是 值, 地 址 是 编 译 器 给 a 变 量 分 配 的 内 存 空 间 3 变 量 在 整 个 程 序 中 能 有 相 同 的 值 吗? 为 什 么? 请 举 例 说 明 可 以, 因 为 变 量 的 值 可 以 被 改 变, 但 不 是 一 定 被 改 变 如 果 程 序 中 没 有 其 它 不 同 的 赋 值, 变 量 将 保 持 不 变 4 为 什 么 程 序 需 要 有 短 整 型 (short) 和 长 整 型 (long)? 整 型 的 值 集 理 论 上 是 所 有 整 数, 但 由 于 受 到 计 算 机 存 储 单 元 的 限 制,C 语 言 的 整 型 只 能 表 示 所 有 整 数 的 一 个 有 限 子 集, 因 此, 整 数 有 它 的 表 示 范 围 限 制, 且 不 同 的 C 语 言 系 统 可 表 示 整 数 的 范 围 可 能 不 同 不 同 范 围 的 整 型 数 据 所 占 有 的 内 存 空 间 大 小 不 同 程 序 开 发 人 员 通 过 选 择 能 够 满 足 范 围 要 求 的 类 型 (short 或 long), 可 以 减 少 数 据 存 储 空 间 比 如, 当 短 整 型 可 以 满 足 数 据 范 围 要 求 时, 就 没 有 必 要 选 择 需 要 更 多 存 储 空 间 的 长 整 型 5 字 符 8 和 数 字 8 有 何 不 同? 字 符 8 是 字 符 型, 数 字 8 是 整 型 6 C 语 言 有 字 符 串 变 量 吗? 没 有 7 C 语 言 中 的 运 算 符 / 和 % 有 何 区 别?C 语 言 中 除 法 运 算 符 / 与 数 学 中 的 运 算 符 的 用 法 和 功 能 完 全 一 样 吗? / 是 除 法, % 是 取 余 数, / 与 的 用 法 和 功 能 不 完 全 一 样, 得 到 的 是 两 数 相 除 后 得 到 的 真 实 值, / 得 到 的 是 两 数 相 除 后 取 整 的 值 8 在 C 语 言 中, 运 算 符 = 的 功 能 是 什 么? 能 用 它 来 判 别 两 个 量 是 否 相 等 吗? = 是 赋 值 运 算 符, 它 将 右 侧 表 达 式 的 值 赋 予 左 侧 变 量 不 能 判 别 两 个 量 是 否 相 等 9 双 目 运 算 符 两 边 的 操 作 数 可 以 是 不 同 的 类 型 吗? 如 果 可 以, 它 们 如 何 影 响 运 算 的 结 果? 可 以,C 编 译 器 会 先 对 其 中 一 些 操 作 数 进 行 隐 式 类 型 转 换, 使 操 作 数 类 型 一 致 后 进 行 计 算 转 换 方 向 为 :char,short->int->unsigned->long->double,float->double 10 描 述 你 所 学 过 的 运 算 符 的 优 先 级 () [] ->. 从 左 到 右! ~ ++ -- + - * (type) sizeof 从 右 到 左 第 1 页 / 共 6 页
* / % 从 左 到 右 + - 从 左 到 右 << >> 从 左 到 右 < <= > >= 从 左 到 右 ==!= 从 左 到 右 & 从 左 到 右 ^ 从 左 到 右 从 左 到 右 && 从 左 到 右 从 左 到 右?: 从 右 到 左 = += -= *= /= %= &= ^= = <<= >>= 从 右 到 左, 从 左 到 右 11 什 么 是 表 达 式? 它 与 数 学 中 的 代 数 式 有 何 不 同? C 语 言 的 表 达 式 是 运 算 符 和 操 作 数 组 成 的 运 算 式 代 数 式 是 由 运 算 符 号 ( 加 减 乘 除 乘 方 开 方 ) 把 数 或 表 示 数 的 字 母 连 结 而 成 的 式 子 单 独 一 个 数 或 者 一 个 字 母 也 是 代 数 式 带 有 <( ) >( ) = 等 符 号 的 不 是 代 数 式 而 C 语 言 中 根 据 运 算 符 的 不 同, 可 将 表 达 式 分 为 算 术 表 达 式 赋 值 表 达 式 关 系 表 达 式 逻 辑 表 达 式 条 件 表 达 式 和 逗 号 表 达 式, 可 以 包 含 的 运 算 符 更 多 12 你 在 何 处 可 以 使 用 表 达 式? 为 什 么 在 表 达 式 中 有 时 要 使 用 括 号? 当 希 望 程 序 执 行 计 算 时, 应 写 出 一 个 表 达 式 以 制 定 必 要 的 操 作 括 号 可 以 用 来 强 制 改 变 表 达 式 的 运 算 顺 序 13 ++i 与 i++ 有 何 区 别? ++i 是 先 让 i 自 加 1 后 再 参 加 其 他 运 算, 而 i++ 是 先 让 i 参 加 其 他 运 算 后 再 自 加 1 14 在 函 数 printf 的 控 制 字 符 串 参 数 末 尾 经 常 有 一 个 转 义 字 符 \n, 它 的 作 用 是 什 么? 而 为 何 当 用 printf 显 示 提 示 用 户 输 入 的 信 息 是 很 少 使 用 该 字 符? \n 作 用 是 换 行 用 户 输 入 时 需 要 回 车, 因 此 会 自 动 换 行, 不 需 要 输 出 \n 15 若 变 量 i 已 定 义 为 int 型 变 量, 当 执 行 赋 值 语 句 i=8.9; 后,i 的 值 是 什 么? 若 接 着 执 行 赋 值 语 句 i=16.46; 后,i 的 值 又 是 什 么? 8 16 二 选 择 题 1 合 法 的 C 语 言 标 识 符 是 B.sum 2 设 int a=12, 则 执 行 完 语 句 a+=a-=a*a 后,a 的 值 是 D.-264 3 C 语 言 程 序 的 基 本 单 位 是 C. 函 数 4 选 出 合 法 的 C 语 言 赋 值 语 句 D.k=float(a-b); 5 选 出 以 下 语 句 的 输 出 结 果 printf("%d",strlen("\t\"\065\xff\n");a.6 6 以 下 各 组 标 识 符 中, 合 法 的 用 户 标 识 符 为 B.a20 print 7 选 出 可 用 作 C 语 言 用 户 标 识 符 的 一 组 标 识 符 B._123 IF a3_b3 8 下 列 语 句 中 符 合 C 语 言 语 法 的 赋 值 表 达 式 是 D.a=(7,c=-8) 9 在 C 语 言 中, 要 求 运 算 数 必 须 是 整 形 的 运 算 符 是 A.% 10 已 知 字 母 A 的 ASCII 码 为 十 进 制 65, 下 面 程 序 的 输 出 是 A.67,D Main() char ch1,ch2; Ch1='A'+'5'-'3'; 第 2 页 / 共 6 页
Ch2='A'+'6'-'3'; Printf("%d,%c",ch1,ch2); 11 下 面 程 序 的 输 出 是 C.3 int x=10,y=3; printf("%d",y=x/y); 12 已 知 语 句 int x=1,y=3, 经 下 列 计 算 后,x 的 值 等 于 6 的 正 确 选 项 是 A.x=(x=1+2,2*x) C.x=9-(--y)-(--y) 13 已 知 语 句 int i=3,j=4, 运 算 j=i+++j+i 后, 则 j 的 正 确 值 为 A.10 14 有 关 运 算 符 的 正 确 描 述 是 A. 运 算 符 的 优 先 级 最 高 的 是 圆 括 号 运 算 符 15 已 知 语 句 float x=3.0,y=4.0, 下 列 表 达 式 中 y 的 值 为 9.0 的 是 B.y+=x+2.0 16 若 有 下 列 类 型 说 明 语 句 :char w; int x; floaty; double z; 则 表 达 式 w*x+z-y 值 的 正 确 数 据 类 型 为 D.double 17 在 C 语 言 中, 要 求 运 算 对 象 必 须 是 整 数 的 运 算 符 是 C.% 18 下 列 浮 点 数 的 表 示 中 不 正 确 的 是 C.e23 19 自 加 自 减 运 算 符 的 正 确 描 述 是 D. 主 要 用 于 while 循 环 语 句 的 运 算 符 20 下 列 是 C 语 言 中 的 合 法 常 量 A.10 B.3.1415 D040 E0x1e G.1.23e+6 J"NBA" 21 下 列 标 识 符 是 C 语 言 中 的 合 法 变 量 名 A.tall D.x2 E.high_of_house G.DOUBLE 三 编 程 题 1 写 一 个 程 序, 计 算 出 半 径 为 r 的 球 体 体 积 #include<math.h> #define pi asin(1)*2 double r; scanf("%lf",&r); printf("%lf\n",4*pi*r*r*r/3); 2 编 一 程 序, 输 入 a,b 两 个 值, 输 出 两 个 数 中 较 大 的 开 方 #include<math.h> double a,b,max; scanf("%lf%lf",&a,&b); max=a>b?a:b; printf("%lf\n",sqrt(max)); 3 编 一 程 序, 计 算 从 键 盘 输 入 的 一 个 数 的 平 方 和 立 方 第 3 页 / 共 6 页
double a,b; scanf("%lf",&a); b=a*a; printf("%lf %lf\n",b,b*a); 4 编 一 程 序, 计 算 从 键 盘 输 入 的 4 个 数 的 平 均 值 double a,b,c,d,sum; scanf("%lf %lf %lf %lf",&a,&b,&c,&d); sum=a+b+c+d; printf("%lf\n",sum/4); 5 编 一 程 序, 从 键 盘 输 入 一 个 5 位 正 整 数, 然 后 分 别 求 出 它 的 个 位 数 十 位 数 百 位 数 千 位 数 和 万 位 数, 并 打 印 出 这 五 位 数 字 的 和 如 输 入 12345, 打 印 出 15(1+2+3+4+5=15) int sum=0,i,a[5],x; printf(" 输 入 一 个 五 位 数 :"); scanf("%d",&x); for(i=0;i<5;i++) a[i]=x%10; x/=10; sum=sum+a[i]; printf("%d",sum); putchar('('); for(i=4;i>=0;i--) printf("%d+",a[i]); putchar('\b'); printf("=%d",sum); 第 4 页 / 共 6 页
putchar(')'); 6 求 下 面 算 术 表 达 式 的 值 : 1)x+a%3*(int)(x+y)%2/4-6 -3.2 2)(double)(a+b)/3+(int)x%(int)y 6.33 7 写 出 程 序 运 行 结 果 int i,j,m,n; i=11; j=10; m=2*--i; n=j--; printf("%d,%d,%d,%d",i,j,m,n); 10,9,20,10 8 设 int a=13,n=17, 计 算 下 面 表 达 式 的 值 1)a+=3*a 52 2)a-=2 11 3)a*=10-3 91 4)a/=(a+a)/2 1 5)a%=(n%=2) 0 6)a+=a-=a*=a 0 9 指 出 下 列 程 序 中 的 错 误 之 处 #define tax_of_rate 0.08; float cost;total; printf("enter the cost of the item:"); scanf("%f",cost); printf("enter the shipping charge:"); scanf("%f\n",&shipping) total=cost+cost*tax of rate+shipping; printf("the total is %f:",total); #define tax_of_rate 0.08; float cost,total,shipping; printf("enter the cost of the item:"); scanf("%f",&cost); 第 5 页 / 共 6 页
printf("enter the shipping charge:"); scanf("%f",&shipping); total=cost+cost*tax_of_rate+shipping; printf("the total is :%f",total); ================ 此 后 无 内 容 =============== 第 6 页 / 共 6 页