图书介绍
手把手教你学C语言PDF|Epub|txt|kindle电子书版本网盘下载
- 吴明杰,曹宇,吴丹著 著
- 出版社: 北京:机械工业出版社
- ISBN:7111553076
- 出版时间:2016
- 标注页数:574页
- 文件大小:146MB
- 文件页数:589页
- 主题词:
PDF下载
下载说明
手把手教你学C语言PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第1章 为什么要学习C语言1
1.1 C的起源和发展1
1.1.1 计算机语言发展的三个阶段1
1.1.2 语言运行速度的比较3
1.1.3 C语言的演变过程3
1.2 C的特点4
1.2.1 C语言的优点4
1.2.2 C语言的缺点5
1.3 C的应用领域6
1.4 C的重要性6
1.5 本章总结7
第2章 怎样学习C语言8
2.1 学习C语言的心得8
2.2 学习C语言的目标9
2.3 常见问题答疑9
2.3.1 学习Java之前为什么建议先学C语言9
2.3.2 没学过计算机专业课程能够学懂C语言吗10
2.3.3 英语和数学不好能学好C语言吗10
2.4 本章总结11
第3章 Microsoft Visual C++ 6.0的使用12
3.1 为什么要学习VC++ 6.012
3.2 如何创建编程文件12
3.3 编写一个最简单的程序16
3.4 要养成时刻保存的习惯18
3.5 编译-链接-执行18
3.6 怎样运行第二个程序20
3.7 编译-链接-执行时保存路径下的文件夹有什么变化21
3.8 如何编写多文件程序23
3.9 如何用VC++ 6.0调试程序28
3.10 本章总结30
第4章 从一个程序走进C语言31
第5章 预备知识35
5.1 CPU、内存、硬盘、显卡、主板、显示器之间的关系35
5.1.1 电影是如何运行的35
5.1.2 CPU为什么不能直接操作硬盘却能直接操作内存35
5.1.3 内存的速度为什么比硬盘的速度快36
5.1.4 为什么不将内存造得跟硬盘一样大36
5.1.5 CPU是如何操作内存的36
5.1.6 主板的作用37
5.2 HelloWorld程序是如何运行起来的37
5.3 字节38
5.3.1 什么是字节38
5.3.2 字节换算38
5.3.3 小结38
5.4 进制39
5.4.1 什么是进制39
5.4.2 进制转换口算法40
5.4.3 进制转换公式法41
5.4.4 人类为什么最习惯用十进制44
5.4.5 计算机为什么用的是二进制44
5.4.6 小结44
5.5 数据类型45
5.5.1 数据类型的分类45
5.5.2 基本数据类型及其所占的字节数46
5.6 常量48
5.6.1 整型常量49
5.6.2 浮点型常量49
5.6.3 字符型常量51
5.7 常量是以什么样的二进制代码存储在计算机中的51
5.8 补码52
5.8.1 原码和反码52
5.8.2 补码的两个核心问题53
5.8.3 int型变量所能存储的范围55
5.8.4 int型和char型变量是如何相互赋值的56
5.9 什么是ASCII57
5.10 变量58
5.10.1 如何定义变量58
5.10.2 变量的本质61
5.10.3 为什么要使用变量62
5.10.4 变量的命名规则62
5.10.5 为什么必须要初始化变量63
5.10.6 小结66
5.11 各类型数据之间的混合运算66
5.12 代码规范化68
5.12.1 代码如何写才能规范68
5.12.2 代码规范化的好处68
5.12.3 代码规范化的七大原则69
5.12.4 小结72
5.13 本章总结72
第6章 printf的用法73
6.1 printf的格式74
6.2 输出控制符76
6.3 6136f0、0、0x4c2704、0X20332E36的区别76
6.4 如何输出“6371056”、“”和双引号77
6.5 本章总结78
第7章 scanf的用法79
7.1 概述79
7.2 使用scanf的注意事项82
7.2.1 参数的个数一定要对应82
7.2.2 输入的数据类型一定要与所需要的数据类型一致83
7.2.3 在使用scanf之前使用printf提示输入85
7.3 本章总结86
第8章 运算符和表达式87
8.1 算术运算符87
8.2 关系运算符89
8.3 逻辑运算符90
8.4 赋值运算符93
8.5 运算符的优先级94
8.6 本章总结95
第9章 选择结构程序设计96
9.1 流程控制96
9.1.1 什么是流程控制96
9.1.2 流程控制的分类96
9.2 选择执行的定义和分类97
9.3 if语句97
9.3.1 if的最简单用法97
9.3.2 if的控制范围问题99
9.3.3 if…else的用法100
9.3.4 if…else if…else的用法103
9.3.5 练习——求分数的等级104
9.3.6 练习——三个整数从小到大排序107
9.3.7 if的常见问题解析110
9.4 switch语句113
9.5 本章总结115
第10章 循环控制117
10.1 循环执行的定义和分类117
10.2 for循环117
10.2.1 for语句的格式117
10.2.2 自增和自减121
10.2.3 for循环编程练习122
10.2.4 for和if的嵌套使用122
10.2.5 强制类型转换125
10.2.6 浮点数的存储所带来的问题130
10.2.7 for循环的嵌套使用134
10.2.8 for循环嵌套编程练习136
10.3 while循环146
10.3.1 while的执行顺序146
10.3.2 while和for的比较147
10.3.3 如何看懂一个程序——“试数”148
10.3.4 do…while151
10.3.5 break和continue156
10.4 清空输入缓冲区158
10.4.1 输入缓冲区158
10.4.2 6371056和读取缓冲区的差别159
10.4.3 用scanf吸收回车161
10.4.4 getchar()163
10.4.5 fflush(stdin)166
10.5 本章总结168
第11章 数组169
11.1 一维数组的使用169
11.1.1 一维数组的定义169
11.1.2 一维数组的初始化170
11.1.3 一维数组元素的引用173
11.1.4 如何将数组a赋给数组b174
11.1.5 如何编程获取数组的长度175
11.1.6 练习177
11.1.7 宏定义:#define179
11.1.8 小结182
11.2 数组倒置算法182
11.3 数组查找算法184
11.3.1 顺序查找184
11.3.2 折半查找185
11.4 数组插入、删除算法188
11.4.1 插入算法188
11.4.2 删除算法189
11.5 数组排序算法190
11.5.1 冒泡排序190
11.5.2 插入排序193
11.5.3 选择排序196
11.5.4 快速排序198
11.5.5 四种排序算法的比较204
11.6 二维数组的使用205
11.6.1 二维数组的定义205
11.6.2 二维数组的初始化206
11.6.3 二维数组如何输出207
11.6.4 练习——杨辉三角208
11.6.5 是否存在多维数组213
11.7 本章总结213
第12章 函数215
12.1 概述215
12.1.1 什么是函数215
12.1.2 C程序的组成和编译单位216
12.1.3 库函数和自定义函数216
12.1.4 函数的调用216
12.2 为什么需要函数217
12.3 有参函数217
12.3.1 有参函数定义的一般形式218
12.3.2 形参和实参219
12.3.3 主调函数中对被调函数的声明220
12.3.4 定义函数时应指定返回值类型221
12.3.5 函数的返回值222
12.3.6 return是如何将值返回给主调函数的222
12.3.7 函数的命名规则223
12.3.8 练习——判断一个自然数是否是素数223
12.4 函数的递归调用227
12.4.1 什么是递归227
12.4.2 使用递归必须要满足的两个条件228
12.4.3 如何学习递归229
12.4.4 递归和循环的关系229
12.4.5 递归的优缺点229
12.4.6 练习——用递归求n的阶乘230
12.4.7 练习——用递归实现1+2+3+…+100的和232
12.4.8 练习——用递归求斐波那契数列233
12.4.9 练习——用递归求两个数的最大公约数234
12.4.10 小结235
12.5 数组名作为函数参数236
12.6 变量的作用域和存储方式238
12.6.1 局部变量239
12.6.2 全局变量240
12.6.3 为什么不建议使用全局变量242
12.6.4 自动变量(auto)242
12.6.5 静态变量(static)242
12.6.6 寄存器变量(register)245
12.6.7 外部变量(extern)246
12.7 本章总结248
第13章 指针249
13.1 指针的重要性249
13.2 地址和指针的概念250
13.3 指针和指针变量251
13.3.1 指针变量的定义252
13.3.2 指针变量的初始化254
13.3.3 指针常见错误257
13.4 指针作为函数参数260
13.4.1 互换两个数260
13.4.2 函数参数传指针和传数据的区别262
13.4.3 定义只读变量:const263
13.4.4 用const修饰指针变量时的三种效果264
13.5 指针和一维数组的关系266
13.5.1 用指针引用数组元素266
13.5.2 指针的移动267
13.5.3 指针变量的自增运算271
13.5.4 两个参数确定一个数组277
13.5.5 指针变量占多少字节279
13.6 函数、数组、指针相结合的程序练习280
13.7 动态内存分配282
13.7.1 传统数组的缺点282
13.7.2 malloc函数的使用(一)283
13.7.3 malloc函数的使用(二)286
13.7.4 free函数的使用289
13.7.5 练习——动态数组的构建291
13.7.6 动态数组长度的扩充和缩小294
13.7.7 静态内存分配和动态内存分配小结296
13.7.8 多级指针296
13.7.9 跨函数使用动态内存298
13.8 通过指针引用二维数组302
13.8.1 二维数组元素的地址302
13.8.2 二维数组的首地址和数组名303
13.8.3 练习307
13.9 函数指针309
13.9.1 什么是函数指针309
13.9.2 如何用函数指针调用函数310
13.10 本章总结311
第14章 字符串313
14.1 字符串常量313
14.2 不能将一个字符串常量赋给一个字符变量314
14.3 字符数组315
14.3.1 字符数组的定义315
14.3.2 字符数组的初始化315
14.3.3 初始化内存函数:memset()318
14.3.4 用scanf输入字符串320
14.4 字符串与指针322
14.5 如何用scanf给字符指针变量所指向的内存单元初始化323
14.6 字符串处理函数324
14.6.1 字符串输入函数gets()324
14.6.2 优先使用fgets()函数326
14.6.3 使用gets()和fgets()前注意吸收回车329
14.6.4 练习——判断字符串是否是回文字符串331
14.6.5 练习——将字符串中的小写字母转换成大写字母336
14.6.6 字符串输出函数puts()337
14.6.7 字符串输出函数fputs()339
14.6.8 字符串复制函数strcpy()341
14.6.9 字符串复制函数strncpy()343
14.6.10 内存拷贝函数memcpy()343
14.6.11 sprintf()345
14.6.12 字符串比较函数strcmp()347
14.7 本章总结348
第15章 自定义数据类型——结构体350
15.1 为什么需要结构体350
15.2 定义和使用结构体变量351
15.2.1 声明结构体类型351
15.2.2 定义结构体类型变量352
15.2.3 结构体变量可进行哪些运算354
15.2.4 结构体变量的初始化——定义时初始化354
15.2.5 结构体变量的引用355
15.2.6 结构体变量的初始化——先定义后初始化358
15.2.7 结构体字节对齐363
15.3 结构体数组369
15.3.1 结构体数组的定义和引用369
15.3.2 结构体数组定义时初始化371
15.4 结构体指针372
15.4.1 指向结构体变量的指针372
15.4.2 指向结构体数组的指针375
15.5 结构体变量和结构体指针变量作为函数参数378
15.6 练习——动态构造存放学生信息的结构体数组382
15.7 本章总结385
第16章 链表387
16.1 为什么要学习链表387
16.1.1 数组的缺陷388
16.1.2 链表的优点388
16.2 链表的缺点389
16.3 链表相关术语389
16.4 链表的定义和分类390
16.4.1 链表的定义390
16.4.2 链表的分类390
16.5 编写一个链表程序391
16.6 练习——插入结点396
16.7 练习——删除结点404
16.8 练习——销毁链表409
16.9 链表排序算法413
16.9.1 如何互换结点413
16.9.2 链表冒泡排序414
16.9.3 链表插入排序418
16.9.4 链表选择排序421
16.9.5 链表快速排序422
16.9.6 链表排序小结425
16.10 单循环链表425
16.11 双向链表430
16.12 typedef的用法434
16.13 本章总结437
第17章 栈439
17.1 内存的分区439
17.2 线性表440
17.3 栈的定义441
17.4 栈的基本操作441
17.5 链栈程序演示442
17.6 栈的应用450
17.7 本章总结454
第18章 队列455
18.1 队列的定义455
18.2 顺序队列455
18.3 链式队列的基本操作456
18.4 链式队列程序演示457
18.5 队列的应用464
18.6 本章总结464
第19章 文件操作465
19.1 文件概述466
19.1.1 文件的定义466
19.1.2 文件的分类466
19.2 文件类型指针变量467
19.3 文件的打开469
19.3.1 打开文件469
19.3.2 文件的使用方式470
19.3.3 练习——打开文件472
19.4 文件的关闭474
19.5 文件读写函数概述475
19.6 fgetc()和fputc()475
19.6.1 fputc()475
19.6.2 fgetc()477
19.6.3 fgetc()程序举例478
19.6.4 fgetc()和fputc()结合程序举例482
19.6.5 如何判断文件是否为空483
19.7 fgets()和fputs()484
19.7.1 fgets()484
19.7.2 fputs()486
19.8 移动文件位置指针:fseek()和rewind()488
19.8.1 fseek()488
19.8.2 rewind()489
19.9 格式化读写函数:fprintf()和fscanf()489
19.10 数据块读写函1数:fread()和fwrite()491
19.10.1 fwrite()函数492
19.10.2 fread()函数494
19.10.3 ftell()500
19.10.4 如何用fread()和fwrite()删除文件中的数据块503
19.10.5 练习——登录程序509
19.11 本章总结513
第20章 头文件515
20.1 程序是如何编译生成可执行文件的515
20.2 概述516
20.2.1 什么是头文件516
20.2.2 头文件的作用517
20.2.3 什么样的内容适合放在头文件中517
20.3 “#include?”和“#include""”的区别518
20.4 如何自定义头文件519
20.4.1 头文件的组成部分519
20.4.2 #ifndef/#define/#endif520
20.5 本章总结522
第21章 位操作运算符523
21.1 按位与(&)523
21.2 按位或(|)524
21.3 按位异或(?)524
21.4 左移运算符(<<)526
21.5 右移运算符(>>)527
21.6 本章总结528
附录A gcc编译工具的使用530
附录B make自动化编译工具的使用537
附录C gdb调试工具的使用549
附录D 链接库563
附录E 运算符的优先级和结合性572
常用ASCII码表574