手把手教你学C语言

手把手教你学C语言

查阅电子书
手机扫码
  • 微信扫一扫

    关注微信公众号

因版权原因待上架

编辑推荐

C语言零基础者学习必备参考!包含一系列C语言必备知识点。

内容简介

本书是学习C语言的入门书籍,内容非常全面,包含C语言基础知识、流程控制、数组、函数、指针、字符串、结构体、链表、文件操作、栈和队列、自定义头文件、多文件编译、Linux下C文件的编译和链接、链接库等知识点。

本书并不单纯讲解理论,还配有大量的程序,每个知识点都结合程序解讲。这样读者理解起来更加容易,也能够在遇到实际问题时进行编程。本书主要针对学习C语言的初学者,即使完全没有编程基础,也能够通过阅读本书快速掌握C语言的核心知识。

作者简介

作者吴明杰。

章节目录

版权信息

前言

第1章 为什么要学习C语言

1.1 C的起源和发展

1.1.1 计算机语言发展的三个阶段

1.1.2 语言运行速度的比较

1.1.3 C语言的演变过程

1.2 C的特点

1.2.1 C语言的优点

1.2.2 C语言的缺点

1.3 C的应用领域

1.4 C的重要性

1.5 本章总结

第2章 怎样学习C语言

2.1 学习C语言的心得

2.2 学习C语言的目标

2.3 常见问题答疑

2.3.1 学习Java之前为什么建议先学C语言

2.3.2 没学过计算机专业课程能够学懂C语言吗

2.3.3 英语和数学不好能学好C语言吗

2.4 本章总结

第3章 Microsoft Visual C++6.0的使用

3.1 为什么要学习VC++6.0

3.2 如何创建编程文件

3.3 编写一个最简单的程序

3.4 要养成时刻保存的习惯

3.5 编译–链接–执行

3.6 怎样运行第二个程序

3.7 编译–链接–执行时保存路径下的文件夹有什么变化

3.8 如何编写多文件程序

3.9 如何用VC++6.0调试程序

3.10 本章总结

第4章 从一个程序走进C语言

第5章 预备知识

5.1 CPU、内存、硬盘、显卡、主板、显示器之间的关系

5.1.1 电影是如何运行的

5.1.2 CPU为什么不能直接操作硬盘却能直接操作内存

5.1.3 内存的速度为什么比硬盘的速度快

5.1.4 为什么不将内存造得跟硬盘一样大

5.1.5 CPU是如何操作内存的

5.1.6 主板的作用

5.2 HelloWorld程序是如何运行起来的

5.3 字节

5.3.1 什么是字节

5.3.2 字节换算

5.3.3 小结

5.4 进制

5.4.1 什么是进制

5.4.2 进制转换口算法

5.4.3 进制转换公式法

5.4.4 人类为什么最习惯用十进制

5.4.5 计算机为什么用的是二进制

5.4.6 小结

5.5 数据类型

5.5.1 数据类型的分类

5.5.2 基本数据类型及其所占的字节数

5.6 常量

5.6.1 整型常量

5.6.2 浮点型常量

5.6.3 字符型常量

5.7 常量是以什么样的二进制代码存储在计算机中的

5.8 补码

5.8.1 原码和反码

5.8.2 补码的两个核心问题

5.8.3 int型变量所能存储的范围

5.8.4 int型和char型变量是如何相互赋值的

5.9 什么是ASCII

5.10 变量

5.10.1 如何定义变量

5.10.2 变量的本质

5.10.3 为什么要使用变量

5.10.4 变量的命名规则

5.10.5 为什么必须要初始化变量

5.10.6 小结

5.11 各类型数据之间的混合运算

5.12 代码规范化

5.12.1 代码如何写才能规范

5.12.2 代码规范化的好处

5.12.3 代码规范化的七大原则

5.12.4 小结

5.13 本章总结

第6章 printf的用法

6.1 printf的格式

6.2 输出控制符

6.3 %x、%X、%#x、%#X的区别

6.4 如何输出“%d”、“\”和双引号

6.5 本章总结

第7章 scanf的用法

7.1 概述

7.2 使用scanf的注意事项

7.2.1 参数的个数一定要对应

7.2.2 输入的数据类型一定要与所需要的数据类型一致

7.2.3 在使用scanf之前使用printf提示输入

7.3 本章总结

第8章 运算符和表达式

8.1 算术运算符

8.2 关系运算符

8.3 逻辑运算符

8.4 赋值运算符

8.5 运算符的优先级

8.6 本章总结

第9章 选择结构程序设计

9.1 流程控制

9.1.1 什么是流程控制

9.1.2 流程控制的分类

9.2 选择执行的定义和分类

9.3 if语句

9.3.1 if的最简单用法

9.3.2 if的控制范围问题

9.3.3 if…else的用法

9.3.4 if…else if…else的用法

