第2章练习题答案

习题1

答:

无论使用的是C89还是C99编译e1.c,都没有警告信息;
gcc -Wall -std=c89 -o e1 e1.c

习题2

答:

//输出为
Parkinson's Law:
Work expands so as tofill the time
available for the completion.

习题3

答:

#include <stdio.h>


/*
 * Copyright: 2020 by Author Liyang Hao
 * File name: e3.c
 * Description:《C语言:一种现代方法》第二章练习题3
 * Author: Liyang Hao
 * Date: 2020/04/12
 * 
 * 编译指令:
 * gcc -Wall -std=c89 -o e3 e3.c
 * gcc -Wall -std=c99 -o e3 e3.c
 */
int main(void)
{
    int height = 8, length = 12, width = 10, volume;

    volume = height * length * width;

    printf("Dimensions: %dx%dx%d\n", length, width, height);
    printf("Volume (cubic inches): %d\n", volume);
    printf("Dimensional weight (pounds): %d\n", (volume + 165) / 166);

    return 0;
}

习题4

#include <stdio.h>


/*
 * Copyright: 2020 by Author Liyang Hao
 * File name: e4.c
 * Description:《C语言:一种现代方法》第二章练习题4
 * Author: Liyang Hao
 * Date: 2020/04/12
 * 
 * 编译指令:
 * gcc -o e4 e4.c
 * gcc -Wall -std=c99 -o e4 e4.c
 */
int main(void)
{
    int i1, i2;
    float f1, f2;

    printf("Uninitialized int test: %d, %d\n", i1, i2);
    printf("Uninitialized float test: %f, %f\n", f1, f2);

    return 0;
}

如果使用gcc -wall -o e4 e4.c编译,则有警告信息生成:

e4.c:19:45: warning: variable 'i1' is uninitialized when used here [-Wuninitialized]
        printf("Uninitialized int test: %d, %d\n", i1, i2);
                                                   ^~
e4.c:16:8: note: initialize the variable 'i1' to silence this warning
        int i1, i2;
              ^
               = 0
e4.c:19:49: warning: variable 'i2' is uninitialized when used here [-Wuninitialized]
        printf("Uninitialized int test: %d, %d\n", i1, i2);
                                                       ^~
e4.c:16:12: note: initialize the variable 'i2' to silence this warning
        int i1, i2;
                  ^
                   = 0
e4.c:20:47: warning: variable 'f1' is uninitialized when used here [-Wuninitialized]
        printf("Uninitialized float test: %f, %f\n", f1, f2);
                                                     ^~
e4.c:17:10: note: initialize the variable 'f1' to silence this warning
        float f1, f2;
                ^
                 = 0.0
e4.c:20:51: warning: variable 'f2' is uninitialized when used here [-Wuninitialized]
        printf("Uninitialized float test: %f, %f\n", f1, f2);
                                                         ^~
e4.c:17:14: note: initialize the variable 'f2' to silence this warning
        float f1, f2;
                    ^
                     = 0.0

如果使用gcc -o e4 e4.c,则没有警告信息,多次执行编译后的程序,则输出值没有规律:

./e4
Uninitialized int test: 405852197, 32766
Uninitialized float test: -462842252054260350976.000000, 0.000000
➜  chapter2 ./e4
Uninitialized int test: 350928933, 32766
Uninitialized float test: -413554857732317642752.000000, 0.000000
➜  chapter2 ./e4
Uninitialized int test: 311894053, 32766
Uninitialized float test: -283615000784469614185676800.000000, 0.000000
➜  chapter2 ./e4
Uninitialized int test: 327925797, 32766
Uninitialized float test: -6518313815769896594702336.000000, 0.000000
➜  chapter2 ./e4
Uninitialized int test: 204394533, 32766
Uninitialized float test: -1984347388889560852201472.000000, 0.000000
➜  chapter2 ./e4
Uninitialized int test: 91361317, 32766
Uninitialized float test: -29658463795810108671581487104.000000, 0.000000

习题5

不合法的标识符有:100_bottles

习题6

答:很多C的库代码在实现时为了避免与使用者定义的全局符号同名,都采用了双下划线下划线加大写字母开头之类的怪异命名法,所以要避开这些名字,以减少名字冲突的风险。

习题7

答:forwhile

习题8

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

涉及的token有:

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

共14个。

习题9

书写规范:

  • 在tokens之间放入空格符,比如在运算符前后放一个空格符等
a = (3 * q - p * p) / 3;

习题10

源文件dweight.c

#include <stdio.h>

int main(void)
{
    int height, length, width, volume, weight;

    height = 8;
    length = 12;
    width = 10;
    volume = height * length * width;
    weight = (volume + 165) / 166;

    printf("Dimensions: %dx%dx%d\n", length, width, height);
    printf("Volume (cubic inches): %d\n", volume);
    printf("Dimensional weight (pounds): %d\n", weight);

    return 0;
}

参考资料:

  1. http://knking.com/books/c2/answers/c2.html
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,492评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,048评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,927评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,293评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,309评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,024评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,638评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,546评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,073评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,188评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,321评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,998评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,678评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,186评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,303评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,663评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,330评论 2 358

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,348评论 0 2
  • 英文原版:P9 这一章介绍了编写最简单程序所需的基本概念,包括预处理指令preprocessing directi...
    橡树人阅读 177评论 0 4
  • 动态链接,在可执行文件装载时或运行时,由操作系统的装载程序加载库。大多数操作系统将解析外部引用(比如库)作为加载过...
    小5筒阅读 5,512评论 0 3
  • 来自陈浩的一片老文,但绝对营养。 示例工程:3 个头文件*.h,和 8 个 C 文件*.c。 初 编译过程,源文件...
    周筱鲁阅读 4,698评论 0 17
  • @synthesize和@dynamic分别有什么作用?@property有两个对应的词,一个是 @synthes...
    笔笔请求阅读 516评论 0 1