标题：从零开始学C语言
图书信息
书名：从零开始学C语言  作者：戴晟辉 祝明慧 等编著
ISBN：978-7-121-12252-1
出版日期：2010年12月
定价：39.80元（含DVD光盘1张）
内 容 简 介
为了使初学者都更好地掌握这门高级语言——C语言，本书系统地介绍了程序设计的基本理论与编程技术。每一个知识点都作为一个独立的章节进行详细的讲解，目的在于让读者在学习C语言的过程中，能循序渐进、由浅入深。
本书共4篇分为18章，内容包括C语言入门基础、C语言程序、常量、变量与标识符、数据类型、运算符及其表达式、输入与输出、顺序结构与选择结构、循环结构程序设计、结构语句的转移、数组、函数、指针、结构体、共用体和文件等内容。最后的实例篇，运用C语言建立一个学生成绩管理系统，通过对该系统的界面设计、功能分析、模块描述，使读者对C语言程序设计有一个更加系统、深刻的理解。
本书配DVD光盘1张，内容为本书的实例文件和作者专门为本书录制的全程多媒体语音教学视频。
本书内容全面，论述翔实，适合C语言的初学者，也可作为大、中专院校师生的培训教材，对于C语言爱好者，本书也有很大的参考价值。
前 言
近年来，C语言是应用最为广泛的一种高级程序设计语言，它不仅是计算机专业学生的必修课，也是许多非计算机专业学生所青睐的技术学科。C语言程序设计是全国和各省计算机等级考试的重要考试内容。C语言功能丰富，表达能力强，使用灵活方便，程序效率高，是结构化程序设计语言。C语言具有很强的实用性，既可用来编写应用软件，也适合于编写系统软件。
本书的特点
C语言是学习其他语言的基础，读者只要掌握C语言，学其他语言就会很快入门。本书为了使读者能够从C语言的初学者成为编程高手，专门对C语言知识进行研究分析。本书的主要特点如下：
结构清晰明了。本书共18章，每章都分为若干个节，每节一个小知识点。结构层次清晰可见。
内容全面详细。本书涵盖了C语言中的所有知识，并将C语言各个知识点作为单独章节进行讲解，并举出大量实例。
讲解由浅入深。向读者介绍C语言的基本理论知识、数据结构和基本的编程规则，让读者对C语言的基本知识及结构化程序设计思想有一个初步的认识；接着对C语言一些复杂的数结构类型如数组、函数、指针操作、结构体与共用体、文件等进行详细的讲解。
实例丰富多样。本书所讲的每一个知识点都运用充分的实例进行讲解说明，便于读者掌握。
本书的主要内容
第1章主要带领读者了解了计算机语言的演变和C语言的发展简史，介绍程序设计算法及数制、数制转换与存储，为以后的学习打下基础。
第2章运用一个C语言程序设计实例讲解C语言的结构特征和书写风格。以前的C语言参考书大部分使用的是Turbo C开发环境，本书运用Visual C++ 6.0集成开发环境，详细介绍了Visual C++ 6.0环境的程序开发过程。
第3章讲解常量、变量与标识符，第4章讲解了数据结构，第5章讲解了运算符及其表达式，第6章讲解了输入与输出，这4章所讲解的内容均为C语言入门的基础知识，是学习后面几章的前提，本书对这几章的内容做了详细的讲解。
第7章讲解了顺序结构和选择结构，第8章讲解了循环结构，这两章介绍了C语言程序设计的三种结构，它们构成了C语言程序设计的框架。这两章还运用大量的实例讲解了如何使用if-else、switch-case、while等语句来解决问题。
第9章在第7章、第8章的基础上讲解了几种跳转语句，如break、continue，使程序设计语句更加灵活，有利于解决更加复杂的问题。
第10章讲解了数组，用于处理数据类型相同的一批数据。讲解了一维数组、二维数组及它们的定义、初始化及引用，并给出了大量的实例，帮助读者理解。
第11章讲解了字符串数组，在第10章的基础上讲解了用于处理多个字符的数组。本章讲解了字符数组的定义、初始化、引用、字符数组与字符串的关系及字符数组的输入与输出，最后讲解了字符串处理函数，并举出实例说明。
第12、13章主要介绍函数，这两章讲解了函数的定义、参数值传递问题、函数调用、变量的作用域，以及调用系统函数时的预编译操作等。
第14章讲解的指针操作是C语言的核心，也是难点。本章分别从指针与地址、指针和指针变量、指针和数组、指针和函数这四个方面进行介绍，并给出大量实例，帮助读者理解。
第15章讲解了结构体，第16章讲解了共用体，分别介绍了几种复杂的数据结构、它们的定义与引用，以及与其他数据结构的不同之处。
第17章讲解了文件，文件也是一种数据类型，是存储在外部存储设备上的数据集合。本章讲解了如何对外部数据进行各种操作。
第18章运用C语言来设计一个学生成绩管理系统，整个系统综合运用前几章所学习的C语言的知识，如结构化程序设计、数组、函数、结构体等，在复习巩固C语言的基础知识的基础上，进一步加深对C语言编程的理解和掌握。
适合阅读本书的读者
C语言的初、中级读者。
了解C语言，但所学不全面的人员。
高等院校理科学校C语言课程的学生。
使用C语言进行毕业设计的学生。
熟悉其他语言，以此作为参考书的开发人员。
本书作者
本书主要由戴晟晖和祝明慧编写。其他参与本书编写的人员有昊燃、曾光、张双、朱照华、黄永湛、孟祥嵩、张贺军、李勇、关涛、王岩、李晓白、魏星、刘蕾。在此一并表示感谢！
目 录
第1篇 C语言入门
第1章 C语言入门基础 14
1.1 计算机语言的演变 14
1.1.1 机器语言 14
1.1.2 汇编语言 14
1.1.3 高级语言 14
1.1.4 面向对象或面向问题的高级语言 15
1.2 数制、数制转换与存储 15
1.2.1 数制 15
1.2.2 数制的转换 16
1.2.3 计算机中数据的存储 17
1.3 程序设计思想——算法 18
1.3.1 算法的概念 18
1.3.2 算法的特点 18
1.3.3 算法的表示方法 19
1.3.4 算法分析 21
1.4 C语言的发展简史和特点 21
1.4.1 C语言的诞生与发展 22
1.4.2 C语言的特点 23
1.5 本章小结 24
1.6 习题 24
第2章 认识C语言程序 25
2.1 C语言程序的结构特征 25
2.2 C语言程序的书写风格 27
2.3 C语言程序的开发过程 28
2.4 Visual C++集成开发环境 29
2.4.1 熟悉Visual C++ 6.0集成开发环境 30
2.4.2 C语言在Visual C++ 6.0的开发过程 31
2.5 用Visual C++运行一个C程序 32
2.6 本章小结 33
2.7 习题 33
第2篇 C语言基础
第3章 常量、变量与标识符 34
3.1 标识符 34
3.1.1 标识的命名 34
3.1.2 保留字 34
3.2 常量 35
3.2.1 直接常量 35
3.2.2 符号常量 35
3.3 变量 36
3.3.1 变量的定义 36
3.3.2 变量的初始化 36
3.4 变量的初始化 37
3.5 本章小结 37
3.6 习题 37
第4章 数据类型 38
4.1 C语言中的数据类型 38
4.1.1 基本数据类型 38
4.1.2 构造数据类型 39
4.1.3 指针数据类型 39
4.1.4 空类型 39
4.2 整型数据 39
4.2.1 整型常量 40
4.2.2 整型变量 40
4.3 实数型数据 41
4.3.1 实数型常量 42
4.3.2 实数型变量 42
4.4 字符型数据 43
4.4.1 字符型常量 43
4.4.2 字符型变量 44
4.5 数值型数据间的混合运算 46
4.5.1 自动类型转换 46
4.5.2 强制类型转换 47
4.6 本章小结 49
4.7 习题 49
第5章 运算符及其表达式 50
5.1 算术运算符及算术表达式 50
5.1.1 算术运算符 50
5.1.2 算术表达式 52
5.2 赋值运算符及赋值表达式 52
5.2.1 赋值运算符 53
5.2.2 赋值表达式 54
5.3 关系运算符及关系表达式 55
5.3.1 关系运算符 55
5.3.2 关系表达式 56
5.4 逻辑运算符及逻辑表达式 57
5.4.1 逻辑运算符 57
5.4.2 逻辑运算规则 58
5.4.3 逻辑表达式 59
5.5 条件运算符及条件表达式 61
5.5.1 条件运算符 61
5.5.2 条件表达式 62
5.6 逗号运算符及逗号表达式 65
5.6.1 逗号运算符 65
5.6.2 逗号表达式 66
5.7 位运算符 67
5.7.1 位逻辑运算符 67
5.7.2 移位运算符 69
5.7.3 位自反赋值运算符 70
5.8 位运算符 71
5.9 本章小结 72
5.10 习题 72
第6章 输入与输出 73
6.1 C语句概述 73
6.1.1 流程控制语句 73
6.1.2 函数调用语句 77
6.1.3 表达式语句 77
6.1.4 空语句 77
6.1.5 复合语句 77
6.2 输入与输出函数 78
6.2.1 格式输出函数 78
6.2.2 格式输入函数 81
6.2.3 字符输入与字符输出函数 85
6.3 整型数据的输入与输出 87
6.3.1 整型数据的输出 87
6.3.2 整型数据的输入 89
6.4 浮点型数据的输入与输出 89
6.5 本章小结 90
6.6 习题 90
第7章 顺序结构与选择结构 91
7.1 顺序结构程序设计 91
7.2 选择结构程序设计 93
7.2.1 if语句 93
7.2.2 switch语句 98
7.3 应用举例 101
7.4 本章小结 104
7.5 习题 104
第8章 循环结构程序设计 105
8.1 while语句 105
8.2 do…while语句 107
8.3 for语句 110
8.3.1 for循环结构 110
8.3.2 for循环语句的嵌套 113
8.4 总结应用 115
8.4.1 几种循环的比较 115
8.4.2 循环语句的嵌套 116
8.4.3 应用举例 118
8.5 本章小结 121
8.6 习题 121
第9章 结构语句的转移 122
9.1 break语句 122
9.1.1 跳出switch结构 122
9.2 跳出循环结构 124
9.2.1 问题1 124
9.2.2 问题2 125
9.3 continue语句 126
9.4 goto语句 127
9.5 本章小结 128
9.6 习题 128
第3篇 C语言进阶
第10章 数组 129
10.1 数组的概述 129
10.2 一维数组 130
10.2.1 一维数组的定义 130
10.2.2 一维数组的初始化 131
10.2.3 一维数组的引用 132
10.2.4 一维数组的程序举例 133
10.3 二维数组 139
10.3.1 二维数组的定义 139
10.3.2 二维数组的初始化 140
10.3.3 二维数组的引用 142
10.3.4 数组的程序举例 144
10.4 本章小结 146
10.5 习题 146
第11章 字符数组 147
11.1 字符数组的定义 147
11.2 字符数组的初始化 147
11.3 字符数组的引用 148
11.4 字符数组与字符串的关系 148
11.5 字符数组的输入与输出 149
11.6 字符串处理函数 150
11.6.1 输入字符串函数gets 151
11.6.2 输出字符串函数puts 151
11.6.3 字符串测长度函数strlen 151
11.6.4 字符串比较函数strcmp 151
11.6.5 字符串复制函数strcpy和strncpy 152
11.6.6 字符串连接函数strcat 152
11.7 应用举例 153
11.8 本章小结 158
11.9 习题 158
第12章 函数 159
12.1 函数的初步认识 159
12.2 函数定义 161
12.2.1 无参函数定义 161
12.2.2 有参函数定义 162
12.2.3 空函数定义 162
12.3 函数参数及返回值 163
12.3.1 函数的参数 163
12.3.2 函数的返回值 165
12.4 函数的参数传递 166
12.4.1 函数参数的数值传递 166
12.4.2 函数参数的地址传递 167
12.5 应用举例 168
12.6 本章小结 170
12.7 习题 170
第13章 函数的调用 171
13.1 函数调用的一般形式 171
13.2 函数调用的形式 172
13.3 被调用函数的声明与函数原型 173
13.4 函数的嵌套调用和递归调用 176
13.4.1 函数的嵌套调用 176
13.4.2 函数的递归调用 177
13.5 变量作用域 178
13.5.1 变量作用域和生存期 178
13.5.2 局部变量和全局变量 178
13.5.3 变量存储类别 181
13.6 编译预处理 185
13.6.1 宏定义 186
13.6.2 文件包含处理 189
13.6.3 条件编译 190
13.7 本章小结 191
13.8 习题 191
第14章 指针操作 192
14.1 指针与地址 192
14.2 指针和指针变量 192
14.2.1 指针变量的定义 193
14.2.2 指针变量的引用 194
14.2.3 指针的运算 196
14.3 指针和数组 199
14.3.1 数组的指针和指向数组的指针变量 200
14.3.2 指针数组和指向指针的指针 203
14.3.3 指向字符串的指针 206
14.3.4 数组名作为函数参数 207
14.4 指针和函数 211
14.4.1 函数的指针和指向函数的指针变量 211
14.4.2 用指向函数的指针作为函数参数 212
14.4.3 指针数组作为函数参数 218
14.4.4 返回指针值的函数 219
14.4.5 字符串指针作为函数参数 220
14.5 本章小结 221
14.6 习题 221
第15章 结构体 222
15.1 结构体类型定义 222
15.1.1 结构体类型的说明 222
15.1.2 结构体类型的定义 222
15.2 结构体变量的定义与引用 224
15.2.1 结构体变量的定义与初始化 224
15.2.2 结构体变量的引用 226
15.3 结构数组 229
15.3.1 结构数组的定义 229
15.3.2 结构数组的引用 230
15.4 结构体指针 232
15.4.1 结构体指针变量的定义 232
15.4.2 结构体指针变量的引用 233
15.5 链表 236
15.5.1 链表概述 236
15.5.2 单链表建立 238
15.5.3 单链表简单操作 242
15.6 本章小结 251
15.7 习题 251
第16章 共用体 252
16.1 共用体类型定义 252
16.1.1 定义共用体 252
16.1.2 共用体的存储 253
16.2 共用体类型变量、数组和指针变量的定义 254
16.2.1 先定义共用体，再定义共用体变量、数组及指针变量 254
16.2.2 定义共用体的同时定义共用体变量、数组及指针变量 254
16.2.3 定义共用体变量、数组及指针变量时省略共用体名 255
16.3 共用体类型变量、数组和指针变量的引用 255
16.4 共用体应用举例 257
16.5 枚举类型 259
16.5.1 枚举类型的定义 259
16.5.2 枚举类型变量的赋值和引用 260
16.6 用typedef定义数据类型 262
16.7 本章小结 266
16.8 习题 266
第17章 文件 267
17.1 文件概述 267
17.1.1 文件名 267
17.1.2 文件的类型 268
17.2 文件类型指针 268
17.3 文件的打开与关闭 270
17.3.1 文件打开函数fopen() 270
17.3.2 文件关闭函数fclose() 272
17.4 文件的读写操作 272
17.4.1 字符读写函数 272
17.4.2 字符串读写函数 275
17.4.3 数据块读写函数 278
17.4.4 格式数据读写函数 281
17.5 文件的定位 282
17.5.1 文件头定位函数rewind() 282
17.5.2 文件随机定位函数fseek() 283
17.5.3 测试当前位置函数ftell() 284
17.6 文件的检测 285
17.6.1 文件末尾检测函数feof() 285
17.6.2 文件读写出错检测函数ferror() 286
17.6.3 清除文件末尾和出错标志函数clearerr() 287
17.7 本章小结 287
17.8 习题 287
第4篇 案例实战
第18章 学生成绩管理系统设计 288
18.1 学生成绩管理系统功能 288
18.2 功能模块的描述 288
18.2.1 数据结构 288
18.2.2 main()主函数 289
18.2.3 score *creatlink()创建动态链表 289
18.2.4 void print(score *head)显示学生信息 290
18.2.5 score *add(score *head,score *stu)向链表中添加学生数据 290
18.2.6 score *search(score *head)查询学生成绩 290
18.2.7 score *dele(score *head)删除数据 291
18.2.8 score *sortdata(score *head)对数据进行排序 291
18.2.9 save(score *p1)保存数据 291
18.2.10 score *load(score *head)从文件中读取数据 291
18.2.11 score *statistics(score *head)成绩统计 292
18.2.12 int menu(int k)菜单 292
18.2.13 用到的头文件和全局变量 292
18.3 程序代码 292
18.3.1 主函数main()代码 292
18.3.2 创建链表函数creatlink() 293
18.3.3 显示学生信息函数print() 296
18.3.4 向链表中添加学生数据函数add() 296
18.3.5 查询学生成绩函数search 298
18.3.6 删除数据函数dele 299
18.3.7 对数据进行排序函数sortdata() 300
18.3.8 保存数据函数save() 303
18.3.9 从文件中读取数据函数loadfile() 303
18.3.10 成绩统计函数statistics() 304
18.4 程序运行 306
18.4.1 编辑学生成绩 306
18.4.2 显示学生成绩 306
18.4.3 保存学生成绩信息 307
18.4.4 查询学生的成绩 307
18.4.5 添加学生的成绩 307
18.4.6 删除学生的成绩 307
18.4.7 学生成绩排序 308
18.4.8 从文件中读取学生的成绩 308
18.4.9 统计学生的成绩 308
18.5 本章小结 308
附录A ASCII字符集 309
附录B 运算符的优先级与结合性 311
附录C C语言常用库函数 314