图书介绍
狂人C 程序员入门必备PDF|Epub|txt|kindle电子书版本网盘下载
![狂人C 程序员入门必备](https://www.shukui.net/cover/40/34613570.jpg)
- 键盘农夫著 著
- 出版社: 北京:人民邮电出版社
- ISBN:9787115236494
- 出版时间:2010
- 标注页数:482页
- 文件大小:176MB
- 文件页数:505页
- 主题词:C语言-程序设计
PDF下载
下载说明
狂人C 程序员入门必备PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第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大师如是说goto118
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几乎一直是摆设的关键字——auto191
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共用体union240
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=0330
11.2复杂数据类型的构造和解读331
11.2.1数据类型的构造方法331
11.2.2复杂数据类型的解读335
11.2.3添乱的const等类型限定符338
11.2.4 55555=19338
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 typedef364
小结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.4FILE381
12.2.5文本流和二进制流382
12.2.6自动打开的流383
12.2.7EOF383
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.h449
14.2.2 iso646.h450
14.2.3 limits.h和float.h450
14.2.4 stdarg.h450
14.2.5 stdbool.h(C99)451
14.2.6 stdint.h(C99)451
14.3stdio.h452
14.3.1数据类型452
14.3.2宏452
14.3.3函数453
14.4通用函数:stdlib.h454
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.h462
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.h466
14.8.1 errno:一个左值466
14.8.2 errno的值467
14.9断言与调试:assert.h468
14.10非本地跳转setjmp.h468
14.11信号处理signal.h470
14.12time.h471
14.13国际化问题475
14.13.1 locale.h475
14.13.2 ctype.h与wctype.h(C99)475
14.13.3 wchar.h476
附录477
附录A C语言的关键字478
附录B C语言的数据类型479
附录C ASCII表480
附录D C语言运算符481
参考文献482