当前位置:必发365电子游戏 > 编程 > 自个儿在经过《C语言程序设计
自个儿在经过《C语言程序设计
2019-12-19

前言

本身在经过《C语言程序设计:今世艺术(第2版)》自学C语言时,发掘境内并不曾该书完整的课后演习答案,所以就想把温馨在求学进程中所做出的答案分享出去,以供大家参照他事他说加以考察。那么些答案是本身自身解答,并参照他事他说加以侦查GitHub上有关的分享和Chegg.com相关资料。因为并未权威的答案来源,所以恐怕会设有不当的地点,如有错误还指望大家能够支持提出。

其次章练习题和编制程序题答案

练习题

2.2节

1.起家并启动由Kernighan和Ritchie编写的显赫的“hello world”程序:

1 #include <stdio.h>
2 int main(void)
3 {
4     printf("hello world!n");
5 }

在编写翻译时是还是不是有警报音信?如若有,需求哪些改正呢?

答:若是利用一些可比老的编写翻译器如turbo C等,会生成警报音讯,提议main函数并不曾回去任何值。这是因为在注明main函数时利用了int,申明函数会重临多个整型数值,那么些数值为专擅(因为main后边是void)。 可是地方的代码中并从未return语句,所以并不会回到任何值。参与return语句后便可消释警示。

1 /* 加入return语句后的版本 */
2 #include <stdio.h>
3 int main(void)
4 {
5     printf("Hello world!n");
6     return 0;
7 }

若是是选用IDE中的编译器,且IDE版本比较新(如小编最近应用的Code:Blocks)纵然未有return语句,编写翻译器也不会生成警示音讯。

2.理念下边包车型大巴程序:

1 #include <stdio.h>
2 int main(void)
3 {
4     printf("Parkinson's Law:nWork expands so as to ");
5     printf("fill the timen"); 
6     printf("available for its completion.n");
7     return 0;
8 }