9.3.5 练习——求分数的等级

9.3.6 练习——三个整数从小到大排序

9.3.7 if的常见问题解析

9.4 switch语句

9.5 本章总结

第10章 循环控制

10.1 循环执行的定义和分类

10.2 for循环

10.2.1 for语句的格式

10.2.2 自增和自减

10.2.3 for循环编程练习

10.2.4 for和if的嵌套使用

10.2.5 强制类型转换

10.2.6 浮点数的存储所带来的问题

10.2.7 for循环的嵌套使用

10.2.8 for循环嵌套编程练习

10.3 while循环

10.3.1 while的执行顺序

10.3.2 while和for的比较

10.3.3 如何看懂一个程序——“试数”

10.3.4 do…while

10.3.5 break和continue

10.4 清空输入缓冲区

10.4.1 输入缓冲区

10.4.2 %d和%c读取缓冲区的差别

10.4.3 用scanf吸收回车

10.4.4 getchar()

10.4.5 fflush(stdin)

10.5 本章总结

第11章 数组

11.1 一维数组的使用

11.1.1 一维数组的定义

11.1.2 一维数组的初始化

11.1.3 一维数组元素的引用

11.1.4 如何将数组a赋给数组b

11.1.5 如何编程获取数组的长度

11.1.6 练习

11.1.7 宏定义:#define

11.1.8 小结

11.2 数组倒置算法

11.3 数组查找算法

11.3.1 顺序查找

11.3.2 折半查找

11.4 数组插入、删除算法

11.4.1 插入算法

11.4.2 删除算法

11.5 数组排序算法

11.5.1 冒泡排序

11.5.2 插入排序

11.5.3 选择排序

11.5.4 快速排序

11.5.5 四种排序算法的比较

11.6 二维数组的使用

11.6.1 二维数组的定义

11.6.2 二维数组的初始化

11.6.3 二维数组如何输出

11.6.4 练习——杨辉三角

11.6.5 是否存在多维数组

11.7 本章总结

第12章 函数

12.1 概述

12.1.1 什么是函数

12.1.2 C程序的组成和编译单位

12.1.3 库函数和自定义函数

12.1.4 函数的调用

12.2 为什么需要函数

12.3 有参函数

12.3.1 有参函数定义的一般形式

12.3.2 形参和实参

12.3.3 主调函数中对被调函数的声明

12.3.4 定义函数时应指定返回值类型

12.3.5 函数的返回值

12.3.6 return是如何将值返回给主调函数的

12.3.7 函数的命名规则

12.3.8 练习——判断一个自然数是否是素数

12.4 函数的递归调用

12.4.1 什么是递归

12.4.2 使用递归必须要满足的两个条件

12.4.3 如何学习递归

12.4.4 递归和循环的关系

12.4.5 递归的优缺点

12.4.6 练习——用递归求n的阶乘

12.4.7 练习——用递归实现1+2+3+…+100的和

12.4.8 练习——用递归求斐波那契数列

12.4.9 练习——用递归求两个数的最大公约数

12.4.10 小结

12.5 数组名作为函数参数

12.6 变量的作用域和存储方式

12.6.1 局部变量

12.6.2 全局变量

12.6.3 为什么不建议使用全局变量

12.6.4 自动变量(auto)

12.6.5 静态变量(static)

12.6.6 寄存器变量(register)

12.6.7 外部变量(extern)

12.7 本章总结

第13章 指针

13.1 指针的重要性

13.2 地址和指针的概念

13.3 指针和指针变量

13.3.1 指针变量的定义

13.3.2 指针变量的初始化

13.3.3 指针常见错误

13.4 指针作为函数参数

13.4.1 互换两个数

13.4.2 函数参数传指针和传数据的区别

13.4.3 定义只读变量:const

13.4.4 用const修饰指针变量时的三种效果

13.5 指针和一维数组的关系

13.5.1 用指针引用数组元素

13.5.2 指针的移动

13.5.3 指针变量的自增运算

13.5.4 两个参数确定一个数组

13.5.5 指针变量占多少字节

13.6 函数、数组、指针相结合的程序练习

13.7 动态内存分配

13.7.1 传统数组的缺点

13.7.2 malloc函数的使用(一)

13.7.3 malloc函数的使用(二)

13.7.4 free函数的使用

13.7.5 练习——动态数组的构建

13.7.6 动态数组长度的扩充和缩小

13.7.7 静态内存分配和动态内存分配小结

13.7.8 多级指针

13.7.9 跨函数使用动态内存

13.8 通过指针引用二维数组

13.8.1 二维数组元素的地址

13.8.2 二维数组的首地址和数组名

13.8.3 练习

13.9 函数指针

13.9.1 什么是函数指针

13.9.2 如何用函数指针调用函数

13.10 本章总结

第14章 字符串

14.1 字符串常量

14.2 不能将一个字符串常量赋给一个字符变量

