何钦铭版C语言第3章答案,何钦铭版C语言第3章答案.pdf

253b171540df25e1b84436cbe50dfc72.gif何钦铭版C语言第3章答案.pdf

45 改变改变else 和和 if 的配对的配对 例例3-12 改写下列改写下列 if 语句,使语句,使 else 和第和第1个个 if 配对。配对。 if x 2 if x 1 y x 1; else y x 2; if x 2 if x 1 y x 1; else y x 2; if x 2 if x 1 y x 1; else; else y x 2; 每条语句的执行条件每条语句的执行条件 若要改变 else 正常的配对规则,一般采用 两种方法 采用,构造一个复合语句。 增加空的 else 语句; 46 本章总结本章总结 分支结构分支结构 if-else语句语句 else if 分支结构分支结构 switch语句语句 case后为常量表达式后为常量表达式 break的使用的使用 数据类型数据类型char型型 运算符与表达式运算符与表达式 逻辑运算符、关系运算符逻辑运算符、关系运算符 逻辑表达式逻辑表达式 分支结构程序的综合设计分支结构程序的综合设计 正确理解正确理解if语句和语句和switch语句 的执行机制; 语句 的执行机制; 掌握各类关系表达式、逻辑 表达式的运用; 掌握各类关系表达式、逻辑 表达式的运用; 能合理运用分支语句熟练编写 分支结构类的程序; 能合理运用分支语句熟练编写 分支结构类的程序; 正确理解正确理解if语句和语句和switch语句 的执行机制; 语句 的执行机制; 掌握各类关系表达式、逻辑 表达式的运用; 掌握各类关系表达式、逻辑 表达式的运用; 能合理运用分支语句熟练编写 分支结构类的程序; 能合理运用分支语句熟练编写 分支结构类的程序; 归纳总结本章的各个重要知识点。 3.3 练习与习题参考答案练习与习题参考答案 3.3.1 练习参考答案练习参考答案 练习 3-1 例 3-4 中使用 else-if 语句求解多分段函数,为了检查 else-if 语句的三个分支是否 正确,已经设计了三组测试用例,请问还需要增加测试用例吗为什么如果要增加,请给 出具体的测试用例并运行程序。 解答 最好再增加两组测试用例,因为尚未对分段函数参数的边界值进行测试。可再给出 x0 和 x15 时的两种情况。 练习 3-2 输入一个整数 x,计算并输出下列分段函数 signx 的值。 01 00 01 x x x xsigny , , , 解答 include int mainvoid int x, y; printfEnter x ; scanfd, ifx0 y1; else if x0 y0; else y-1; printfsign d dn,x,y; return 0; 练习 3-3 输入一个正整数 n,再输入 n 个学生的成绩,计算平均成绩,并统计所有及格学生 的人数。 解答 include int mainvoid int count, i, n; double grade, total; printfEnter n ; scanfd, total 0; count 0; fori 1; i 60 count; printfGrade average .2fn, total / n; printfNumber of pass dn, count; return 0; 练习 3-4 输入 15 个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。 解答 include int mainvoid int i; int blank, digit, letter, other; char c; blank digit letter other 0; fori1;ia else ifc cn blank; else other; printfletterd,blankd,digitd,otherdn, letter, blank, digit, other; return 0; 练习 3-5 输入一个年份 year,判断该年是否为闰年。判断闰年的条件是能被 4 整除但 不能被 100 整除,或者能被 400 整除。 解答 include int mainvoid int year; printfEnter year ; scanfd, if year 4 0 else printfIt is not a leap yearn ; return 0; 练习 3-6 在例 3-8 程序中,如果把 switch 语句中所有的 break 都去掉,运行结果会改变 吗如果有变化,输出什么为什么 解答 如果去掉所有的 break 语句,运行结果会改变,输出 price 0.0 ,因为不管 choice 值与 其中某个常量表达式相等,当去掉 break 语句时,其后的所有语句段都将运行,故每次都将 执行到 price0.0 语句为止。 练习 3-7 输入五级制成绩 (AE) , 输出相应的百分制成绩 (0100) 区间, 要求使用 switch 语句。例如,输入 A,输出 90100。五级制成绩对应的百分制成绩区间为A(90-100) 、 B(80-89) 、C(70-79) 、D(60-69)和 E(0-59) 。 解答 include int mainvoid char ch; printf Grade ; ch getchar; switchch case A printfc 对应的百分制区间是 90-100n,ch; break; case B printfc 对应的百分制区间是 80-89n,ch; break; case C printfc 对应的百分制区间是 70-79n,ch; break; case D printfc 对应的百分制区间是 60-69n,ch; break; case E printfc 对应的百分制区间是 0-59n,ch; break; default printfInvalid n; return 0; 练习 3-8 查询水果的单价。有 4 种水果,苹果(apples) 、梨(pears) 、桔子(oranges)和葡 萄(grapes) ,单价分别是 3.00 元/公斤,2.50 元/公斤,4.10 元/公斤和 10.20 元/公斤。在屏 幕上显示以下菜单(编号和选项) ,用户可以连续查询水果的单价,当查询次数超过 5 次时, 自动退出查询;不到 5 次时,用户可以选择退出。当用户输入编号 14,显示相应水果的 单价(保留两位小数) ;输入 0,退出查询;输入其他编号,显示价格为 0。 1 apples 2 pears 3 oranges 4 grapes 0 Exit 解答 include int mainvoid int ri; int choice; float price; forri1; ri5; ri printf1 applesn; printf2 pearsn; printf3 orangesn; printf4 grapesn; printf0 Exitn; scanfd, ifchoice0 break; else switchchoice case 1 price3.00; break; case 2 price2.50; break; case 3 price4.10; break; case 4 price10.20; break; default price0; printfprice0.2fn, price; return 0; 练习 3-9 请读者重新编写例 3-4 的程序,要求使用嵌套的 if - else 语句,并上机运行。 解答 include int mainvoid double x, y; scanflf, if x 15 y 2.5 * x - 10.5; else ifx0 y0; else y4*x/3; printff.2f.2fn, x, y; return 0; 练习 3-10 在例 3-12 中, 改写 if 语句前, y x 1;和 y x 2; 两条语句的执行条件是什么 改写后呢 解答 改写前yx1 的执行条件是 x1; yx2 的执行条件是 1x2。 改写后yx1 的执行条件是 x1; yx2 的执行条件是 2 10 or a 0 | a 10 By0; else ifx 0 y 0; ifx 0 y 1; else y -1; else ifx 0 ifx 0; ifx 0 y 1; ifx 0 y 1 ; else y 0; else y -1; else y -1; 5下列程序段的输出结果是 C 。 int mainvoid int a 2, b -1,c 2; ifa b ifb 0 s s 1; ifa b t s t; else ifa b t 5; else t 2 * s; printftdn,t; return 0; Aab Bab0 C0aab 二填空题 1表示条件10x100 或者 x10 scanfd, ifa 50 printfd,a; ifa 40 printfd,a; ifa 30 printfd,a; return 0; 5下列程序运行的输出结果是 9 。 int mainvoid char c b; int k 4; switchc case a k k 1;break; case b k k 2; case c k k 3; printfdn,k; return 0; 三程序设计题 1输入三角形的 3 条边 a, b, c,如果能构成一个三角形,输出面积 area 和周长 perimeter保 留 2 位小数;否则,输出These sides do not correspond to a valid triangle。 在一个三角形中,任意两边之和大于第三边。三角形面积计算公式 csbsassarea ,其中 s abc/2 解答 include include int mainvoid int a,b,c; double area,s,perimeter; scanfddd, ifabc sabc*1.0/2; areasqrts*s-a*s-b*s-c; printfarea.2f,perimeter.2fn,area,perimeter; else printfThese sides do not correspond to a valid trianglen; return 0; 22011 年开始实行新个人所得税法,要求输入月薪 salary,输出应交的个人所得税 tax。新 税法方案如下 tax rate * salary-3500- deduction 当 salary 3500 时,rate 0、deduction 0 当 3500 salary 5000 时,rate 3、deduction 0 当 5000 salary 8000 时,rate 10、deduction 105 当 8000 salary 12500 时,rate 20、deduction 555 当 12500 salary 38500 时,rate 25、deduction 1005 当 38500 salary 58500 时,rate 30、deduction 2755 当 58500 salary 83500 时,rate 35、deduction 5505 当 83500 salary 时,rate 45、deduction 13505 解答 include int mainvoid int decution; double rate,salary,tax; printfEnter the salary ; scanflf, ifsalary3500 rate0;decution0; else ifsalary5000 rate0.03;decution0; else ifsalary8000 rate0.1;decution105; else ifsalary12500 rate0.2;decution555; else ifsalary38500 rate0.25;decution1005; else ifsalary58500 rate0.3;decution2755; else ifsalary83500 rate0.35;decution5505; else rate0.45;decution13505; taxrate*salary-3500-decution; printftax .0fn,tax; return 0; 3某城市普通出租车收费标准如下 “起步里程 3 公里,起步费 10 元;超起步里程后 10 公里内,每公里租费 2 元,超过 10 公里以上的部分加收 50的回空补贴费,即每公里租费 3 元。营运过程中,因路阻及乘客要求临时停车的,每 5 分钟按 1 公里租费计收。运价计费 尾数四舍五入,保留到元。 ” 。编写程序,输入行驶里程公里与等待时间分钟,计算并输 出乘客应支付的车费元。 解答 include int mainvoid int mile,time,cost; scanfdd, cost0; milemiletime/5; ifmile3 cost10; else ifmile13 cost10mile-3*2; else cost1010*2mile-13*3; printfcostdn,cost; return 0; 4输入一个正整数 n,再输入 n 个学生的成绩,计算平均分,并统计各等级成绩的个数。 成绩分为 5 个等级,分别为 A90100、B8089、C7079、D6069、E059。 include int mainvoid int mark, n, i, sum; double average; int counta, countb, countc, countd, counte; printfEnter n ; scanfd, counta countb countc countd counte sum0; fori1; i90 counta; else if mark80 countb; else ifmark70 countc; else ifmark60 countd; else counte; averagesum*1.0/n; printfaverage.1fn,average; printfA d, B d, C d, D d, E dn,counta, countb, countc, countd, counte; return 0; 5输出 21 世纪所有的闰年。判断闰年的条件是能被 4 整除但不能被 100 整除,或者能 被 400 整除。 解答 include int mainvoid int year; foryear2000; year2099; year if year40 return 0; 3.4 实验指导教材参考答案实验指导教材参考答案 一、调试示例略 二、改错题 改正下列程序中的错误,输入三角形的 3 条边 a, b, c,如果能构成一个三角形,输出 面积 area 和周长 perimeter(保留 2 位小数) ;否则,输出“These sides do not correspond to a valid triangle” 。 (源程序 error03_2.cpp) 在一个三角形中,任意两边之和大于第 3 边。三角形面积计算公式 areacsbsass 其中 s abc/2 输入输出示例(运行 2 次) 第一次运行 Enter 3 sides of the triangle 5 5 3 area 7.15; perimeter 13.00 第二次运行 Enter 3 sides of the triangle 1 4 1 These sides do not correspond to a valid triangle 源程序(有错误的程序) 1 include 2 include 3 int mainvoid 4 5 double a,b,c; 6 double area,perimeter,s; 7 8 printfEnter 3 sides of the triangle ; 9 scanf lflflf, 10 11 if a b c b c a a c b 12 s a b c / 2; 13 area sqrt s * s - a * s - b * s - c ; 14 perimeter a b c; 15 printfarea .2f; perimeter .2fn,area,perimeter; 16 17 else 18 printfThese sides do not correspond to a valid trianglen; 19 20 return 0; 21 改错汇总改错汇总 错误行号 11 正确语句 if a b c 错误行号 16 正确语句 三、编程题 1输入 x,计算并输出下列分段函数 signx 的值。 10 00 10 x ysign xx x 输入输出示例(运行 3 次) 第一次运行 Enter x 10 sign 10 1 第二次运行 Enter x 0 sign 0 0 第三次运行 Enter x -98 sign -98 -1 解答参见 3.3.1 节中的练习 3-2 2输入一个整数 x,判断 x 能否被 3、5、7 整除,并输出以下信息之一 (1)能同时被 3、5、7 整数; (2)能被其中两数整除; (3)能被其中一个数整除; (4)不能被 3、5、7 任一个数整除; 输入输出示例(运行 4 次) 第一次运行 Enter x 15 能被其中两数整除 第二次运行 Enter x 14 能被其中一个数整除 第三次运行 Enter x 105 能同时被 3、5、7 整数 第四次运行 Enter x 17 不能被 3、5、7 任一个数整除 解答 include int mainvoid int x; printfEnter x ; scanfd, ifx30 else if x30 else ifx30 x50 x70; printf能被其中一个数整除n; else printf不能被 3、5、7 任一个数整除n; return 0; 3输入五级制成绩(A E) ,输出相应的百分制成绩(0 100)区间,要求使用 switch 语 句。五级制成绩对应的百分制成绩区间为A(90 100) 、B(80 89) 、C(70 79) 、D(60 69)和 E(0 59) 。 输入输出示例 Grade B B 对应的百分制成绩区间是 80 89 提示程序应运行 6 次,每次测试一种情况,即分别输入 A、B、C、D、E 和其他字符。 解答参见 3.3.1 节中的练习 3-7 4查询水果的单价。有 4 种水果,苹果(apple) 、梨(pear) 、橘子(orange)和葡萄(grape) , 单价分别是 3.00 元/千克,2.50 元/千克,4.10 元/千克和 10.20 元/千克。在屏幕上显示以下 菜单(编号和选项) ,用户可以连续查询水果的单价,当查询次数超过 5 次时,自动退出查 询;不到 5 次时,用户可以选择退出。当用户输入编号 1 4,显示相应水果的单价(保留 1 位小数) ;输入 0,退出查询;输入 0 4 之外的其他编号,显示价格为 0。 1 apple 2 pear 3 orange 4 grape 0 exit 解答参见 3.3.1 节中的练习 3-8 52011 年开始实行新个人所得税法,要求输入月薪 salary,输出应交的个人所得税 tax。新 税法方案如下 tax rate * salary-3500- deduction 当 salary 3500 时,rate 0、deduction 0 当 3500 salary 5000 时,rate 3、deduction 0 当 5000 salary 8000 时,rate 10、deduction 105 当 8000 salary 12500 时,rate 20、deduction 555 当 12500 salary 38500 时,rate 25、deduction 1005 当 38500 salary 58500 时,rate 30、deduction 2755 当 58500 salary 83500 时,rate 35、deduction 5505 当 83500 salary 时,rate 45、deduction 13505 输入输出示例(运行 5 次) 第一次运行 Enter the salary 3050.5 tax 0 第二次运行 Enter the salary 4238.9 tax 22 第三次运行 Enter the salary 7328.6 tax 278 第四次运行 Enter the salary 52547 tax 11959 第五次运行 Enter the salary 89000 tax 24970 解答参见 3.3.2 节中程序设计题第 2 题 6输入一个正整数 n,再输入 n 个学生的百分制成绩,统计各等级成绩的个数。成绩等级 分为五级,分别为 A(90 100) 、B(80 89) 、C(70 79) 、D(60 69)和 E(0 59) 。 输入输出示例 Enter n 5 Enter grade 1 77 Enter grade 2 54 Enter grade 3 92 Enter grade 4 73 Enter grade 5 60 The number of A90 1001 The number of B80 890 The number of C70 792 The number of D60 691 The number of E0 591 解答参见 3.3.2 程序设计题第 4 题 7 (选作)油价居高不下对有车族来说真是个大负担现在 90 号汽油 6.95 元/升、93 号汽油 7.44 元/升、97 号汽油 7.93 元/升。为吸引顾客,某自动加油站推出了“自助服务” 和“协助服务”两个服务等级,分别可得到 5和 3的折扣。请编写程序,输入顾客的加油 量 a,汽油品种 b90、93 或 97和服务类型 c(m自助,e 协助) ,计算并输出应付 款(保留小数点后 2 位) 。 解答 int mainvoid int a,b; char c ; double price,money ; printf输入加油量 ; scanfd, printf输入加油品种 ; scanfd, getchar; printf输入服务方式 ; cgetchar; ifb90 price6.95; else ifb93 price7.44; else price7.93; ifcm moneya*price*0.95; else moneya*price*0.97; printf应付款 .2fn,money; return 0;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值