狂人C 程序员入门必备PDF电子书下载
- 电子书积分:15 积分如何计算积分?
- 作 者:键盘农夫著
- 出 版 社:北京:人民邮电出版社
- 出版年份:2010
- ISBN:9787115236494
- 页数:482 页
第1篇 理解程序设计 1
第1章 基础知识 2
1.1什么是编程 3
1.1.1计算机如何工作 3
1.1.2内存中的程序是哪里来的 4
1.1.3可执行文件的制作 5
1.1.4 C语言的演化 6
1.2怎样用C语言编程 7
1.2.1学习C语言编程都需要什么 7
1.2.2最简单的C语言程序的基本结构 8
1.2.3Dev C﹢﹢ 9
1.3printf()函数初步 13
1.3.1简单的一般用法 13
1.3.2特殊的字符 13
1.4C语言的“字母”和“单词” 14
1.4.1 C语言的“字母” 14
1.4.2 C语言的“词” 15
小结 18
概念与术语 18
风格与习惯 19
常见错误 19
牛角尖 19
练习与自测 20
第2章 数据类型 23
2.1什么是数据类型 24
2.1.1“三个世界”理论 24
2.1.2问题世界:“万物皆数” 24
2.1.3代码世界:书写规则及含义 24
2.1.4机器世界里的“机器数” 25
2.1.5输出问题 27
2.1.6计算2的1到10次幂 28
2.1.7代码质量的改进 29
2.2让程序记住计算结果——变量 31
2.2.1计算机的记忆功能 31
2.2.2在代码中实现“记忆” 32
2.3int类型——总结与补充 35
2.3.1计算机表示负整数的几种方法 35
2.3.2计算机码制和C语言的关系 36
2.3.3暂时不必关心的一些细节 37
2.3.4int类型值的范围 37
2.3.5int类型常量在代码中的其他写法 38
2.3.6Dev C﹢﹢中int类型的机器数 38
2.4对数据类型的进一步讨论 39
2.4.1int数据类型的运算 40
2.4.2数学公式与数据类型 43
2.4.3数据类型——代码与编译器的约定 44
2.5莫名其妙的“整型” 45
2.5.1unsigned int类型 45
2.5.2long、short关键字描述的整数类型 46
2.5.3没有常量的char类型 47
2.5.4其他 51
2.6浮点类型 51
2.6.1 double类型常量的代码书写规则 51
2.6.2浮点类型数据存储模型 52
2.6.3浮点类型的一些特性 53
2.6.4浮点类型的运算 55
2.6.5 浮点类型的输出及其他 55
2.7数据类型与算法 57
2.7.1错误的数据类型 57
2.7.2所谓算法 58
2.7.3一个技巧 59
2.7.4更高效率的写法 59
2.8算法的特性 61
小结 61
概念与术语 61
风格与习惯 63
常见错误 63
牛角尖 63
练习与自测 64
第3章 运算符、表达式及语句 66
3.1 C的“动词”及“动词”的“宾语” 67
3.2表达式——C语言的“词组” 67
3.2.1初等表达式 67
3.2.2被误解的“()” 67
3.2.3带运算符的表达式 68
3.2.4不像表达式的表达式 68
3.2.5表达式:专业与副业 68
3.2.6赋值运算符左侧的标识符称为左值 69
3.2.7函数调用是表达式不是语句 69
3.3谁是谁的谁 71
3.3.1流行的谬误:优先级决定运算次序 71
3.3.2“左结合性”是运算对象先与左面的运算符相结合吗 72
3.3.3运算符、表达式小结 72
3.4右值的类型转换 74
3.4.1明确写出的显式转换——cast运算 75
3.4.2 cast运算的规则 75
3.4.3 赋值中的转换 77
3.4.4 1﹢1.0=? 77
3.4.5算术转换:早已废弃的规则和依然有效的规则 78
3.5语句的概念 81
3.5.1关于语句的闲话 81
3.5.2空语句有两种 82
3.5.3表达式语句 83
3.5.4顺序结构 83
3.5.5复合语句 84
3.6例题 84
3.6.1简单的类型转换 84
3.6.2最基础的算法——交换变量的值 85
3.6.3编程不是列公式 86
3.7算法和数据结构初窥 88
3.8在程序运行时提供数据 90
小结 91
概念与术语 91
风格与习惯 92
常见错误 93
牛角尖 93
练习与自测 93
第4章 选择语句 95
4.1关系运算 96
4.1.1“<”的数学含义及代码含义 96
4.1.2 4种关系运算符 96
4.1.3常见误区及与常识不符的结果 96
4.2 if语句 97
4.2.1语法格式及含义 97
4.2.2例题 97
4.2.3()内的表达式 100
4.2.4()后面的语句 100
4.3判等运算 104
4.4表达复杂的条件 106
4.5 if—else语句 107
4.6鸡肋——Bool类型(C99) 109
4.7判断三角形种类 111
4.8显得很有学问的运算符 117
4.9大师如是说goto 118
4.10给程序更多选项——switch语句 119
4.10.1 switch语句的一种应用形式 119
4.10.2 switch语句中的break语句 122
4.11程序开发的过程 124
小结 127
概念与术语 127
风格与习惯 127
常见错误 128
牛角尖 128
练习与自测 129
第5章 从循环到穷举 130
5.1造句:当就 131
5.1.1语法要素 131
5.1.2猴子吃桃问题更简洁的写法 133
5.1.3错误的循环变量 134
5.1.4次数不定的循环 135
5.1.5逗号表达式及其应用 136
5.2 do—while语句 138
5.2.1语法要素 138
5.2.2例题 139
5.3 for语句 140
5.3.1语法要素 140
5.3.2“﹢﹢”之惑 142
5.3.3 for语句应用 146
5.4不规则的循环及对循环的修整 150
5.4.1循环语句中的break语句 150
5.4.2 continue语句 151
5.5循环的嵌套与穷举法 151
5.5.1循环的嵌套 151
5.5.2穷举法 154
小结 157
概念与术语 157
风格与习惯 158
常见错误 158
牛角尖 159
练习与自测 159
第2篇 结构化程序设计与简单的数据结构 161
第6章 最复杂的运算符——“()” 162
6.1什么是函数 163
6.2步骤1:函数的声明 163
6.3步骤2:函数的定义 165
6.3.1函数定义的结构 165
6.3.2函数定义的位置 165
6.3.3函数头的写法、形参 165
6.3.4函数体的写法、return关键字 166
6.4步骤3:函数的调用 167
6.5程序的执行过程 168
6.6例题——为什么使用函数 170
6.7使用函数小结 171
6.7.1使用函数的步骤和方法 171
6.7.2常见问题 171
6.8函数与结构化程序设计 174
6.8.1明确程序功能 174
6.8.2确定程序的基本框架 175
6.8.3设计数据结构和算法 176
6.8.4任务的分解及函数原型 178
6.8.5完成函数定义 178
6.8.6 编程的步骤 180
6.8.7代码结构 180
6.9变量的作用域 181
6.10递归 182
6.10.1什么是递归 182
6.10.2递归是函数对自身的调用 183
6.10.3 递归的实现过程 184
6.10.4递归与循环 186
6.10.5递归的力量——Hanoi塔问题 187
6.10.6间接递归 190
6.11对局部变量的进一步修饰 190
6.11.1几乎一直是摆设的关键字——auto 191
6.11.2 static类别的局部变量 192
6.12使用库函数 193
6.13inline关键字(C99) 195
小结 196
概念与术语 196
风格与习惯 197
忠告 197
牛角尖 198
练习与自测 198
第7章 作为类型说明符和运算符的“[]” 199
7.1使用数组 200
7.1.1老式的解决办法 200
7.1.2首先要定义数组 200
7.1.3如何称呼数组中的各个数据对象 200
7.1.4完整的演示 201
7.2深入理解数组 202
7.2.1数组是一种数据类型 202
7.2.2数组定义的含义 202
7.2.3数组名是什么 203
7.2.4一维数组元素的引用 203
7.2.5数组元素引用是一个表达式 204
7.2.6数组名有值吗 204
7.2.7重复一遍 204
7.3熟练应用一维数组 205
7.3.1一维数组的遍历 205
7.3.2翻卡片问题 206
7.3.3筛法 207
7.3.4一维数组元素的赋初值 208
7.4数组名做实参 209
7.4.1数组名的值究竟是什么 209
7.4.2对应的形参 209
7.4.3调用原理 210
7.4.4不可以只有数组名这一个实参 210
7.4.5 const关键字 211
7.4.6例题——冒泡法排序 213
7.4.7测试与调试技巧——使用文件输入输出 215
7.5多维数组 216
7.5.1二维数组的定义 216
7.5.2二维数组元素的赋初值 218
7.5.3二维数组元素的引用和遍历 218
7.5.4更高维的数组 219
7.5.5生命游戏(Game of Life) 220
小结 225
概念与术语 225
风格与习惯 226
常见错误 226
牛角尖 226
练习与自测 227
第8章结构体、共用体与位运算 228
8.1结构体 229
8.1.1从一个简单例题说起 229
8.1.2声明结构体的类型 230
8.1.3定义结构体变量 231
8.1.4结构体数据的基本运算 231
8.1.5结构体变量赋初值及成员值的输入问题 233
8.1.6结构体“常量”(C99) 234
8.1.7一个不太专业的技巧 235
8.1.8结构体的其他定义方式及无名的结构体 236
8.2C语言中复数类型的历史和现状 237
8.2.1借助struct描述的复数类型 237
8.2.2-Complex、-Imaginary关键字(C99) 238
8.3共用体union 240
8.3.1概述 240
8.3.2对double类型的解析 241
8.4位运算 242
8.4.1位运算符 243
8.4.2更节省空间的筛法 248
8.5“小的变量”——位段 251
8.5.1位段概述 251
8.5.2如何定义位段 252
8.5.3位段的性质 252
8.5.4按二进制输出float类型数据 252
8.5.5对齐等问题 254
小结 254
概念 254
风格 256
常见错误 256
忠告 256
牛角尖 256
练习与自测 257
第9章 指针 258
9.1指针是什么 259
9.1.1指针是一类数据类型的统称 259
9.1.2指针是派生数据类型 259
9.1.3指针是一类数据的泛称 259
9.1.4指针专用的类型说明符——“*” 260
9.1.5指针的分类 260
9.2指向数据对象的指针 260
9.2.1什么是“数据对象” 260
9.2.2一元“&”运算 261
9.2.3数据指针变量的定义 263
9.2.4指针的赋值运算 264
9.2.5不是乘法的“*”运算 264
9.3指针的应用与误用 266
9.3.1指针有什么用 266
9.3.2C代码中的“×××到此一游” 268
9.3.3分桔子问题 268
9.4指针与一维数组 270
9.4.1数据指针与整数的加减法 270
9.4.2数据指针的减法 272
9.4.3数据指针的关系运算 272
9.4.4数据指针的判等运算 273
9.4.5“[]”运算 273
9.4.6数组名是指针 274
9.4.7数组名不仅仅是指针 275
9.4.8指向数组的指针 277
9.4.9与数组名对应的形参 278
9.5指针的应用(二) 279
9.6高维数组名 281
9.6.1高维数组名是指针 281
9.6.2高维数组名是内存 283
9.6.3“a[0]”或“*a”的含义 284
9.6.4数组与指针关系总结 285
9.6.5例题 285
9.7变量长度数组——VLA(C99) 87
9.7.1简述 287
9.7.2变量修饰类型(Variably modified type) 289
9.7.3变量长度数组与函数参数 290
9.8数组类型的字面量(C99) 291
9.9指针与结构体 292
9.9.1类型问题 292
9.9.2通过指针读写结构体的成员 293
9.10指针与函数 294
9.10.1函数名是指针 294
9.10.2指向函数指针的性质 295
9.10.3指向函数指针的运算 296
9.10.4例题 296
9.11指向虚无的指针 298
9.12参数不确定的函数 299
9.12.1printf()的函数原型 299
9.12.2“…”是什么 299
9.12.3实现原理 299
9.12.4标准形式 302
小结 303
概念与术语 303
常见错误 304
风格 304
牛角尖 304
练习与自测 305
第10章 字符串、字符数组及指向字符的指针 306
10.1字符串文字量 307
10.2字符串的输入与存储 309
10.2.1为输入的字符串准备存储空间 309
10.2.2 puts()函数 310
10.2.3字符数组的初始化 310
10.3例题 310
10.3.1求字符串长度 310
10.3.2比较两个字符串的大小 311
10.3.3 scanf中的转换 313
10.3.4字符处理库函数 316
10.4形参说明符“[]”里的修饰符(C99) 316
10.5常用的字符串函数 317
10.5.1字符串操作函数 317
10.5.2 sscanf、sprintf()函数 318
10.5.3 restrict关键字(C99)及memcpy()函数集 319
10.5.4字符串转换函数 320
10.6main()的参数 320
10.6.1指向指针的指针 320
10.6.2main()函数的第二种写法 321
10.7体现代码优美的数据类型——枚举类型 323
小结 325
概念 325
风格 326
常见错误 326
牛角尖 326
练习与自测 326
第3篇 复杂的数据结构、算法及其他话题 8
第11章 复杂的数据类型与算法 329
11.1 2222=0 330
11.2复杂数据类型的构造和解读 331
11.2.1数据类型的构造方法 331
11.2.2复杂数据类型的解读 335
11.2.3添乱的const等类型限定符 338
11.2.4 55555=19 338
11.3递归、穷举、回溯、排列 344
11.3.1 2、9、6能组成多少个两位数 344
11.3.2更自然地思考 345
11.3.3进一步的抽象和概括 347
11.3.4回溯法 348
11.3.5排列问题 352
11.4更自由地使用内存 356
11.4.1 100!=? 356
11.4.2老土的办法 356
11.4.3动态分配内存函数 358
11.4.4改进的方法 358
11.4.5 C99中的柔性数组成员(C99) 360
11.4.6进一步的思考 361
11.4.7用链表解决问题 362
11.5 typedef 364
小结 365
概念 365
风格 366
常见错误 366
忠告 366
牛角尖 366
练习与自测 367
第12章 程序的输入与输出 369
12.1面向文件的输入与输出 370
12.1.1把程序输出写入文件 370
12.1.2C程序怎样读文件 374
12.1.3格式化输入、输出的格式 375
12.1.4 fprintf()与printf()函数的等效性 379
12.2文卷、流、“FILE”及“FILE*” 380
12.2.1文卷(File) 380
12.2.2流(stream) 381
12.2.3“FILE”结构体 381
12.2.4FILE 381
12.2.5文本流和二进制流 382
12.2.6自动打开的流 383
12.2.7EOF 383
12.2.8其他几个用于文本文卷的I/O函数 383
12.3二进制文卷的读写 384
12.3.1二进制流 384
12.3.2用fwrite()写二进制文卷 384
12.3.3用fread()读二进制文卷 385
12.3.4feof()函数和ferror()函数 386
12.3.5讨论 388
12.4定位问题 388
12.4.1ftell()函数 388
12.4.2fseek()函数 388
12.4.3rewind()函数 388
12.4.4fgetpos()函数和fsetpos()函数 388
12.5制作素数表 389
小结 392
概念 392
常见错误 393
风格 393
牛角尖 393
练习与自测 393
第13章 程序组织与编译预处理 394
13.1简介 395
13.1.1一般特点 395
13.1.2预处理的几个阶段 395
13.2文件包含 396
13.3 Tic-Tac-Toe游戏 397
13.3.1分割——思考、手段和意义 397
13.3.2总结 401
13.3.3回到起点 403
13.3.4“走两步” 404
13.3.5重复#include的问题 405
13.3.6如何处理测试用的代码 406
13.3.7再次回到起点 408
13.3.8抽象的棋盘 408
13.4重新开始 409
13.4.1明确任务 409
13.4.2程序功能的初步定义 409
13.4.3输出 411
13.4.4抽签 412
13.5宏定义与宏替换 416
13.5.1类似对象的宏 416
13.5.2把东西都塞到柜子里去 417
13.5.3类似函数的宏 419
13.5.4显示空的棋盘 422
13.6使用外部变量 423
13.6.1外部变量 423
13.6.2外部变量的应用 426
13.7走棋 427
13.7.1多态 428
13.7.2拼接单词 430
13.7.3 static函数 432
13.7.4完成“棋手”模块 432
13.7.5 抽象棋盘——对封装的模拟 434
13.7.6具象棋盘的处理 438
13.7.7反省与检讨 438
13.8预处理命令的其他话题 439
13.8.1再谈宏 439
13.8.2其他编译预处理命令 441
小结 442
概念 442
常见错误 444
风格 444
牛角尖 444
练习与自测 444
第14章 标准库简介 446
14.1使用标准库的一些常识 447
14.1.1标准头与标准头文件 447
14.1.2使用库的禁忌 448
14.1.3并存的宏与函数 448
14.1.4函数定义域问题 448
14.2对语言的补充 449
14.2.1标准定义stddef.h 449
14.2.2 iso646.h 450
14.2.3 limits.h和float.h 450
14.2.4 stdarg.h 450
14.2.5 stdbool.h(C99) 451
14.2.6 stdint.h(C99) 451
14.3stdio.h 452
14.3.1数据类型 452
14.3.2宏 452
14.3.3函数 453
14.4通用函数:stdlib.h 454
14.4.1数值转换 455
14.4.2系列伪随机数生成函数 455
14.4.3内存管理函数 456
14.4.4环境通信函数 456
14.4.5查找与排序函数 459
14.4.6整数算术函数 460
14.4.7多字节、宽字节字符 460
14.5inttypes.h(C99) 460
14.6string.h 462
14.7数值计算 462
14.7.1 math.h(C89) 462
14.7.2 math.h(C99) 463
14.7.3 complex.h(C99) 465
14.7.4 tgmath.h(C99) 465
14.7.5 fenv.h(C99) 465
14.8错误处理:errno.h 466
14.8.1 errno:一个左值 466
14.8.2 errno的值 467
14.9断言与调试:assert.h 468
14.10非本地跳转setjmp.h 468
14.11信号处理signal.h 470
14.12time.h 471
14.13国际化问题 475
14.13.1 locale.h 475
14.13.2 ctype.h与wctype.h(C99) 475
14.13.3 wchar.h 476
附录 477
附录A C语言的关键字 478
附录B C语言的数据类型 479
附录C ASCII表 480
附录D C语言运算符 481
参考文献 482
- 《HTML5从入门到精通 第3版》(中国)明日科技 2019
- 《少儿电子琴入门教程 双色图解版》灌木文化 2019
- 《弹好钢琴必备的五线谱知识》杨青华威武 2019
- 《区块链DAPP开发入门、代码实现、场景应用》李万胜著 2019
- 《Python3从入门到实战》董洪伟 2019
- 《程序逻辑及C语言编程》卢卫中,杨丽芳主编 2019
- 《高等学校“十三五”规划教材 C语言程序设计》翟玉峰责任编辑;(中国)李聪,曾志华,江伟 2019
- 《2017国家执业药师资格考试 全考点实战通关必备 中药学综合知识与技能 第3版》国家执业药师资格考试命题研究专家组 2017
- 《改革进程中的刑事诉讼程序与证据问题研究 基于警察的视角》谢波 2019
- 《小提琴入门新教程 第3册》王中男著 2018
- 《中风偏瘫 脑萎缩 痴呆 最新治疗原则与方法》孙作东著 2004
- 《水面舰艇编队作战运筹分析》谭安胜著 2009
- 《王蒙文集 新版 35 评点《红楼梦》 上》王蒙著 2020
- 《TED说话的力量 世界优秀演讲者的口才秘诀》(坦桑)阿卡什·P.卡里亚著 2019
- 《燕堂夜话》蒋忠和著 2019
- 《经久》静水边著 2019
- 《魔法销售台词》(美)埃尔默·惠勒著 2019
- 《微表情密码》(波)卡西亚·韦佐夫斯基,(波)帕特里克·韦佐夫斯基著 2019
- 《看书琐记与作文秘诀》鲁迅著 2019
- 《酒国》莫言著 2019
- 《指向核心素养 北京十一学校名师教学设计 英语 七年级 上 配人教版》周志英总主编 2019
- 《办好人民满意的教育 全国教育满意度调查报告》(中国)中国教育科学研究院 2019
- 《北京生态环境保护》《北京环境保护丛书》编委会编著 2018
- 《人民院士》吴娜著 2019
- 《指向核心素养 北京十一学校名师教学设计 英语 九年级 上 配人教版》周志英总主编 2019
- 《中国人民的心》杨朔著;夕琳编 2019
- 《高等院校旅游专业系列教材 旅游企业岗位培训系列教材 新编北京导游英语》杨昆,鄢莉,谭明华 2019
- 《中华人民共和国成立70周年优秀文学作品精选 短篇小说卷 上 全2册》贺邵俊主编 2019
- 《指向核心素养 北京十一学校名师教学设计 数学 九年级 上 配人教版》周志英总主编 2019
- 《中华人民共和国成立70周年优秀文学作品精选 中篇小说卷 下 全3册》洪治纲主编 2019