
本书是工业和信息化部“十四五”规划教材,新工科建设·计算机系列教材。本书针对教学研究型和教学应用型大学的学生综合素质特点,基于CDIO的工程教育理念,结合读者需要掌握的程序设计知识点和人工智能时代知识体系需求以及国内外C语言程序设计的最新教材和经典应用实例编写。本书针对每章主要知识点选取了应用范例,并通过五子棋人机对战和ATM自动取款机综合应用实例贯穿C语言主要知识点,培养读者计算思维能力,同时分析比较计算机程序语言与自然语言的相互对应关系,形象化解释程序语言的相关概念,帮助读者更深层次地理解程序语言的特性,进一步增强计算机相关领域应用知识点和程序设计语言间的对应关系。本书内容与后续专业课程知识点相互呼应,并通过形象化范例加以解释,增强了可读性,降低了概念的抽象性,有助于读者掌握计算机程序设计的专业术语和概念,促进C语言程序设计水平的提高,学会智能程序化的基本方法和思想。本书既可作为高等院校开设的C语言程序设计课程的教科书,也可作为计算机程序设计培训班的教材或计算机程序设计人员的参考书。
“C语言程序设计”是计算机、软件工程等相关专业需要开设的基本计算机语言课程,是后续课程,如数据结构、操作系统等的重要必修课,是学习其他高级语言和应用软件的核心基础。能否学好这门课程直接影响学生对计算机语言的理解、对后续课程的学习兴趣。 因材施教是教学工作者一直传承的理念,促进计算机、软件学院人才培养质量的提升,必须针对所培养人才的特点,更新教学内容和方法。本书针对教学研究型和教学应用型大学软件工程专业学生的素质特点,基于CDIO的工程教育理念,结合软件工程专业学生未来需要掌握的专业知识点编写,并利用建构主义教学理论挑选和设计综合应用范例,从软件功能实现的角度,帮助学生掌握程序设计基本思想,培养计算思维能力,理解应用C语言解决问题的思路和特点,深层次、多角度理解C语言语法、概念,降低C语言的学习和应用的抽象性难度,提高学习兴趣。 本书共有12章,穿插讲述了C语言关键字、语法等发展演变特点,指出了容易出错的关键知识点、C语言特性的辩证两面性。第1章介绍了C语言的发展过程、C语言程序结构、Dev-C++和Visual C++ 6.0编译工具的使用及学习C语言的方法。第2章介绍了C语言的数据类型、运算符和表达式。第3章介绍了算法概念、顺序结构程序设计及C语言的基本输入/输出函数。第4章介绍了选择结构的特点、语法及选择结构程序设计的应用。第5章介绍了循环语句的语法结构、功能特点及循环程序设计的应用。第6章介绍了一维数组、多维数组,以及字符数组的定义和使用。第7章介绍了函数的定义、调用、变量的作用域及存储类别等。第8章介绍了指针的定义和运算、指针在数组和函数中的应用,以及指向指针的指针含义与应用。第9章主要介绍了结构体和共用体的定义及其应用。第10章介绍了C语言的文件及其基本操作。第11章介绍了C语言的三种预处理命令与应用。第12章通过两个案例实训讲解C语言的重要知识点。 本书编者从事了多年“C语言程序设计”的教学工作,具有丰富的教学经验。本书编程实例多选自实训教学讲义,主要有以下特点。 (1)内容编写既考虑经典范例,也吸收了最新的应用内容。由浅入深,循序渐进,层次分明;语言讲解通俗易懂、突出重点。 (2)每章配有精心设计的应用例题,用以帮助学生更好地理解和掌握知识点,例题的代码已做了详细注释。章末配有精选习题,用以强化C语言程序设计知识和技能的训练。 (3)结合每章的内容,编写了综合运用实例,既可作为各章教学的参考,也可作为该章知识点应用的综合实训项目。 (4)全书强调案例教学,例题和习题都可在Dev-C++和Visual C++ 6.0环境下调试与运行,为后续学习其他课程奠定基础。 (5)五子棋人机对战案例加入了简单的人工智能搜索算法,让学生能尽早了解人工智能,适应新工科教学改革的需要。 (6)各章设计的知识扩展材料方便学生深入理解教学内容和培养“家国天下”的情怀。 (7)第12章为综合案例实训,系统帮助学生巩固所学知识点。 本书是工业和信息化部“十四五”规划教材,新工科建设·计算机系列教材,包含配套教学课件、教学大纲、程序源代码、习题解答、教学视频等,读者可登录华信教育资源网(www.hxedu. com.cn)注册后免费下载。 本书由邱晓红担任主编,刘秋明、李渤担任副主编。第1章和附录由邱晓红编写,第2、3、12章由刘秋明编写,第4、5、6章由樊中奎编写,第7、8、9章由李渤编写,第10、11章由杨舒晴编写。书中部分例题由研究生参与了调试与校验,由李渤审核,全书由邱晓红统稿并定稿。 在本书的编写过程中,得到了许多老师和同学的大力支持和热情帮助,电子工业出版社对本书的出版给予了很多支持,在此表示衷心的感谢!同时,编者参阅了大量关于“C语言程序设计”的书籍和网上资源,在此,对这些作者和提供者一并表示衷心的感谢。 由于编者水平有限,书中可能存在错误或陈述不妥之处,恳请读者批评指正,以便再版时修改完善。 作 者
第1章 C语言及程序设计概述 1 1.1 C语言简介 1 1.1.1 计算机语言的发展过程 1 1.1.2 C语言的发展过程 1 1.1.3 C语言的主要特点 2 1.2 C语言程序结构 3 1.2.1 C语言程序的结构及其特点 3 1.2.2 标识符与关键字 6 1.3 C语言编译工具简介 7 1.3.1 C语言程序实现的步骤 7 1.3.2 Dev-C++编译工具 7 1.3.3 Visual C++ 6.0编译工具简介 12 1.4 如何学习C语言 15 1.4.1 学习C语言的理由 15 1.4.2 学好C语言的步骤 16 1.5 编程实践 18 1.5.1 任务:输出金字塔图案 18 1.5.2 任务:输出华氏温度和摄氏温度对照表 18 1.6 知识扩展材料 19 1.6.1 C语言的标准化过程 19 1.6.2 数字产业基础 20 习题1 20 第2章 数据类型、运算符和表达式 22 2.1 常量和变量 22 2.1.1 常量 22 2.1.2 变量 25 2.2 基本数据类型 26 2.2.1 整型 27 2.2.2 字符型 28 2.2.3 实型 28 2.3 数据类型的转换 29 2.3.1 自动转换 29 2.3.2 强制转换 31 2.4 运算符和表达式 32 2.4.1 算术运算符和算术表达式 32 2.4.2 关系运算符和关系表达式 37 2.4.3 逻辑运算符和逻辑表达式 39 2.4.4 赋值运算符和赋值表达式 40 2.4.5 位运算符和位运算 42 2.4.6 条件运算符和条件表达式 44 2.4.7 逗号运算符和逗号表达式 45 2.4.8 求字节数运算符 46 2.4.9 特殊运算符 47 2.5 运算符的优先级和结合性 47 2.5.1 运算符的优先级 47 2.5.2 运算符的结合性 48 2.6 编程实践 49 任务:分析MD5散列算法的基本运算 49 2.7 知识扩展材料 50 2.7.1 C语言代码规范(编程规范) 50 2.7.2 代码规范的7个原则 51 习题2 53 第3章 算法概念与顺序结构的程序设计 59 3.1 算法简介 59 3.1.1 算法的概念 59 3.1.2 算法的常用描述方法 60 3.2 C语句概述 62 3.3 C语言的基本输入/输出 64 3.3.1 字符的输入/输出函数 64 3.3.2 格式的输入/输出函数 65 3.4 顺序结构的程序设计 72 3.4.1 顺序结构的程序设计思想 72 3.4.2 顺序结构的程序设计举例 73 3.5 编程实践 74 任务:计算正弦函数的面积 74 3.6 知识扩展材料 75 3.6.1 程序员的责任事故 75 3.6.2 程序员的违法犯罪行为 75 习题3 76 第4章 选择结构的程序设计 80 4.1 if语句 80 4.1.1 单分支if语句 80 4.1.2 双分支if语句 81 4.1.3 多分支if语句 82 4.1.4 if语句的嵌套 83 4.1.5 条件运算符和条件表达式 84 4.2 switch语句 85 4.2.1 switch语句 85 4.2.2 switch语句的嵌套 87 4.3 选择结构程序设计举例 88 4.4 编程实践 90 任务:计算个人所得税 90 4.5 知识扩展材料 91 4.5.1 个人所得税的概念 91 4.5.2 我国个人所得税的特点 91 习题4 92 第5章 循环结构的程序设计 102 5.1 while语句和do-while语句 102 5.1.1 while语句的一般形式 102 5.1.2 while语句的使用说明 103 5.1.3 do-while语句的一般形式 104 5.1.4 do-while语句的使用说明 104 5.2 循环结构和循环嵌套 105 5.2.1 for语句的一般形式 105 5.2.2 for语句使用说明 106 5.2.3 循环嵌套的形式 107 5.2.4 循环嵌套的说明 108 5.3 流程转向语句 108 5.3.1 goto语句 108 5.3.2 break语句 109 5.3.3 continue语句 110 5.4 循环结构程序设计举例 110 5.4.1 确定循环次数与不确定循环次数 111 5.4.2 选择循环语句 112 5.4.3 提前结束循环 114 5.4.4 其他应用举例 114 5.5 编程实践 115 任务:验证哥德巴赫猜想 115 5.6 知识扩展材料 115 5.6.1 计算思维 116 5.6.2 计算思维养成 116 习题5 117 第6章 数组 122 6.1 一维数组 122 6.1.1 一维数组的定义 122 6.1.2 一维数组元素的引用 122 6.1.3 一维数组的初始化 123 6.1.4 一维数组应用举例 124 6.2 多维数组 125 6.2.1 二维数组的定义 125 6.2.2 二维数组元素的引用 126 6.2.3 二维数组的初始化 126 6.2.4 二维数组应用举例 127 6.3 字符数组 129 6.3.1 字符数组的定义 129 6.3.2 字符数组的初始化 130 6.3.3 字符串与字符串结束标志 131 6.3.4 字符数组的引用与输入/输出 131 6.3.5 字符串处理函数 132 6.3.6 字符数组应用举例 135 6.4 数组应用举例 137 6.5 编程实践 139 任务:多规格打印万年历 139 6.6 知识扩展材料 141 6.6.1 聚类分析 141 6.6.2 相似性度量 141 习题6 142 第7章 函数 145 7.1 函数的定义 145 7.1.1 函数概述 145 7.1.2 函数类型 145 7.1.3 函数定义和使用 147 7.2 函数参数和返回值 149 7.2.1 形式参数和实际参数 149 7.2.2 函数的返回值 152 7.3 函数调用和声明 153 7.3.1 函数调用 153 7.3.2 函数声明 154 7.4 函数的嵌套调用和递归调用 155 7.4.1 函数的嵌套调用 155 7.4.2 函数的递归调用 156 7.5 变量的作用域 159 7.6 变量的存储类别 161 7.7 编程实践 163 7.7.1 任务:正(余)弦曲线演示 163 7.7.2 任务:输出杨辉三角 165 7.8 知识扩展材料 166 7.8.1 分而治之 166 7.8.2 模块化设计 167 习题7 167 第8章 指针 172 8.1 指针和地址 172 8.2 指针变量 173 8.2.1 指针变量的定义 173 8.2.2 指针变量的赋值 174 8.2.3 指针运算符与指针表达式 175 8.2.4 指针变量引用 177 8.2.5 指针变量作为函数的参数 177 8.3 指针和数组 180 8.3.1 指向数组的指针 180 8.3.2 通过指针引用数组元素 181 8.3.3 数组名作为函数参数 183 8.3.4 指向多维数组的指针和指针变量 185 8.4 指针和字符串 188 8.4.1 字符串的表示 188 8.4.2 字符串指针作为函数参数 190 8.4.3 字符数组与字符串指针的区别 191 8.5 指针和函数 192 8.5.1 函数的指针 192 8.5.2 用指向函数的指针作为函数参数 193 8.5.3 返回指针值的函数 195 8.6 指向指针的指针 196 8.6.1 指向指针的指针的定义 196 8.6.2 指针数组 197 8.6.3 指针数组作为main函数参数 198 8.7 编程实践 199 8.7.1 任务:黑白棋子交换 199 8.7.2 任务:班干部值日安排 202 8.8 知识扩展材料 204 8.8.1 指针的优点和缺点 204 8.8.2 指针的本质 204 习题8 205 第9章 结构体和共用体 209 9.1 结构体 209 9.1.1 结构体类型的定义 209 9.1.2 结构体变量的定义 211 9.1.3 结构体变量的引用 212 9.1.4 结构体变量的赋值 213 9.2 结构体数组与结构体指针 215 9.2.1 结构体数组 215 9.2.2 指向结构体的指针 217 9.2.3 用结构体作为函数的参数 219 9.2.4 结构体举例 222 9.3 链表 224 9.3.1 链表概述 224 9.3.2 处理动态链表所需的函数 225 9.3.3 链表的基本操作 227 9.4 共用体 231 9.4.1 共用体类型的定义 231 9.4.2 共用体类型变量的定义 232 9.4.3 共用体变量的引用 232 9.4.4 共用体变量的初始化 232 9.5 枚举类型和自定义类型 234 9.5.1 枚举类型的定义 234 9.5.2 枚举变量的定义和初始化 235 9.5.3 枚举数据的运算 236 9.5.4 枚举数据的输入/输出 236 9.5.5 枚举变量举例 237 9.5.6 用typedef定义类型 238 9.6 编程实践 241 9.6.1 任务:三天打鱼两天晒网 241 9.6.2 任务:航班订票系统 242 9.7 知识扩展材料 249 9.7.1 结构体所占内存 249 9.7.2 内存对齐 250 习题9 250 第10章 文件 254 10.1 文件概述 254 10.1.1 文件分类 254 10.1.2 文件的编码形式 254 10.1.3 文件的读/写方式 255 10.2 文件的基本操作 255 10.2.1 文件的打开与关闭 255 10.2.2 文件的读/写 257 10.3 文件操作举例 261 10.4 编程实践 267 任务:精挑细选 267 10.5 知识扩展材料 268 10.5.1 嵌入式C语言与标准C语言的区别 268 10.5.2 嵌入式C语言数据类型的特点 269 习题10 270 第11章 预处理命令 271 11.1 宏定义 271 11.1.1 无参数的宏定义 271 11.1.2 有参数的宏定义 274 11.2 文件包含 277 11.3 条件编译 278 11.4 编程实践 280 任务:串化运算 280 11.5 知识扩展材料 281 11.5.1 算法复杂度 281 11.5.2 算法复杂度示例 281 习题11 282 第12章 综合案例实训 286 12.1 五子棋项目实训 286 12.1.1 功能模块设计 286 12.1.2 数据结构设计 287 12.1.3 函数功能描述 287 12.1.4 系统数据流程 289 12.1.5 程序实现 289 12.1.6 运行结果 306 12.2 ATM(自动取款机)案例实训 306 12.2.1 功能模块设计 306 12.2.2 数据结构分析 307 12.2.3 函数功能描述 307 12.2.4 系统数据流程 307 12.2.5 程序实现 307 12.2.6 运行结果 321 附录A 常用字符与ASCII对照表 322 附录B C语言常用语法提要 323 B.1 标识符 323 B.2 常量 323 B.3 表达式 323 B.4 数据定义 324 B.5 函数定义 324 B.6 变量的初始化 325 B.7 语句 325 B.8 预处理命令 325 附录C C语言的常用库函数 326 C.1 输入/输出函数 326 C.2 数学函数 327 C.3 字符函数和字符串函数 328 C.4 动态存储分配函数 328 参考文献 329