设为首页 加入收藏

TOP

C语言程序设计:现代方法(第2版)第三章全部习题答案(一)
2018-10-21 14:14:33 】 浏览:172
Tags:语言 程序设计 现代 方法 第三章 全部 习题 答案

前言

本人在通过《C语言程序设计:现代方法(第2版)》自学C语言时,发现国内并没有该书完整的课后习题答案,所以就想把自己在学习过程中所做出的答案分享出来,以供大家参考。这些答案是本人自己解答,并参考GitHub上相关的分享和Chegg.com相关资料。因为并没有权威的答案来源,所以可能会存在错误的地方,如有错误还希望大家能够帮助指出。

第三章练习题和编程题答案

练习题

3.1节

1.下面的printf函数调用产生的输出分别是什么?

(a)  printf("6d,%4d", 86, 1040);

(b) printf("%12.5e", 30.253);

(c) printf("%.4f", 83.162);

(d) printf("%-6.2g", .0000009979);

答:

(a) ┗━┛┗━┛┗━┛┗━┛86, 1040                   “%6d”表示右对齐、最小6个字段宽,数字86只占了2个字段宽,所以前面用4个空格(┗━┛)补齐。同理“%4d”也是右对齐、最小4个字段宽,数字1040正好为4个字段宽,所有没有空格。
(b) 3.02530e+001                                             %12.5e”表示右对齐、最小12个字段宽,同时小数点后显示5位数字,因为.0253不足5位,所以小数部分末尾会添加零占位。
(c) 83.1620                                                       %.4f”表示小数点后显示4位,因为.162不足4位,所以小数部分末尾会添加零占位。
(d) 1e-006                                                        %-6.2g”表示左对齐、最小6个字段宽,.2表示可以显示最大2个(去掉小数点后)有效数字。之所以显示1e是因为数字9979只能显示99这两个有效数字,所有后面的7会四舍五入向前进位,这样实际要显示的 数字就从.0000009979变成了.0000010000,所以结果显示为1e,如果将.2变为.3的话就会显示为9.98e-007。在%f%e当中,如果需要舍弃小数点后部分数字,同样会使用这种四舍五入的显示方式。

 

2.编写printf函数调用,以下列格式显示float型变量x:

(a) 指数表示形式,字段宽度8,左对齐,小数点后保留1位数字。

(b) 指数表示形式,字段宽度10,右对齐,小数点后保留6位数字。

(c) 定点十进制表示形式,字段宽度8,左对齐,小数点后保留3位数字。

(d) 定点十进制表示形式,字段宽度6,右对齐,小数点后无数字。

答:

(a)  printf("%-8.1e", x);

(b)  printf("%10.6e", x);

(c)  printf("%-8.3f", x);

(d)  printf("6.0f", x);

 

3.2节

3.说明下列每对scanf格式串是否等价?如果不等价,请指出它们的差异。

(a) "%d"与" %d"

(b)"%d-%d-%d"与"%d -%d -%d"

(c)"f"与"%f "

(d)"%f,%f"与"%f, %f"

答:

(a) 等价,因为scanf在开始寻找数的时候会忽略掉空格,所以即使在前面添加任意个空格均不影响结果。

(b)不等价,虽然在开始是是scanf会忽略掉空格,但是开始读入之后并不会忽略。所以前者%d-%d-%d中不能在“-”之间加入任何空格,否则会异常退出,而后者%d -%d -%d则可以在“-”之间加入或不加入任意个空格

(c)不等价,第二个格式串中以空格作为结尾,虽然不影响录入%f中的数字,但是第二个格式串并不会在回车或空格后结束,它会一直等到读入第一个非空字符时才会结束。而第一个%f会在遇到空格或回车之类的符号后就结束运行。

(d)不等价,与(b)理由相同,第一个格式串中逗号直接不能加入任何空格,而第二个则可以加入0个或n个空格。

 

4.假设scanf函数调用的格式如下:

scanf("%d%f%d", &i, &x, &j);

如果用户录入

10.3 5 6

调用执行后,变量i、x和j的值分别是多少?(假设变量i和变量j都是int型,而变量x是float型。)

答:

最后的结果是i=10,x=0.3,j=5,

首先因为i是int型所以scanf会读入“10.”,但因为后面出现了小数点(“.”),而i中不能有小数点,所以只将10存入一种并将小数点“放回”去。

之后x是float型,但读入.3后因为遇到了非数字空格,所以scanf会将.3存入x中,而将空格“放回”。

最后的变量j在读取时会像跳过空白字符,直到遇到非空白字符5,而5之后又是非数字的空格,所以只会将5存入变量j中。

而因为此时这个scanf函数结束了,所以最后的数字6会被保留到下一次scanf函数调用时再读取。

 

 5.假设scanf函数调用的是格式如下:

scanf("%f%d%f", &x, &i, &y);

如果用户输入

12.3 45.6 789

调用执行后,变量x、i和y的值分别是多少?(假设变量x和变量y都是float型,变量i是int型。)

答:

最后的结果是x=12.3,i=45,y=0.6

与上一道题类似,首先因为x是float型,所以scanf会读入“12.3”,之后遇到空格,此时结束读入并将12.3存入x中。

之后因为i是int型不能有小数点,所以scanf在读入“45.6”时只会将45存入i中,并将“.6”放回。

y是float型可以有小数点,所以scanf会将上次没有读入的“.6”存入y中,并在遇到空格时结束这次读入。

因为此时scanf函数已经执行完毕,所以最后的789会在下次scanf执

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇MFC 中的 Value 和 Control 下一篇考研数据结构-顺序表(综合应用1)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目