c语言第4章 选择结构程序设计习题答案.doc
第第 4 章章 选择结构程序设计选择结构程序设计 习题 习题 P111 4 2 C 语言中如何表示 真 和 假 系统如何判断一个量的 真 和 假 语言中如何表示 真 和 假 系统如何判断一个量的 真 和 假 答 答 C 语言中用语言中用 1 表示真 表示真 0 表示假 系统按照 表示假 系统按照 非非 0 为真 为真 0 为假为假 判断一个逻辑量的真假 判断一个逻辑量的真假 4 3 写出下面各逻辑表达式的值 设写出下面各逻辑表达式的值 设 a 3 b 4 c 5 1 a b c 定义定义 4 个整型变量 其中个整型变量 其中 a b c 存原始数据 存原始数据 max存最值存最值 printf n the value of a b c 提示输入提示输入 scanf d d d 格式符之间无分隔符 输入时可以以空格 回车 跳格格式符之间无分隔符 输入时可以以空格 回车 跳格 分隔分隔 if a b max a else max b if max c max c printf nmax d n max 法二 法二 main int a b c max printf n the value of a b c scanf d d d max a if max b max b if max c max c printf nmax d n max 4 6 有一个函数 写一段程序 有一个函数 写一段程序 输输入入 x 输出输出 y 的值 的值 分析分析 这是一个典型的分断函数的求解应用 运行时从键盘输入这是一个典型的分断函数的求解应用 运行时从键盘输入 x 的值 再判断其范围根据表达式计算的值 再判断其范围根据表达式计算 y 值并输出即可 该题的关键是如何判断值并输出即可 该题的关键是如何判断 x 值的范围 需要用到嵌套的分支选择语句 具体方法比较多 可值的范围 需要用到嵌套的分支选择语句 具体方法比较多 可 以先确定任意一个范围 在确定其余范围时可以用到前一条件不满足的隐含条件 注意嵌套语句中以先确定任意一个范围 在确定其余范围时可以用到前一条件不满足的隐含条件 注意嵌套语句中 else和和if 的的 配对关系 另外仍然要注意配对关系 另外仍然要注意 C 语言表达式和数学表达式的区别 乘号 语言表达式和数学表达式的区别 乘号 在 在 C 语言表达式中一定不能省略 语言表达式中一定不能省略 参考程序如下 参考程序如下 include main float x y printf x scanf f if x 1 y x else if x 1 y 2 x 1 else 前两个条件都不满足 则隐含条件为前两个条件都不满足 则隐含条件为 x 10 y 3 x 11 printf y f n y 对上述参考答案中加粗部分语句的改写方法 对上述参考答案中加粗部分语句的改写方法 思考思考 还有其他的改写方法吗 请动手写一写 还有其他的改写方法吗 请动手写一写 4 8 给出一给出一百分制成绩百分制成绩 要求输出成绩 要求输出成绩等级等级 A B C D E 90 以上为以上为 A 80 89 分为分为 B 70 79 分分 为为 C 60 69 分为分为 D 60 分以下为分以下为 E 分析分析 该题是一个多分支选择的应用 该题是一个多分支选择的应用 C 语言中实现多分支选择的方法可以用语言中实现多分支选择的方法可以用 if else 嵌套语句或用嵌套语句或用 switch 语句 该题这两种方法都可以实现 在用语句 该题这两种方法都可以实现 在用 if else 实现的时候注意实现的时候注意 else 和和 if 的配对 方法同上题 用的配对 方法同上题 用 switch 语句实现的时候注意成绩处理为可以列举的值 方法是将成绩取整后整除语句实现的时候注意成绩处理为可以列举的值 方法是将成绩取整后整除 10 这样百分制的成绩只有 这样百分制的成绩只有 11 种种 可能了 可能了 参考程序如下 参考程序如下 法一 法一 if else 语句实现 语句实现 main float score 存放输入的百分制成绩存放输入的百分制成绩 char grade 存放等级存放等级 printf nPlease the score 提示输入提示输入 scanf f 完成输入完成输入 while score 100 score 90 grade A else if score 80 grade B else if score 70 grade C else if score 60 grade D else grade E printf Score g Grade is c n score grade 输出结果输出结果 法二 法二 switch 语句实现 语句实现 main if x 10 if x 10 y 3 x 11 else if x 1 else y x float score char grade printf nPlease the score scanf f while score 100 score 0 printf Score error nPlease the score scanf f printf n switch int score 10 先将成绩取整 再整除先将成绩取整 再整除 10 得商的整数部分 得商的整数部分 以下以下 case 后为后为 switch 后表达式计算出来可能的值后表达式计算出来可能的值 case 10 case 9 grade A break 两个两个 case 值共用一组执行语句值共用一组执行语句 case 8 grade B break case 7 grade C break case 6 grade D break default grade E printf Score g Grade is c n score grade 4 9 给一个不多于给一个不多于 5 位的正整数 要求 位的正整数 要求 求出它是几位数 求出它是几位数 分别输出每一位数字 按逆序输出各位数字 分别输出每一位数字 按逆序输出各位数字 分析分析 该题的关键是将一个整数分解为各位数字 可以用整除和取余相结合的方法实现 并分别用不同 该题的关键是将一个整数分解为各位数字 可以用整除和取余相结合的方法实现 并分别用不同 的变量保存起来 由于整数的位的变量保存起来 由于整数的位数在数在 1 5 位之间不确定 所以适合用位之间不确定 所以适合用 switch 开关语句实现 开关语句实现 参考程序如下 参考程序如下 main long int num num 存放输入的原始数据 由于最大的存放输入的原始数据 由于最大的 5 位数是位数是 99999 它超出了它超出了 int 型的范围 型的范围 32768 32767 所以定义为 所以定义为 long 型型 int w a b c d e 变量变量 w 用于存放数的位数 其余存放用于存放数的位数 其余存放 5 位数的各位数字位数的各位数字 printf Please a number 0 99999 提提示输入示输入 scanf ld 输入长整型数据输入长整型数据 while num99999 检查输入数据的合法性检查输入数据的合法性 printf n Error Please re enter scanf ld 一组一组 if else 的嵌套确定输入的的嵌套确定输入的 num 是几位数是几位数 if num 10 w 1 else if num 100 w 2 else if num 1000 w 3 else if numb t a a b b t if a c t a a c c t if a d t a a d d t if b c t b b c c t if b d t b b d d t if c d t c c d d t printf 排序的结果是 排序的结果是 d d d d n a b c d 补充题 输入三个整数 a b c 判断其是否能构成三角形 是何种三角形 等腰 等边 普通