详细解读C语言程序设计:现代方法(第2版)第二章全部习题答案

简介: 详细解读C语言程序设计:现代方法(第2版)第二章全部习题答案

前言

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

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

练习题

2.2节

1.建立并运行由Kernighan和Ritchie编写的著名的“hello world”程序:

1 #include

2 int main(void)

3 {

4 printf("hello world!\n");

5 }

在编译时是否有警告信息?如果有,需要如何改进呢?

答:如果使用部分比较老的编译器如turbo C等,会生成警告信息,指出main函数并没有返回任何值。这是因为在声明main函数时使用了int,表明函数会返回一个整型数值,这个数值为任意(因为main后面是void)。 但是上面的代码中并没有return语句,所以并不会返回任何值。加入return语句后便可消除警告。

1 / 加入return语句后的版本 /

2 #include

3 int main(void)

4 {

5 printf("Hello world!\n");

6 return 0;

7 }

如果是使用IDE中的编译器,且IDE版本比较新(如本人目前使用的Code:Blocks)即使没有return语句,编译器也不会生成警告信息。

2.思考下面的程序:

1 #include

2 int main(void)

3 {

4 printf("Parkinson's Law:\nWork expands so as to ");

5 printf("fill the time\n");

6 printf("available for its completion.\n");

7 return 0;

8 }

(a)请指出程序中的指令和语句。

(b)程序的输出是什么?

答:(a)给出的程序中有一个指令#include和三条printf语句和一条return语句组成。

  (b)程序的输出结果为

Parkinson's Law:

Work expands so as to fill the time

available for its completion.

2.4节

3.通过下列方法缩写程序dweight.c: (1)用初始化式替换对变量height、length和width的赋值;(2)去掉变量weight,在最后的printf语句中计算(volume + 165)/ 166。

答:

1 #include

2 int main(void)

3 {

4 / 用初始化替代对变量赋值就是在声明变量时直接为其赋值 /

5 int height = 8, length = 12, width = 10, volume = height length width;

6 printf("Dimensions: %dx%dx%d\n", length, width, height);

7 printf("Volume (cubic inches): %d\n", volume);

8 / 此处则省略原来对于weight,并将计算公式直接放入printf语句中 /

9 printf("Dimensional weight (pounds): %d\n", (volume + 165) / 166);

10 return 0;

11 }

4.编写一个程序来声明几个int型和float型变量,不对这些变量进行初始化,然后直接显示它们的值。这些值是否有规律?(通常情况下没有)。

答:

1 #include

2 int main(void)

3 {

4 int a, b, c;

5 float e, f, g;

6 printf("a:%d\nb:%d\nc:%d\ne:%f\n%f:f\ng:%f\n"a, b, c, d, e, f, g);

7 return 0;

8 }

实际上并没有什么规律,上面这些变量既没有被初始化也没有在程序中被赋值,这时变量被显示出来的值取决于许多因素,所以无法确定最终显示的结果。

2.7节

5.判断下列C语言标识符哪些不是合法的?

(a) 100_bottles

(b) _100_bottles

(c) one_hundred_bottles

(d) bottles_by_thehundred

答:不合法的标识符只有(a),因为标识符只能以字母或下划线开头,而100_bottles是以数字开头的,所以不会发。另外C语言还规定了下划线后跟一个大写字母是保留字,不应该在程序中使用(书中后面有提及)。

6.为什么说在标识符中使用多个相邻的下划线(如current_balance)不太合适?

答:因为在阅读程序时很难分清到底有几个相邻的下划线,如current__balance和current_balance,前者是4个下划线后者是5个下划线。在未来维护程序时不论是编写者本人还是他人,都容易弄混下划线的数量,造成不必要的混乱。

7.判断下列哪些是C语言的关键字?

(a) for

(b) If

(c) main

(d) printf

(e) while

答:只有(a)for和(e)while是关键字,其余全都不是。(b) If 是因为C语言区分大小写,所以If和if并不相同,if是关键字但是If不是。(c)main和(d)printf也不是关键字,main()函数是C语言自动调用的函数,但是我们依旧可以将变量命名为main(不建议这样做)。printf()则是我们头文件内包含的函数,如果不调用这个头文件那么我们一样可以将变量命名为printf。总的来说只有在关键字表里的单词才是关键字,其余都不是关键字。

2.8节

8.下面的语句中有多少个记号?

 answer=(3q-pp)/3;

答:14个记号,分别是answer、=、(、3、、q、-、p、、p、)、/、3、;。

9.在练习题8的记号之间插入空格,使该语句更易于阅读。

答:answer = (3 q - p p) / 3//代码效果参考:http://www.zidongmutanji.com/zsjx/3761.html

;

10.在dweight.c程序(2.4节)中,哪些空格是必不可少的?

答:程序当中出现两次的int后面空格不能少,return 0; 中间的空格不能少。程序其他部分的空格都是为了易于阅读而存在的,即使可去掉程序本身依旧能够正常执行,只是增加了阅读困难。

