收藏 分享(赏)

C语言程序设计(何欣铭)课后习题答案.pdf

上传人:HR专家 文档编号:5886137 上传时间:2019-03-20 格式:PDF 页数:111 大小:1.26MB
下载 相关 举报
C语言程序设计(何欣铭)课后习题答案.pdf_第1页
第1页 / 共111页
C语言程序设计(何欣铭)课后习题答案.pdf_第2页
第2页 / 共111页
C语言程序设计(何欣铭)课后习题答案.pdf_第3页
第3页 / 共111页
C语言程序设计(何欣铭)课后习题答案.pdf_第4页
第4页 / 共111页
C语言程序设计(何欣铭)课后习题答案.pdf_第5页
第5页 / 共111页
点击查看更多>>
资源描述

1、 39 C语言程序的调试、运行步骤 修改程序,观察语法错误、逻辑错误及改 正方法。 语法错误:可以删除一个分号,使编 开始 编辑 源程序 .c / .cpp 编译 目标程序 .obj 连接 可执行程序 .exe 运行 结果 译出现错误提示,改正之,再编译。 类比写文章有错别字。 逻 辑 错 误 : 将 sum=sum+i 改 为 sum=sum-i,编译、连接、运行,发现 语法 错误 1.3 习题参考答案 连接 错误 运行 错误 运行结果不符合题目要求。找出错误 (调试),改正之,再编译、连接、运 行,看结果。类比写文章词不达意。 1对 C语言来说,下列标识符中哪些是合法的,哪些是不合法的?

2、total _debug Large for(i=1;in/2? 假 假 打印 n不是素数 循环结构 分支结构 #include int main(void ) printf(“ An“); printf(“A An“); printf(“ An“); return 0; 14 62 函数的概念 C语言中有两种类型函数 标准库函数 自定义函数 函数可以做到一次定义、多次调用 使用自定义函数的程序框架 double fact(int n); /* 声明 自定义函数,以分号结束 */ int main(void) result = fact(i); /* 调用 自定义函数 fact(i)计算i!

3、*/ /* 定义 求 n! 的函数 */ 简单总结本节内容。 使学生了解自定义函数编程结构,能够模 仿编程即可。 2.3 练习与习题参考答案 2.3.1 练习参考答案 2-1 编写程序,在屏幕上显示一个短句 “Programming in C is fun!”。 解答: #include int main(void) printf(“Programming in C is fun!n“); return 0; 2-2 下列语句的运行结果是什么?与例 2-2 的运行结果有何不同?为什么? printf(“Programming is fun. And Programming in C is ev

4、en more fun!n“); 解答: 运行结果: Programming is fun. And Programming in C is even more fun! 例 2-2 的运行结果分 2 行显示。原因在于,例 2-2 中在每条输出语句的结尾都采用了 n 换行。 2-3 编写程序,在屏幕上显示如下图案。 * * * * 解答: int main(void) printf(“* * * *n * * *n * *n *n“); return 0; 18 2-4 编写程序,求华氏温度 150F 对应的摄氏温度(计算公式同例 2-3)。 解答: #include int main(voi

5、d) int celsius, fahr; fahr = 150; celsius = 5 * (fahr 32) / 9; printf(“fahr = %d, celsius = %dn“, fahr, celsius); return 0; 2-5 算 术 表 达 式 5*(fahr-32)/9 能 改 写 成 5(fahr-32)/9 吗 ? 为 什 么 ? 如 果 将 其 改 写 为 5/9*(fahr-32),会影响运算结果吗? 解答: 5(fahr-32)/9 不是合法的 C 表达式,因为不能省略运算符 *; 5/9*(fahr-32)的值为 0。 2-6 一个物体从 100 米

6、的高空自由落下,编写程序,求它在前 3 秒内下落的垂直距离。设重 力加速度为 10m/s2。 解答: #include int main(void) double height; height = 0.5 * 10 * 3 * 3; printf(“height = %.2fn“, height); return 0; 2-7 输入提示和输入语句的顺序应该如何安排?例 2-5 中, scanf(“%d%d%lf“, 19 scanf(“%d“, celsius = 5 * (fahr - 32) / 9; printf(“celsius = %dn“, celsius); return 0;

