本书全面介绍了C语言的基本概念、基本语法和基本程序结构,注重知识内容的连续性和渐进性;将立德树人和“课程思政”理念融入本书,挖掘“爱国奉献”“工匠精神”“科技报国”等30多个思政点并录制为微视频供读者学习;将“计算思维”的概念引入本书,以“典型题例”或“典型案例”引入问题,以编程应用为驱动,重点讲解程序设计的思想和方法,并对典型题例和案例进行剖析。
全书共10章,内容编排合理,通俗易懂,注意分散难点,使读者在掌握C语言基本知识的同时,重点培养工匠精神、家国情怀以及分析问题、解决问题的能力,进而提高实际程序设计能力。同时,全书配有设计精美、内容丰富的“核心知识点”和“课程思政点”视频资源,读者可以直接扫码观看。为了让读者能够及时地检查自己的学习效果,把握自己的学习进度,每章后面都附有丰富的习题。
本书既可以作为高等院校各专业C语言程序设计课程的教材,也可供准备参加计算机等级考试和研究生入学考试的读者阅读参考,同时也可作为工程技术人员和计算机爱好者的参考资料。
C语言是一种国内外普遍使用的面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言程序设计是理工科各专业学生计算机应用能力培养的重要技术基础。 C语言既具有低级语言可直接访问内存地址、能进行位操作、程序运行效率高的优点,又具有高级语言运算符和数据类型丰富、结构化控制语句功能强、可移植性好的优点,C语言能够在内存有限的大量硬件设备(如嵌入式硬件设备)中运行。在TIOBE编程语言排行榜中,C语言多年位居榜单前列,是程序设计语言的常青树。当今流行的面向对象语言C++以及Java就是在C语言的基础上发展起来的。通过本书的学习,读者可了解程序设计语言的基本知识,掌握计算思维和结构化程序设计的基本方法与思路、C语言的基本编程方法和程序设计技巧、程序调试的基本技能,具备独立编写常规C语言应用程序的能力,同时为设计大型应用程序和系统程序打下坚实的基础。
本书注重知识内容的连续性和渐进性,将指针的概念介绍提前到数组之前,以方便读者理解指针与数组的关系;在“案例分析与实现”中给出了一些难度较高的程序实例,通过综合实例说明算法的基本原理、程序设计技巧和运行结果分析,让读者融会贯通,开拓思路,使读者在掌握C语言基本知识的同时,逐步具备分析问题、解决问题的能力,进而提高实际的程序设计能力;增加了“C语言运行环境”一章,对VC++、Dev-C++、Linux C以及手机端C语言编程进行了介绍,尽量使用通俗易懂的语言,图文并茂,将抽象的语法知识直观地呈现给读者;全部代码都在Visual C++ 6.0下编写调试。全书配有设计精美、内容丰富的视频资源,读者可以直接扫码观看。
本书共10章,第1、2章介绍了C语言的特点和C语言的基本概念,第3章讨论了算法的描述和结构化程序设计的基本方法以及三种基本程序设计结构,第4章介绍了指针的概念和指针变量及数组的相关知识,第5章介绍了函数的定义和使用,第6章介绍了结构体、链表和共用体,第7章介绍了文件的相关内容,第8章介绍了面向对象程序设计语言C++和C#等,第9章介绍了C语言的常用开发环境,第10章给出了诗词信息管理系统等3个复杂工程案例的分析与实现。
C语言是一门实践性很强的课程,对学生编程和调试能力的训练非常重要。在第3章和第9章中专门介绍了C语言的上机步骤和C程序的调试技术,并重点介绍了Visual C++ 6.0、Dev-C++、Linux C以及手机端C语言编程的上机步骤和环境,便于读者在Windows或Linux环境下编写C语言程序。
本书讲授课时数为48~72学时,其中实验课占16~24学时。学习完本书后,建议安排两周的“C语言课程设计”实训,以完成一个小型应用系统的设计与实现。
本书是作者根据多年从事C语言教学的经验编写的,在原书(王曙燕主编、王春梅副主编,《C语言程序设计》,西安电子科技大学出版社,2020)的基础上,根据广大读者使用过程中提出的要求和意见进行了精心的修改,增加了视频资源和典型题例与典型案例部分。团队的“C语言程序设计”慕课课程已经在中国大学慕课上线7期,读者也可以加入学习。
王曙燕担任本书主编,编写了第1、3章,王春梅担任副主编,编写了第7、10章和附录,王小银编写了第2、5、9章,王燕编写了第6、8章,孙家泽编写了第4章。全书由王曙燕和王春梅统稿,舒新峰老师对本书的编写提出了很好的建议,在此表示衷心的感谢。
由于编者水平有限,书中难免存在不足之处,恳请读者批评指正。编者联系方式:wsylxj@126.com。
编 者
2022年1月
第1章 概述 1
1.1 程序设计语言 1
1.1.1 计算机语言 2
1.1.2 程序设计语言的发展 2
1.2 C程序设计语言 3
1.2.1 C语言的发展历史 3
1.2.2 C语言的标准与版本 4
1.2.3 C语言的特点 4
1.3 C语言的基本语法成分 5
1.3.1 字符集 5
1.3.2 标识符 5
1.3.3 运算符 7
1.4 C语言程序的组成 7
1.4.1 简单的C程序介绍 7
1.4.2 C语言程序的结构 9
1.4.3 C程序的书写 10
1.5 程序设计的一般过程 11
1.5.1 问题分析 12
1.5.2 算法设计 12
1.5.3 编写程序 13
1.5.4 调试与测试 13
1.5.5 整理文档 13
习题1 14
第2章 基本数据类型、运算符及
?表达式 15
2.1 C语言基本数据类型 15
2.1.1 数据类型 15
2.1.2 C语言数据类型简介 15
2.2 常量 16
2.2.1 整型常量 16
2.2.2 实型常量 17
2.2.3 符号常量 17
2.2.4 字符型常量 24
2.3 变量 26
2.3.1 变量名 26
2.3.2 变量类型 26
2.3.3 变量值 30
2.4 运算符及表达式 30
2.4.1 C运算符简介 30
2.4.2 算术运算符与算术表达式 32
2.4.3 赋值运算符与赋值表达式 34
2.4.4 关系运算符与关系表达式 36
2.4.5 逻辑运算符与逻辑表达式 37
2.4.6 条件运算符与条件表达式 39
2.4.7 逗号运算符与逗号表达式 41
2.4.8 位运算符和位段 42
2.4.9 不同类型数据间的混合运算与
类型转换 47
习题2 48
第3章 算法与控制流 53
3.1 简单的C程序设计 53
3.1.1 典型题例 53
3.1.2 算法 54
3.1.3 结构化程序设计的方法 57
3.1.4 程序的基本结构 58
3.2 顺序结构程序设计 61
3.2.1 数据的输入与输出 62
3.2.2 计算思维 74
3.2.3 C程序的上机步骤及基本
调试技术 76
3.2.4 题例分析与实现 78
3.3 选择结构程序设计 81
3.3.1 典型题例 81
3.3.2 二路分支——if语句 82
3.3.3 多路分支——switch语句 94
3.3.4 程序测试 98
3.3.5 题例分析与实现 101
3.4 循环结构程序设计 106
3.4.1 典型题例 107
3.4.2 while语句 107
3.4.3 do-while语句 110
3.4.4 for语句 112
3.4.5 goto语句 115
3.4.6 循环的嵌套 116
3.4.7 循环结束语句 119
3.4.8 题例分析与实现 121
3.4.9 循环语句小结 129
习题3 129
第4章 指针与数组 134
4.1 典型题例 134
4.2 地址和指针的概念 135
4.2.1 变量的内容和变量的地址 135
4.2.2 直接访问和间接访问 136
4.2.3 指针的概念 137
4.3 指针变量 137
4.3.1 指针运算符 137
4.3.2 指针变量的定义 139
4.3.3 指针变量的引用 141
4.4 一维数组 142
4.4.1 一维数组的定义和初始化 142
4.4.2 一维数组元素的引用 144
4.4.3 一维数组应用举例 144
4.5 二维数组 149
4.5.1 二维数组的定义和初始化 149
4.5.2 二维数组元素的引用 151
4.5.3 二维数组应用举例 153
4.6 字符数组 160
4.6.1 一维字符数组的定义和引用 160
4.6.2 字符数组的输入与输出 161
4.6.3 字符串处理函数 163
4.6.4 二维字符数组 166
4.6.5 字符数组应用举例 167
4.7 指针与数组 169
4.7.1 指向数组元素的指针 169
4.7.2 字符指针、字符数组和字符串 172
4.7.3 地址越界问题 175
4.7.4 指针数组 176
4.7.5 多维数组和指向分数组的指针 177
4.7.6 动态数组 180
4.8 题例分析与实现 183
习题4 188
第5章 函数 192
5.1 典型题例 192
5.2 概述 193
5.2.1 C程序的基本结构 193
5.2.2 函数分类 195
5.3 函数的定义 195
5.4 函数的调用与返回值 197
5.4.1 函数调用的一般形式 197
5.4.2 函数调用的方式 197
5.4.3 函数的返回值 199
5.5 函数的参数 200
5.5.1 形式参数和实际参数 200
5.5.2 函数参数 202
5.5.3 引用传递 207
5.6 函数声明和函数原型 209
5.7 函数的嵌套调用 211
5.8 函数的递归调用 212
5.9 变量的作用域 217
5.9.1 局部变量 217
5.9.2 全局变量 218
5.10 变量的存储类型 220
5.10.1 自动变量 220
5.10.2 静态变量 221
5.10.3 寄存器变量 223
5.10.4 外部变量 224
5.10.5 存储类型小结 225
5.11 内部函数和外部函数 225
5.11.1 内部函数 226
5.11.2 外部函数 226
5.12 指针与函数 227
5.12.1 返回指针值的函数 227
5.12.2 指向函数的指针变量 228
5.12.3 指向函数的指针变量作为
函数参数 231
5.13 多文件程序的运行 232
5.14 题例分析与实现 233
习题5 244
第6章 复杂数据类型 250
6.1 结构体 250
6.1.1 案例引入 250
6.1.2 结构体类型定义 251
6.1.3 结构体变量 252
6.1.4 结构体数组 259
6.1.5 结构体和函数 263
6.1.6 指针与结构体 266
6.2 链表 268
6.2.1 案例引入 269
6.2.2 存储空间的分配和释放 269
6.2.3 链式存储结构——链表 273
6.2.4 单链表 274
6.2.5 循环链表 296
6.2.6 双向链表 297
6.3 共用体 298
6.3.1 共用体类型定义 298
6.3.2 共用体变量 299
6.3.3 共用体应用举例 300
6.4 枚举类型 302
6.5 typedef语句 305
习题6 307
第7章 文件 312
7.1 文件概述 312
7.1.1 数据流 312
7.1.2 文件 313
7.1.3 文件的操作流程 314
7.1.4 文件和内存的交互处理 315
7.2 文件类型的指针 316
7.3 标准输入/输出函数 316
7.3.1 打开文件 317
7.3.2 关闭文件 319
7.3.3 获取文件的属性 319
7.3.4 文件的顺序读写 321
7.3.5 文件的随机读写 337
7.3.6 出错检查 341
7.4 系统输入/输出函数 342
习题7 343
第8章 C++面向对象程序设计 346
8.1 面向对象程序设计 346
8.1.1 面向对象程序设计产生的背景 346
8.1.2 类(class)和对象(object) 347
8.1.3 构造函数和析构函数 349
8.1.4 继承 350
8.1.5 多态性 350
8.2 C++语言 351
8.2.1 C++语言的特点 352
8.2.2 输出流(cout)和输入流(cin) 352
8.2.3 函数内联(inline) 355
8.2.4 函数重载(overloading) 356
8.2.5 引用(reference) 360
8.2.6 C++?语言增加的运算符、
数据类型、注释 362
8.2.7 C++?程序的集成开发环境 363
8.3 C#语言 367
8.3.1 C#语言简介 367
8.3.2 C#语言的特点 367
8.4 基于MFC库的用户界面编程基础 368
习题8 378
第9章 C语言开发环境 381
9.1 Visual C++环境 381
9.1.1 Visual C++ 6.0集成开发环境 381
9.1.2 Visual C++ 6.0的使用 384
9.2 Dev-C++环境 388
9.3 Linux操作系统下C语言程序的
开发环境和开发过程 391
9.3.1 使用vim编辑器编辑源文件 392
9.3.2 使用gcc编译器编译源程序 392
9.3.3 运行程序 393
9.4 调试程序 393
9.4.1 Visual C++环境中调试程序 393
9.4.2 Linux环境中使用gdb调试程序 397
9.5 手机端编程环境 400
9.5.1 Android操作系统下的C编译器 400
9.5.2 iOS操作系统下的C语言编译器 403
9.6 编译错误信息 406
第10章 复杂工程案例分析与实现 412
10.1 学生信息处理系统 412
10.1.1 需求分析 412
10.1.2 系统设计 412
10.1.3 功能设计 413
10.1.4 小结 416
10.2 诗词信息管理系统 416
10.2.1 需求分析 416
10.2.2 系统设计 417
10.2.3 功能设计 417
10.2.4 小结 425
10.3 西邮中餐厅点餐系统 425
10.3.1 需求分析 426
10.3.2 系统设计 427
10.3.3 功能设计 428
10.3.4 系统实现 432
10.3.5 小结 441
附录 442
附录1 常用字符与ASCII码对照表 442
附录2 C语言中的关键字表 445
附录3 C语言中运算符的优先级及其
?结合性一览表 445
附录4 C语言的库函数 446
附录5 C语言与汇编语言的混合编程 457
参考文献 464