编程题

1.编写一个程序,使用printf在屏幕上显示下面的图形:

答:

1 #include

2

3 int main(void)

4 {

5 printf(" \n");

6 printf(" \n");

7 printf(" \n");

8 printf(" \n");

9 printf(" \n");

10 printf(" \n");

11

12 return 0;

13 }

2.编写一个计算球体体积的程序,其中球体半径为10m,参考公式v=4/3πr 3。注意,分数4/3应写为4.0f/3.0f。(如果分数写成4/3会产生什么结果?)提示:C语言没有指数运算符,所以需要对r自乘两次来计算r 3。

答:

1 #include

2 / 定义名为PI和SCALE_FACTOR的宏 /

3 #define PI 3.14f

4 #define SCALE_FACTOR 4.0f/3.0f

5

6 int main(void)

7 {

8

9 / 声明变量并对其初始化,r是半径,volume为计算结果,r_3是r的立方结果 /

10 float r = 10.0f;

11 float volume = 1.0f;

12 float r_3 = 0.0f;

//代码效果参考:http://www.zidongmutanji.com/zsjx/193341.html

13

14 / 计算半径为10m的球体体积 /

15 r_3 = rrr;

16 volume = SCALE_FACTOR PI r_3;

17

18 / 显示结果 /

19 printf("Result is:%f\n", volume);

20

21 return 0;

22 }

如果把分数4.0f/3.0f编程4/3,则会导致计算结果出现错误,因为4/3的结果是1,而不是1.33333333。C语言中整数相除会舍掉后面的小数。

3.修改上题中的程序,使用户可以自行录入球体的半径。

答:

1 #include

2 / 定义名为PI和SCALE_FACTOR的宏 /

3 #define PI 3.14f

4 #define SCALE_FACTOR 4.0f/3.0f

5

6 int main(void)

7 {

8

9 / 声明变量并对其初始化,r是半径,volume为计算结果,r_3是r的立方结果 /

10 float r = 1.0f;

11 float volume = 1.0f;

12 float r_3 = 0.0f;

13

14 / 输入球体半径,注意变量r前面要有符号 /

15 printf("Enter number:");

16 scanf("%f", r);

17

18 / 计算半径为10m的球体体积 /

19 r_3 = rrr;

20 volume = SCALE_FACTOR PI r_3;

21

22 printf("Result is:%f\n", volume);

23

24 return 0;

25 }

4.编写一个程序,要求用户输入一个美元数量//代码效果参考:http://www.zidongmutanji.com/bxxx/255622.html

,然后显示出增加5%税率后的相应金额。格式如下所示:

Enter an amount: 100.00

With tax added: $105.00

答:

1 #include

2

3 int main(void)

4 {

5 / 声明变量money和taxed_money并初始化,前者表示金额,后者表示税后的金额 /

6 float money = 0.0f;

7 float taxed_money = 0.0f;

8

9 / 金额录入 /

10 printf("Enter an amount:");

11 scanf("%f", money);

12

13 /计算税后的金额 /

14 taxed_money = money 1.05;

15

16 /显示结果,使用.2f是因为题目中税后的金额只保留了两位小数 /

17 printf("With tax added: $%.2f\n", taxed_money);

18

19 return 0;

20 }

5.编写要求用户输入x的值,然后显示如下多项式的值:

3x5+2x4-5x3-x2+7x-6

提示:C语言没有指数运算符,所以需要对x进行自乘来计算其幂。(例如,xxx就是x的三次方。)

答:

1 #include

2

3 int main(void)

4 {

5 / 声明并初始化变量x和计算结果result,选择float型是因为题目中没有说用户不能输入小数 /

6 float x = 0.0f;

7 float result = 0.0f;

8

9 / 用户输入x的值,然后将值写入变量x中 /

10 printf("Enter the value of x:");

11 scanf("%f", x);

12

13 / 计算公式的结果 /

14 result = 3 x x x x x + 2 x x x x - 5 x x x -x x + 7 * x - 6;

15

16 printf("The result is: %f", result);

17

18 return 0;

19 }

6.修改上题,用如下公式对多项式求值:

((((3x+2)x-5)x-1)x+7)x-6

