新書推薦:
《
无端欢喜
》
售價:NT$
347.0
《
股票大作手操盘术
》
售價:NT$
245.0
《
何以中国·何谓唐代:东欧亚帝国的兴亡与转型
》
售價:NT$
398.0
《
一间只属于自己的房间 女性主义先锋伍尔夫代表作 女性精神独立与经济独立的象征,做自己,比任何事都更重要
》
售價:NT$
203.0
《
泉舆日志 幻想世界宝石生物图鉴
》
售價:NT$
611.0
《
养育女孩 : 官方升级版
》
售價:NT$
230.0
《
跨界:蒂利希思想研究
》
售價:NT$
500.0
《
千万别喝南瓜汤(遵守规则绘本)
》
售價:NT$
203.0
|
內容簡介: |
越来越多的高校在录取研究生时开始采用上机考试的形式来考查学生的动手编程能力,很多知名互联网公司在校招时也采用在线笔试的形式,然而,在以应试为主的大学教学模式下,动手能力往往是学生的薄弱环节。为此,本书以C语言为工具,由浅入深、由易到难地讲解了C语言,深入解析了程序执行的原理及数据结构和算法,为读者后续学习Linux系统编程和C 语言编程打下坚实的基础;同时,书中精选了各大知名互联网公司的校招面试题和社招面试题,以及部分知名高校考研的机试真题,可为读者提供可靠、实际的练习指导。全书强调程序的编写与调试,内容精练,可操作性强。每章均提供教学视频、实例代码和课后习题代码,读者可按书中的建议下载并练习。本书不仅可以作为读者提升C语言编程能力的图书,而且可以作为研究生初试的复习用书,还可作为C语言初学者的参考用书。
|
關於作者: |
李志龙,中南大学自动化专业学士,毕业后曾供职于金蝶、华为、OPPO等企业。2015年加入王道训练营,从事CLinuxC Java EEPython程序设计的教学工作。由于教学出色,加之培训视频圆了许多学子成功就业或读研的梦想,逐步被大家称为龙哥。
|
目錄:
|
目 录
第1章 开发环境搭建及调试窗口设置 1
1.1 开发环境搭建 1
1.1.1 C语言的那些事 1
1.1.2 开发环境安装 3
1.2 新建项目 7
1.3 新建代码及编译运行 9
1.4 程序的编译过程 13
1.5 断点及调试窗口设置 14
1.6 学习C语言后的境界 16
练习题 17
第2章 数据类型、运算符与表达式 18
2.1 数据类型 18
2.2 常量 19
2.3 变量 19
2.4 整型数据 19
2.4.1 符号常量 19
2.4.2 整型常量的不同进制表示 22
2.4.3 补码的作用 25
2.4.4 整型变量 27
2.5 浮点型数据 28
2.5.1 浮点型常量 28
2.5.2 浮点型变量 28
2.6 字符型数据 30
2.6.1 字符型常量 30
2.6.2 字符数据在内存中的存储形式及其使用方法 31
2.7 字符串型常量 32
2.8 混合运算 32
2.8.1 数值按int型运算 32
2.8.2 浮点型常量默认按double型运算 34
2.8.3 类型强制转换场景 35
2.9 常用的数据输入输出函数 36
2.9.1 scanf函数的原理 36
2.9.2 scanf函数的循环读取 38
2.9.3 多种数据类型混合输入 39
2.9.4 getchar函数介绍 40
2.9.5 putchar函数介绍 41
2.9.6 printf函数介绍 42
2.10 运算符与表达式 43
2.10.1 运算符分类 43
2.10.2 算术运算符及算术表达式 44
2.10.3 关系运算符与关系表达式 45
2.10.4 逻辑运算符与逻辑表达式 47
2.10.5 位运算符 48
2.10.6 赋值运算符 49
2.10.7 条件运算符与逗号运算符 51
2.10.8 自增、自减运算符及求字节运算符 51
练习题 52
答案解析 52
第3章 选择与循环 60
3.1 选择结构程序设计 60
3.1.1 关系表达式与逻辑表达式 60
3.1.2 if语句 60
3.1.3 switch语句 62
3.2 循环结构程序设计 64
3.2.1 goto语句 64
3.2.2 while循环 65
3.2.3 do while循环 66
3.2.4 for循环 67
3.2.5 continue语句 68
3.2.6 break语句 69
练习题 69
答案解析 70
第4章 数组 83
4.1 一维数组 83
4.1.1 数组的定义 83
4.1.2 一维数组在内存中的存储 84
4.1.3 栈空间和数组 87
4.2 二维数组 88
4.2.1 二维数组的定义与引用 88
4.2.2 二维数组的初始化及传递 89
4.3 字符数组 91
4.3.1 字符数组的定义及初始化 91
4.3.2 gets函数与puts函数 93
4.3.3 str系列字符串操作函数 93
4.3.4 strn系列字符串操作函数 95
4.3.5 mem系列操作函数 96
练习题 97
答案解析 98
第5章 指针 106
5.1 指针的本质 106
5.1.1 指针的定义 106
5.1.2 取地址操作符与取值操作符 107
5.2 指针的使用场景 108
5.2.1 指针的传递 108
5.2.2 指针的偏移 110
5.2.3 指针与自增、自减运算符 112
5.2.4 指针与一维数组 113
5.2.5 指针与动态内存申请 113
5.2.6 字符指针与字符数组的初始化 117
5.2.7 深入理解const 118
5.2.8 memcpy函数与memmove函数的差异 119
5.3 数组指针与二维数组 120
5.3.1 数组指针的应用 120
5.3.2 二维数组的偏移计算 122
5.4 二级指针 122
5.4.1 二级指针的传递 122
5.4.2 二级指针的偏移 123
5.5 函数指针 125
练习题 126
答案解析 126
第6章 函数 133
6.1 函数的声明、定义与调用 133
6.1.1 函数的声明与定义 133
6.1.2 函数的分类与调用 135
6.2 嵌套调用 137
6.3 递归调用 138
6.4 变量及函数的作用域 140
6.4.1 局部变量与全局变量 140
6.4.2 动态存储方式与静态存储方式 142
6.5 函数调用原理详解 144
6.5.1 关于栈 144
6.5.2 代码实例分析 145
练习题 146
答案解析 147
第7章 结构体 149
7.1 结构体与结构体指针 149
7.1.1 结构体的定义、引用、初始化 149
7.1.2 结构体指针 151
7.1.3 typedef的使用 152
7.2 链表的增删查改 152
7.2.1 链表 152
7.2.2 增删查改链表 153
7.3 共用体与枚举 158
7.3.1 共用体 158
7.3.2 枚举 159
练习题 159
答案解析 160
第8章 常用数据结构与算法 182
8.1 数据结构 182
8.1.1 栈 182
8.1.2 队列 184
8.1.3 二叉树 187
8.1.4 红黑树 192
8.1.5 数据结构学习技巧 209
8.2 算法 209
8.2.1 时间复杂度与空间复杂度 209
8.2.2 排序算法 210
8.2.3 二分查找算法 235
8.2.4 哈希查找算法 236
8.2.5 其他算法 239
练习题 239
答案解析 239
第9章 文件操作 243
9.1 C文件概述 243
9.2 文件的打开、读写、关闭 244
9.2.1 文件指针介绍 244
9.2.2 文件的打开与关闭 244
9.2.3 fread函数与fwrite函数 247
9.2.4 fgets函数与fputs函数 249
9.2.5 ftell函数 251
9.2.6 fprintf函数与fscanf函数 252
练习题 253
答案解析 253
第10章 C语言预处理和C语言库 260
10.1 预处理简介 260
10.2 预处理的工作原理 260
10.3 预处理指令 262
10.4 宏定义 263
10.4.1 简单的宏 263
10.4.2 带参数的宏 265
10.4.3 操作符# 267
10.4.4 操作符## 267
10.4.5 宏的通用属性 268
10.4.6 较长的宏中的逗号操作符 269
10.4.7 宏定义中的do while循环 270
10.4.8 预定义宏 270
10.4.9 空宏参数 271
10.4.10 const与#define的差异 272
10.5 条件编译 273
10.5.1 #if指令和#endif指令 273
10.5.2 defined操作符 273
10.5.3 #ifdef指令和#ifndef指令 274
10.5.4 #elif指令和#else指令 275
10.5.5 条件编译 276
10.6 其他指令 277
10.6.1 指令#line 277
10.6.2 指令#undef 278
10.6.3 变参宏...和__VA_ARGS__ 278
10.7 内联函数(C99) 279
10.8 C库中的可变参数stdarg.h 280
练习题 282
答案解析 283
第11章 学生信息管理系统 285
11.1 系统功能描述 285
11.2 系统模块设计 286
11.3 系统用到的相关函数 288
第12章 编译器词法、语法分析项目 290
12.1 词法分析项目 290
12.1.1 项目需求描述 290
12.2 词法分析模块设计 290
12.2.1 建立字典模块 290
12.2.2 字符串存储及其TOKEN值的快速识别设计 293
12.3 词法及语法分析简单样例研究 296
12.3.1 算术表达式的合法性判断 296
12.3.2 词法分析 296
12.3.3 算术表达式的语法分析 299
12.4 升级版功能:编译器语法分析 303
12.4.1 整体流程分析 304
12.4.2 函数体内流程分析 305
12.4.3 表达式解析流程分析 306
12.4.4 总结 307
附录A ASCII码表 308
附录B C语言运算符优先级 311
参考文献 313
|
內容試閱:
|
前言
为什么要编写这本书?
大家知道市面上有很多关于C语言的书籍,既有各种各样的教材,又有很多国外大神撰写的经典专业书籍。那么,我们为什么还要写一本关于C语言的书籍呢?在回答这个问题之前,我们首先需要了解学习C语言的目的是什么。为什么要学习C语言而不学习其他语言呢?很多在校学生的回答是:学校教我C语言,所以我就学,学了自己觉得没用,就去打游戏了
大家要知道的是,目前程序员的主流职业发展方向如下表所示。
工程师类别 产品类别 产品形式 使用的主要语言
前端开发工程师 浏览器服务器模式的浏览器端 所看到的全部网页 HTML5、JavaScript、CSS等
客户服务器模式的客户端 手机App、QQ、迅雷等各种软件,游戏客户端用游戏引擎,入门可选择Cocos2d-x、Unity3D等 Java(安卓)、OC、Swift(IOS)、C#(Windows端)、C(游戏前端)
后端开发工程师 浏览器服务器模式的服务器端 电商网站的服务器端、知乎、豆瓣 Java EE(代表有阿里、京东)、PHP、Python
客户服务器模式的服务器端 游戏、电信、安防、金融类App的服务端 CLinux系统编程C(腾讯、网易、华为)
大数据,AI工程师 做知识图谱、用户画像等数据分析等 PythonCJava
嵌入式开发工程师 运行在非手机、PC、服务器的其他所有设备上 AR、VR、华为基站、大疆无人机、天猫精灵、小米、小爱等 CLinux系统编程Linux内核开发
C编程Linux系统编程C编程,是王道训练营培训后端开发工程师的一套完整教学体系,从2013年开始至今已有很多道友进入BAT、华为、美团等国内知名公司,因此龙哥认为读者学习C语言的目的是成为一名后端开发工程师,并开发出像样的后台产品。当然,如果读者说我的读研方向是嵌入式,我学C语言的目的是成为一名嵌入式开发工程师,以便迎接未来的5G和物联网,那么这也是一个清晰的目标。
既然我们要成为一名后端开发工程师,那么掌握C语言的程度就是达到学习Linux系统编程的阶段。学习Linux系统编程时,不能因为C语言没有掌握好而导致不能灵活地使用Linux的各种API,进而影响操作CPU、内存、硬盘、网络等各种硬件资源!
虽然目的已经清晰,那么为什么要选择本书呢?本书的内容又有哪些优势呢?下面列出本书的优点。
(1)简洁高效。本书和很多经典书籍的主要不同之处是,不讲究大而全,即不会介绍很多关于C语言的版本等对使用C语言意义不大的内容,而是全篇讲究实战,每个章节都由实例组成,通过实例反向解析C语言的原理,从而让大家觉得不抽象、不陌生,使大家学习编程变得简单有趣;同时,书中会充分解析每个实例的详细执行流程,确保每位初学者按照本书进行练习时能够快速得到反馈。毕竟,练习才是掌握一门语言的必杀技!
(2)通俗易懂。读者可能会担心自己的学习能力不强。不必担心,本书附有王道训练营的C语言培训视频(加入QQ群339198307即可获取视频地址,而且视频会不断更新,力求更加完美)。这些视频与本书完美契合,王道训练营也以本书为教材进行讲解,而且会根据每期道友的反馈更新书籍和视频。无论读者是否是计算机专业的学生,都可以使用本书学习并掌握C语言。
(3)信心十足。很多读者在学习C语言编程的过程中,遇到各种各样的问题而解决不了时,会认为自己很笨或变得烦躁,要么觉得自己参考的书籍或视频很烂,要么觉得C语言很难而放弃学习。其实,解决不了问题的原因是调试方法不对。本书开篇就讲解开发环境的搭建及调试环境的设置,同时每个章节都会制造各种异常,并介绍如何调试程序并解决问题,帮助初学者提升调试能力,为以后学习C、Java、Python等语言奠定坚实的基础。同时,我们建立了互帮互助的QQ群,读者有任何问题时,都可以截图并发至QQ群内,辅导老师和来自五湖四海的小伙伴将帮助你解答问题。在完成本书之前,已有很多小伙伴加入了该QQ群,通过学习龙哥的视频掌握了C语言。
部分准备考研的读者选择本书快速掌握C语言后,可以通过编程练习掌握数据结构和算法。在王道培训过的道友参加研究生考试,专业课程普遍考得较好,复试的通过率极高。当然,本书也会讲解常用的数据结构和算法(这是本书与市面上其他C语言书籍的不同之处),以便为跨专业读者降低直接学习数据结构或算法导论等书籍的难度,也为准备刷题(PAT,剑指Offer、LeetCode等)的小伙伴打下坚实的基础,让刷题事半功倍!
本书适合C语言、数据结构和算法入门的读者,也适合准备考研的读者及准备提前掌握C语言的在校大学生,包括需要做毕业设计、应对校招的学生和初中级开发者等。对于完全零基础的读者,建议结合提供的免费视频按部就班地练习。首先,读者要能够独立写出上课时的代码,有任何想法时能够在修改代码后及时运行程序,查看运行结果是否符合自己的预期;其次,当读者发现某节的内容较难时,可以多看几遍视频。本书每章中课后习题的难度均高于市面上很多C语言书籍的课后习题,原因是本书的课后习题全部采用一线互联网公司(腾讯、阿里、字节跳动等)的面试题,目的是让大家掌握C语言后能够直接应对大公司的面试,而不会感觉到学习C语言后没什么用。
对于准备考研的读者,如果时间不充足,那么建议首先快速学习本书的前7章,然后学习考研初试时要考的数据结构。采用这样的学习方式后,读者会很容易看懂考研初试中数据结构的伪代码。初试后,再完成本书的全部学习,就可为复试打下坚实的基础。
|
|