7、2-9 编写程序,输入 3 个整数,计算并输出它们的平均值。 解答: #include int main(void) int a, b, c; double average; scanf(“%d%d%d“, average = (a + b + c) * 1.0 / 3; printf(“average = %.2fn“, average); return 0; 2-10 编写程序,输入 x,计算并输出下列分段函数 f(x)的值(保留 3 位小数)。 1 y f x( ) x x 0 解答: 0 x 0 #include int main(void) double x, y; scanf(“%

8、lf“, if(x != 0) y = 1 / x; else y = 0; printf(“f(%.2f) = %.3fn“, x, y); return 0; 2-11 编写程序,输入 x,计算并输出下列分段函数 f(x)的值(保留 2 位小数),请调用 sqrt 函数求平方根,调用 pow 函数求幂。 51 x x x 0 y f x ( ) 2 x x x 0 解答: #include 20 #include int main(void) double x, y; scanf(“%lf“, if(x = 0) y = sqrt(x); else y = pow(x,5) + 2 * x

9、 + 1 / x; printf(“f(%.2f) = %.2fn“, x, y); return 0; 2-12 编写程序,输入 2 个整数 lower 和 upper,输出一张华氏摄氏温度转换表,华氏温度 的取 值范围是 lower, upper,每次增加 2F,计算公式同例 2-7。 解答: #include int main(void) int lower, upper; double celsius, fahr; scanf(“%d%d“, printf(“fahr celsiusn“); for(fahr = lower; fahr int main(void) int i, n;