(a卡塔尔(英语:State of Qatar)请提议程序中的指令和语句。

(b卡塔尔(قطر‎程序的出口是怎么?

答:(a卡塔尔(قطر‎给出的前后相继中有一个限令#include和三条printf语句和一条return语句组成。

  (b卡塔尔(英语:State of Qatar)程序的输出结果为

Parkinson's Law:

Work expands so as to fill the time

available for its completion.

2.4节

必发365电子游戏,3.由此下列格局缩写程序dweight.c: (1)用开首化式替换对变量height、length和width的赋值;(2)去掉变量weight,在最后的printf语句中总结(volume

答:

 1 #include <stdio.h>
 2 int main(void)
 3 {
 4     /* 用初始化替代对变量赋值就是在声明变量时直接为其赋值 */
 5     int height = 8, length = 12, width = 10, volume = height * length * width;
 6     printf("Dimensions: %dx%dx%dn", length, width, height);
 7     printf("Volume (cubic inches): %dn", volume);
 8     /* 此处则省略原来对于weight,并将计算公式直接放入printf语句中 */
 9     printf("Dimensional weight (pounds): %dn", (volume + 165) / 166);
10     return 0;
11 }

4.编制八个前后相继来声称多少个int型和float型变量,不对这个变量进行早先化,然后直接显示它们的值。这个值是不是有规律?(平常状态下未有)。

答:

1 #include <stdio.h>
2 int main(void)
3 {
4     int a, b, c;
5     float e, f, g;
6     printf("a:%dnb:%dnc:%dne:%fn%f:fng:%fn"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_the_hundred_

答:不合规的标记符唯有(a卡塔尔,因为标记符只好以字母或下划线早先,而100_bottles是以数字初始的,所以不会发。此外C语言还鲜明了下划线后跟二个大写字母是保留字,不该在前后相继中应用(书中后边有提起)。

6.为啥说在标记符中使用多少个相邻的下划线(如current___balance卡塔尔(英语:State of Qatar)不太方便?

答:因为在阅读程序时很难分清到底有多少个相邻的下划线,如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卡塔尔(英语:State of Qatar)printf亦非珍视字,main(卡塔尔(قطر‎函数是C语言自动调用的函数,可是大家仍是可以够将变量命名称叫main(不建议那样做)。printf(卡塔尔(英语:State of Qatar)则是大家头文件<stdio.h>内满含的函数,假使不调用这一个头文件那么我们雷同可以将变量命名称叫printf。总之独有在根本字表里的单词才是主要字,别的都不是主要字。

2.8节

8.底下的话语中有多少个标记?

 answer=(3*q-p*p)/3;

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

9.在操演题8的符号之间插入空格,使该语句更便于阅读。

答:answer = (3 * q - p * p) / 3;

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

答:程序个中现身三次的int前面空格不可能少,return 0; 中间的空格不能够少。程序其余一些的空格皆认为了便于阅读而存在的,纵然可去掉程序本人仍可以够健康实践,只是扩张了翻阅困难。

编程题

1.编写制定三个程序,使用printf在荧屏上展现下边包车型大巴图样:

       *

      *

     *

*   *

 * *

  *

答:

 1 #include <stdio.h>
 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 ³。注意,分数4/3应写为4.0f/3.0f。(假设分数写成4/3会发出怎么样结果?)提醒:C语言未有指数运算符,所以必要对r自乘若干遍来计量r ³。

答:

 1 #include <stdio.h>
 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;
13 
14 /* 计算半径为10m的球体体积 */
15     r_3 = r*r*r;
16     volume = SCALE_FACTOR * PI * r_3;
17 
18 /* 显示结果 */
19     printf("Result is:%fn", volume);
20 
21     return 0;
22 }

 

假定把分数4.0f/3.0f编制程序4/3,则会产生总括结果现身错误,因为4/3的结果是1,并非1.33333333。C语言中整数相除会舍掉前边的小数。

3.改变上题中的程序,使客户能够活动录入球体的半径。

答:

 1 #include <stdio.h>
 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 = r*r*r;
20     volume = SCALE_FACTOR * PI * r_3;
21 
22     printf("Result is:%fn", volume);
23 
24     return 0;
25 }  

 

4.编纂叁个顺序,须求客商输入二个美金数量,然后彰显出增添5%税收的比率后的应和金额。格式如下所示:

Enter an amount: 100.00

With tax added: $105.00

答:

 1 #include <stdio.h>
 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: $%.2fn", taxed_money);
18 
19     return 0;
20 }

 5.编写须求顾客输入x的值,然后显示如下多项式的值:

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

升迁:C语言未有指数运算符,所以必要对x实行自乘来总括其幂。(例如,x*x*x正是x的三遍方。)

答:

 1 #include <stdio.h>
 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 <stdio.h>
 2 
 3 int main(void)
 4 {
 5     float x = 0.0f;
 6     float result = 0.0f;
 7 
 8     printf("Enter the value of x:");
 9     scanf("%f", &x);
10 
11 /* 修改后的计算公式 */
12     result = ((((3 * x + 2)* x - 5)* x - 1)* x + 7)* x - 6;
13 
14     printf("The result is: %f", result);
15 
16     return 0;
17 }

7.编纂二个顺序,须要客户输入二个欧元数量,然后展现出怎么样用起码的20澳元、10澳元、5法郎和1欧元来付款:

Enter a dollar amount: 93

$20 bills:4

$10 bills:1

  $5 bills:0

  $1 bills:3

答:

 1 #include <stdio.h>
 2 
 3 int main(void)
 4 {
 5 /* 声明并初始化金额总数amount和美元面额变量 */
 6     int amount = 0;
 7     int b20 = 0, b10 = 0, b05 = 0, b01 = 0;
 8 
 9     printf("Enter a dollar amount:");
10     scanf("%d", &amount);
11 
12 /* 因为要求是用最少张数付款,所以先用总金额除以20,得到的所需20美元的数量,再将总金额减去所需20美元后除以10,得到所需10美元数量,以此类推求出全部结果 */
13     b20 = amount / 20;
14     amount = amount - 20 * b20;
15     b10 = amount / 10;
16     amount = amount - 10 * b10;
17     b05 = amount / 5;
18     amount = amount - 5 * b05;
19     b01 = amount / 1;
20 
21 /* 显示结果 */
22     printf("n$20 bills:%dn$10 bills:%dn $5 bills:%dn $1 bills:%dn", b20, b10, b05, b01);
23 
24     return 0;
25 }

8.编制程序总计第生龙活虎、第二、第3个月还款后剩余的放债金额:

Enter amount of loan: 20000.00

自个儿在经过《C语言程序设计。Enter interest rate:6.0

Enter monthly payment:386.66

Balance remaining after first payment:$19713.34

Balance remaining after second payment:$19425.25

Balance remaining after third payment:$19135.71

在突显每一遍还款后的余额时要封存两位小数。提醒:各样月的放款余额减去还贷金额后,还必要丰裕贷款余额与年化率的乘积。年化率的精兵简政办法是把顾客输入的利率调换来都百货分数再除以12。

答:

 1 #include <stdio.h>
 2 
 3 int main(void)
 4 {
 5 /* 声明并初始化变量,loan是贷款金额,y_inter是年利率,m_inter月利率,m_pay是每月还款金额 */
 6     float loan = 0.0f;
 7     float y_inter = 0.0f;
 8     float m_inter = 0.0f;
 9     float m_pay = 0.0f;
10 
11 /* 用户输入贷款金额、年利率、月还款数 */
12     printf("Enter amount of loan: ");
13     scanf("%f", &loan);
14     printf("Enter interest rate: ");
15     scanf("%f", &y_inter);
16     printf("Enter monthly payment: ");
17     scanf("%f", &m_pay);
18 
19 /* 计算月利率,加1是因为如果直接是月利率乘以贷款金额得到的是利息,利息还要在加上贷款金额。加1之后可以直接求出贷款金额加利息后的结果 */
20     m_inter = y_inter / 100 / 12 + 1;
21 
22 /* 求出第一个月还款之后的剩余金额 */
23     loan = loan * m_inter - m_pay;
24     printf("Balance remaining after first payment: %.2fn", loan);
25 
26 /* 求出第二个月还款之后的剩余金额 */
27     loan = loan * m_inter - m_pay;
28     printf("Balance remaining after second payment: %.2fn", loan);
29 
30 /* 求出第三个月还款之后的剩余金额 */
31     loan = loan * m_inter - m_pay;
32     printf("Balance remaining after third payment: %.2fn", loan);
33 
34     return 0;
35 }
36 /* 题目中还款是等额本息的方式,贷款20000,年利率6%,一共贷款5年 */

 

 

上一篇:没有了
下一篇:没有了