注意,修改后的程序所需的乘法次数减少了。这种多项式求值方法即Horner法则(Horner's Rule)。

答:

1 #include

2

3 int main(void)

4 {

5 float x = 0.0f;

6 float result = 0.0f;

<span style="color

相关文章
|
26天前
|
存储 C语言
【C语言程序设计——函数】递归求斐波那契数列的前n项(头歌实践教学平台习题)【合集】
本关任务是编写递归函数求斐波那契数列的前n项。主要内容包括: 1. **递归的概念**:递归是一种函数直接或间接调用自身的编程技巧,通过“俄罗斯套娃”的方式解决问题。 2. **边界条件的确定**:边界条件是递归停止的条件,确保递归不会无限进行。例如,计算阶乘时,当n为0或1时返回1。 3. **循环控制与跳转语句**:介绍`for`、`while`循环及`break`、`continue`语句的使用方法。 编程要求是在右侧编辑器Begin--End之间补充代码,测试输入分别为3和5,预期输出为斐波那契数列的前几项。通关代码已给出,需确保正确实现递归逻辑并处理好边界条件,以避免栈溢出或结果
57 16
|
30天前
|
算法 C语言
【C语言程序设计——循环程序设计】求解最大公约数(头歌实践教学平台习题)【合集】
采用欧几里得算法(EuclideanAlgorithm)求解两个正整数的最大公约数。的最大公约数,然后检查最大公约数是否大于1。如果是,就返回1,表示。根据提示,在右侧编辑器Begin--End之间的区域内补充必要的代码。作为新的参数传递进去。这个递归过程会不断进行,直到。有除1以外的公约数;变为0,此时就找到了最大公约数。开始你的任务吧,祝你成功!是否为0,如果是,那么。就是最大公约数,直接返回。
73 18
|
25天前
|
存储 编译器 C语言
【C语言程序设计——函数】分数数列求和2(头歌实践教学平台习题)【合集】
函数首部:按照 C 语言语法,函数的定义首部表明这是一个自定义函数,函数名为fun,它接收一个整型参数n,用于指定要求阶乘的那个数,并且函数的返回值类型为float(在实际中如果阶乘结果数值较大,用float可能会有精度损失,也可以考虑使用double等更合适的数据类型,这里以float为例)。例如:// 函数体代码将放在这里函数体内部变量定义:在函数体中,首先需要定义一些变量来辅助完成阶乘的计算。比如需要定义一个变量(通常为float或double类型,这里假设用float。
34 3
|
25天前
|
存储 算法 安全
【C语言程序设计——函数】分数数列求和1(头歌实践教学平台习题)【合集】
if 语句是最基础的形式,当条件为真时执行其内部的语句块;switch 语句则适用于针对一个表达式的多个固定值进行判断,根据表达式的值与各个 case 后的常量值匹配情况,执行相应 case 分支下的语句,直到遇到 break 语句跳出 switch 结构,若没有匹配值则执行 default 分支(可选)。例如,在判断一个数是否大于 10 的场景中,条件表达式为 “num> 10”,这里的 “num” 是程序中的变量,通过比较其值与 10 的大小关系来确定条件的真假。常量的值必须是唯一的,且在同一个。
15 2
|
29天前
|
存储 编译器 C语言
【C语言程序设计——函数】回文数判定(头歌实践教学平台习题)【合集】
算术运算于 C 语言仿若精密 “齿轮组”,驱动着数值处理流程。编写函数求区间[100,500]中所有的回文数,要求每行打印10个数。根据提示在右侧编辑器Begin--End之间的区域内补充必要的代码。如果操作数是浮点数,在 C 语言中是不允许直接进行。的结果是 -1,因为 -7 除以 3 商为 -2,余数为 -1;注意:每一个数据输出格式为 printf("%4d", i);的结果是 1,因为 7 除以 -3 商为 -2,余数为 1。取余运算要求两个操作数必须是整数类型,包括。开始你的任务吧,祝你成功!
49 1
|
30天前
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
57 23
|
30天前
|
算法 C语言
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
本文档介绍了如何编写两个子函数,分别求任意两个整数的最大公约数和最小公倍数。内容涵盖循环控制与跳转语句的使用、最大公约数的求法(包括辗转相除法和更相减损术),以及基于最大公约数求最小公倍数的方法。通过示例代码和测试说明,帮助读者理解和实现相关算法。最终提供了完整的通关代码及测试结果,确保编程任务的成功完成。
57 15
|
30天前
|
C语言
【C语言程序设计——函数】亲密数判定(头歌实践教学平台习题)【合集】
本文介绍了通过编程实现打印3000以内的全部亲密数的任务。主要内容包括: 1. **任务描述**:实现函数打印3000以内的全部亲密数。 2. **相关知识**: - 循环控制和跳转语句(for、while循环,break、continue语句)的使用。 - 亲密数的概念及历史背景。 - 判断亲密数的方法:计算数A的因子和存于B,再计算B的因子和存于sum,最后比较sum与A是否相等。 3. **编程要求**:根据提示在指定区域内补充代码。 4. **测试说明**:平台对代码进行测试,预期输出如220和284是一组亲密数。 5. **通关代码**:提供了完整的C语言代码实现
57 24
|
2月前
|
存储 C语言 开发者
【C语言】字符串操作函数详解
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
88 10
|
2月前
|
存储 程序员 C语言
【C语言】文件操作函数详解
C语言提供了一组标准库函数来处理文件操作,这些函数定义在 `<stdio.h>` 头文件中。文件操作包括文件的打开、读写、关闭以及文件属性的查询等。以下是常用文件操作函数的详细讲解,包括函数原型、参数说明、返回值说明、示例代码和表格汇总。
67 9

热门文章

最新文章