10、 double sum; scanf(“%d“, sum = 0; for(i = 1; i int main(void) int i, n; double sum; scanf(“%d“, sum = 0; for(i = 1; i int main(void) int flag, i, n, denominator; double item, sum; scanf(“%d“, sum = 0; flag = 1; denominator = 1; for(i = 1; i #include int main(void) int i, n; double mypow; scanf(“%d“,

11、 for(i = 0; i int main(void) 23 int i, n; double myfact; double fact(int n); scanf(“%d“, for(i = 1; i int main(void) int num1, num2; scanf(“%d%d“, printf(“%d + %d = %dn“, num1, num2, num1+num2); printf(“%d - %d = %dn“, num1, num2, num1-num2); printf(“%d * %d = %dn“, num1, num2, num1*num2); printf(“%

12、d / %d = %dn“, num1, num2, num1/num2); printf(“%d % %d = %dn“, num1, num2, num1%num2); return 0; 2为了倡导居民节约用电,某省电力公司执行 “阶梯电价 ”,安装一户一表的居民用户电 价分两个 “阶梯 ”:月用电量 50 千瓦时以内的,电价为 0.53 元 /千瓦时;超过 50 千瓦时的 用电量,电价上调 0.05 元 /千瓦时。编写程序,输入用户的月用电量(千瓦时),计算并输 出该用户应支付的电费(元)。 解答: #include int main(void) double cost, e; sca

13、nf(“%d“, scanf(“%lf“, if(e int main(void) 25 int i, n; double mypow, x; scanf(“%lf%d“, mypow = 1; for(i = 1; i int main(void) int i, m, n; double sum; scanf(“%d%d“, sum = 0; for(i = m; i int main(void) int flag, i, n; double item, sum; scanf(“%d“, sum = 0; flag = 1; for(i = 1; i #include int main(vo

14、id) int year; double loan, money, mypow, rate; scanf (“%lf%lf“, printf(“ year moneyn“); for(year = 5; year #include int main(void) int i, n; double sum; scanf(“%d“, sum = 0; for(i = 1; i int main(void) int i, n; double sum; double fact(int n); scanf(“%d“, sum = 0; for(i = 0; i int main(void) int x,

15、y; 0 1, 0 x 0 printf(“Enter x: “ ); scanf(“%d“, if(x0) y=1; else if (x=0) y=0; else y=-1; printf(“sign( %d ) = %dn“,x,y); return 0; 练习 3-3 输入一个正整数 n,再输入 n 个学生的成绩,计算平均成绩,并统计所有及格学生 的人数。 解答: # include int main(void) int count, i, n; double grade, total; printf(“Enter n: “); scanf(“%d“, total = 0; count

16、 = 0; for(i = 1; i = 60) count+; printf(“Grade average = %.2fn“, total / n); printf(“Number of pass = %dn“, count); return 0; 练习 3-4 输入 15 个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。 解答: #include int main(void) int i; int blank, digit, letter, other; char c; blank = digit = letter = other = 0; for(i=1;i=a prin

17、tf(“Enter year: “); scanf(“%d“, if( (year % 4 = 0 else printf(“It is not a leap yearn “); return 0; 练习 3-6 在例 3-8 程序中,如果把 switch 语句中所有的 break 都去掉,运行结果会改变 吗?如果有 变化,输出什么?为什么? 解答: 如果去掉所有的 break 语句,运行结果会改变,输出 price = 0.0 ,因为不管 choice 值与 其中某个常量表达式相等,当去掉 break 语句时,其后的所有语句段都将运行,故每次都将 执行到 price=0.0 语句为止。 练习

18、 3-7 输入五级制成绩( A E),输出相应的百分制成绩( 0 100)区间,要求使用 switch 语句。例如,输入 A,输出 90 100。五级制成绩对应的百分制成绩区间为: A( 90-100)、 B( 80-89)、 C( 70-79)、 D( 60-69)和 E( 0-59)。 解答: #include int main(void) char ch; printf(“Input Grade: “); ch = getchar(); switch(ch) case A: printf(“%c 对应的百分制区间是 90-100n“,ch); break; case B: printf(

19、“%c 对应的百 分制区间是 80-89n“,ch); break; case C: printf(“%c 对应的百分制区间是 70-79n“,ch); break; case D: printf(“%c 对应的百分制区间是 60-69n“,ch); break; case E: printf(“%c 对应的百分制区间是 0-59n“,ch); break; default: printf(“Invalid inputn“); return 0; 练习 3-8 查询水果的单价。有 4 种水果,苹果( apples)、梨( pears)、桔子( oranges)和葡 萄( grapes),单价分

20、别是 3.00 元 /公斤, 2.50 元 /公斤, 4.10 元 /公斤和 10.20 元 /公斤。在屏 幕上显示以下菜单(编号和选项),用户可以连续查询水果的单价,当查询次数超过 5 次时, 自动退出查询;不到 5 次时,用户可以选择退出。当用户输入编号 1 4,显示相应水果的 单价(保留两位小数);输入 0,退出查询;输入其他编号,显示价格为 0。 1 apples 2 pears 3 oranges 4 grapes 0 Exit 解答: #include int main(void) int ri; int choice; float price; for(ri=1; ri int

21、main(void) double x, y; scanf(“%lf“, if (x 15) y = 2.5 * x - 10.5; else if(x= 10 or a = 10 else if(x = 0) y = 0; else y = -1; C y = 0; if(x = 0); if(x 0) y = 1 ; else y = -1; B y=0; if(x 0) y = 1; else if(x = 0) if(x 0) y = 1; else y = 0; else y = -1; 5下列程序段的输出结果是 C 。 int main(void) int a = 2, b = -

22、1,c = 2; if(a 0) s = s + 1; if(a b) t = s + t; else if(a = b) t = 5; else t = 2 * s; printf(“t=%dn“,t); return 0; A ab B aab 1表示条件: 1010 scanf(“%d“, if(a 50) printf(“%d“,a); if(a 40) printf(“%d“,a); if(a 30) printf(“%d“,a); return 0; 5下列程序运行的输出结果是 9 。 int main(void) char c = b; int k = 4; switch(c)

23、case a: k = k + 1;break; case b: k = k + 2; case c: k = k + 3; printf(“%dn“,k); return 0; 三程序设计题 1输入三角形的 3 条边 a, b, c,如果能构成一个三角形,输出面积 area 和周长 perimeter(保 留 2 位小数 );否则,输出 “These sides do not correspond to a valid triangle“。 在一个三角形中,任意两边之和大于第三边。三角形面积计算公式: 解答: area s(s a)(s b)(s c ) ,其中 s = (a+b+c)/2

24、#include #include int main(void) int a,b,c; double area,s,perimeter; scanf(“%d%d%d“, if(a+bc) s=(a+b+c)*1.0/2; area=sqrt(s*(s-a)*(s-b)*(s-c); printf(“area=%.2f,perimeter=%.2fn“,area,perimeter); else printf(“These sides do not correspond to a valid trianglen“); return 0; 2 2011 年开始实行新个人所得税法,要求输入月薪 sa

25、lary,输出应交的个人所得税 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%、 deductio

26、n = 1005 当 38500 salary 58500 时, rate = 30%、 deduction = 2755 当 58500 salary 83500 时, rate = 35%、 deduction = 5505 当 83500 salary 时, rate = 45%、 deduction = 13505 解答: #include int main(void) int decution; double rate,salary,tax; printf(“Enter the salary: “); scanf(“%lf“, if(salary int main(void) int

27、 mile,time,cost; scanf(“%d%d“, cost=0; mile=mile+time/5; if(mile int main(void) int mark, n, i, sum; double average; int counta, countb, countc, countd, counte; printf(“Enter n: “); scanf(“%d“, counta= countb = countc = countd = counte =sum=0; for(i=1; i=90) counta+; else if (mark=80) countb+; else

28、if(mark=70) countc+; else if(mark=60) countd+; else counte+; average=sum*1.0/n; printf(“average=%.1fn“,average); printf(“A: %d, B: %d, C: %d, D: %d, E: %dn“,counta, countb, countc, countd, counte); return 0; 5输出 21 世纪所有的闰年。判断闰年的条件是:能被 4 整除但不能被 100 整除,或者能 被 400 整除。 解答: #include int main(void) int yea

29、r; for(year=2000; year #include int main(void) int denominator, flag; double item, s,eps; flag = 1; denominator = 1 ; item = 1.0; s = 0; scanf(“%lf”, while(fabs (item) = eps) item = flag * 1.0 / denominator; s = s + item; flag = -flag; denominator = denominator +3; printf ( “s = %fn”, s); return 0;

30、练习 4-4 如果将例 4-3 程序中的 do-while 语句改为下列 while 语句,会影响程序的功能吗? 为什么?再增加一条什么语句,就可以实现同样的功能? while(number != 0) number = number / 10; count +; 解答: 会有影响,因为当输入数据 number 为 0 时,上述 while 循环将不执行, count 值仍为 0, 故输出为 0,不符合题目要求。可增加一条 if 语句来解决上面的问题,在 while 循环前加上 语句 “if ( number=0) count=1; ”。 练习 4-5 例 4-4 程序中的第 9 15 行可以

31、用下列 for 语句替代吗?为什么? for( i = 2; i #include int main(void) int flag, i, j, k, m, n; scanf(“%d“, for(i = 1; i k else printf(“%d isnt a primen“, m); 练习 4-7 输入 1 个正整数 n,计算下式求出 e 的值(保留 2 位小数),要求使用嵌套循环。 1 1 1 1 e 1 1! 2! 3! 解答: #include “stdio.h“ int main(void) int i, j, n; double e, t; printf(“Input n: “)

32、; scanf(“%d“, e = 1; for (i = 1; i int main(void) int i, mark, max, n; printf(“Enter n: “); scanf (“%d“, if (n0) printf(“Enter %d marks: “, n); scanf (“%d“, /* 读入第一个成绩 */ max = mark; /* 假设第一个成绩是最高分 */ for (i = 1; i int main(void) int i , min, n, x; printf(“inputr n: “); scanf(“%d“, printf(“input numbers: “); scanf(“%d“, min = x;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 中等教育 > 试题课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报