14.3 字符数组

14.3.1 字符数组的定义

14.3.2 字符数组的初始化

14.3.3 初始化内存函数:memset()

14.3.4 用scanf输入字符串

14.4 字符串与指针

14.5 如何用scanf给字符指针变量所指向的内存单元初始化

14.6 字符串处理函数

14.6.1 字符串输入函数gets()

14.6.2 优先使用fgets()函数

14.6.3 使用gets()和fgets()前注意吸收回车

14.6.4 练习——判断字符串是否是回文字符串

14.6.5 练习——将字符串中的小写字母转换成大写字母

14.6.6 字符串输出函数puts()

14.6.7 字符串输出函数fputs()

14.6.8 字符串复制函数strcpy()

14.6.9 字符串复制函数strncpy()

14.6.10 内存拷贝函数memcpy()

14.6.11 sprintf()

14.6.12 字符串比较函数strcmp()

14.7 本章总结

第15章 自定义数据类型——结构体

15.1 为什么需要结构体

15.2 定义和使用结构体变量

15.2.1 声明结构体类型

15.2.2 定义结构体类型变量

15.2.3 结构体变量可进行哪些运算

15.2.4 结构体变量的初始化——定义时初始化

15.2.5 结构体变量的引用

15.2.6 结构体变量的初始化——先定义后初始化

15.2.7 结构体字节对齐

15.3 结构体数组

15.3.1 结构体数组的定义和引用

15.3.2 结构体数组定义时初始化

15.4 结构体指针

15.4.1 指向结构体变量的指针

15.4.2 指向结构体数组的指针

15.5 结构体变量和结构体指针变量作为函数参数

15.6 练习——动态构造存放学生信息的结构体数组

15.7 本章总结

第16章 链表

16.1 为什么要学习链表

16.1.1 数组的缺陷

16.1.2 链表的优点

16.2 链表的缺点

16.3 链表相关术语

16.4 链表的定义和分类

16.4.1 链表的定义

16.4.2 链表的分类

16.5 编写一个链表程序

16.6 练习——插入结点

16.7 练习——删除结点

16.8 练习——销毁链表

16.9 链表排序算法

16.9.1 如何互换结点

16.9.2 链表冒泡排序

16.9.3 链表插入排序

16.9.4 链表选择排序

16.9.5 链表快速排序

16.9.6 链表排序小结

16.10 单循环链表

16.11 双向链表

16.12 typedef的用法

16.13 本章总结

第17章 栈

17.1 内存的分区

17.2 线性表

17.3 栈的定义

17.4 栈的基本操作

17.5 链栈程序演示

17.6 栈的应用

17.7 本章总结

第18章 队列

18.1 队列的定义

18.2 顺序队列

18.3 链式队列的基本操作

18.4 链式队列程序演示

18.5 队列的应用

18.6 本章总结

第19章 文件操作

19.1 文件概述

19.1.1 文件的定义

19.1.2 文件的分类

19.2 文件类型指针变量

19.3 文件的打开

19.3.1 打开文件

19.3.2 文件的使用方式

19.3.3 练习——打开文件

19.4 文件的关闭

19.5 文件读写函数概述

19.6 fgetc()和fputc()

19.6.1 fputc()

19.6.2 fgetc()

19.6.3 fgetc()程序举例

19.6.4 fgetc()和fputc()结合程序举例

19.6.5 如何判断文件是否为空

19.7 fgets()和fputs()

19.7.1 fgets()

19.7.2 fputs()

19.8 移动文件位置指针:fseek()和rewind()

19.8.1 fseek()

19.8.2 rewind()

19.9 格式化读写函数:fprintf()和fscanf()

19.10 数据块读写函数:fread()和fwrite()

19.10.1 fwrite()函数

19.10.2 fread()函数

19.10.3 ftell()

19.10.4 如何用fread()和fwrite()删除文件中的数据块

19.10.5 练习——登录程序

19.11 本章总结

第20章 头文件

20.1 程序是如何编译生成可执行文件的

20.2 概述

20.2.1 什么是头文件

20.2.2 头文件的作用

20.2.3 什么样的内容适合放在头文件中

20.3 “#include<>”和“#include""”的区别

20.4 如何自定义头文件

20.4.1 头文件的组成部分

20.4.2 #ifndef/#define/#endif

20.5 本章总结

第21章 位操作运算符

21.1 按位与(&)

21.2 按位或(|)

21.3 按位异或(^)

21.4 左移运算符(<<)

21.5 右移运算符(>>)

21.6 本章总结

附录A gcc编译工具的使用

附录B make自动化编译工具的使用

附录C gdb调试工具的使用

附录D 链接库

附录E 运算符的优先级和结合性

常用ASCII码表

手把手教你学C语言是2016年由机械工业出版社华章分社出版,作者吴丹。

得书感谢您对《手把手教你学C语言》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。