本书是“十二五”普通高等教育本科国家级规划教材和国家精品课程教材。全书共10章,内容包括:程序设计ABC,数据类型、运算符和表达式,键盘输入和屏幕输出,程序的控制结构,函数,数组,指针,结构体和共用体,文件操作,游戏程序设计等。本书注重教材的可读性和可用性,每章开头有内容关键词、重点和难点;每章结尾安排本章小结,给出了该章常见编程错误提示;典型例题一题多解,由浅入深,强化知识点、算法、编程方法与技巧;将程序测试、程序调试与排错、软件的健壮性和代码风格、结构化与模块化程序设计方法等软件工程知识以及弘扬传统文化和社会主义核心价值观的元素融入其中,新增对华为鲲鹏技术的相关内容的介绍,包括“C语言程序设计精髓”智能基座精品慕课中与华为鲲鹏技术相关的微视频;配套教材《C语言大学实用教程学习指导(第5版)》包括习题解答、上机实验指导、案例分析三部分,案例分析中给出了错误案例与趣味经典实例分析;为任课教师免费提供电子课件及全部例题和习题源代码。本书为新形态教材,配备丰富的教学资源,读者可以扫描相应的二维码来获取相关教学资源。本书是一本充满趣味性和实用性的大学C语言教材,适合作为大学各专业公共课教材、ACM程序设计大赛培训教材和全国计算机等级考试参考书。
苏小红,博士,教授,博士生导师,省级教学名师,中国计算机学会高级会员,全国高等学校计算机基础教育研究会理事,EI期刊《系统工程与电子技术》编委,《计算机学报》等国内多种核心以上期刊的审稿人,宝钢优秀教师奖、省师德先进个人、省优秀教师获得者。
目 录
第1章 程序设计ABC 1
1.1 计算机与人 1
1.2 计算机与程序设计语言 3
1.3 程序设计语言的故事 5
1.4 C语言的故事 7
1.5 程序设计语言的工作原理 10
本章小结 12
习题1 12
第2章 数据类型、运算符和表达式 13
2.1 一个简单的C程序例子 13
2.2 C语言程序常见符号分类 15
2.3 数据类型 16
2.3.1 为什么引入数据类型 16
2.3.2 从基本数据类型到抽象数据类型 17
2.3.3 类型修饰符 18
2.3.4 标识符命名 19
2.4 常量 20
2.4.1 整型常量 20
2.4.2 实型常量 20
2.4.3 字符常量 21
2.4.4 字符串常量 22
2.4.5 宏常量 22
2.4.6 枚举常量 23
2.5 变量 24
2.5.1 变量的定义与初始化 24
2.5.2 const类型修饰符 25
2.5.3 使用变量时的注意事项 25
2.6 常用运算符及表达式 32
2.6.1 运算符的优先级和结合性 32
2.6.2 算术运算符 32
2.6.3 关系运算符 34
2.6.4 逻辑运算符 35
2.6.5 赋值运算符 36
2.6.6 增1和减1运算符 37
2.6.7 类型强制转换运算符 39
2.6.8 位运算符 40
2.6.9 逗号运算符 41
2.7 赋值运算和表达式中的类型转换 42
本章小结 43
习题2 44
第3章 键盘输入和屏幕输出 46
3.1 C语句分类 46
3.2 表达式语句 46
3.3 复合语句和空语句 47
3.4 基本的输入、输出操作 48
3.4.1 字符输入和输出 48
3.4.2 格式输入/输出 49
*3.4.3 使用scanf()函数时需要注意的问题 55
本章小结 62
习题3 63
第4章 程序的控制结构 65
4.1 算法及其描述方法 65
4.1.1 算法的概念 65
4.1.2 算法的描述方法 66
4.2 顺序结构 68
4.2.1 顺序结构的流程图表示 68
4.2.2 应用程序举例 69
4.3 选择结构 72
4.3.1 应用场合 72
4.3.2 选择结构的流程图表示 73
4.3.3 条件语句 73
4.3.4 开关语句 81
4.4 循环结构 85
4.4.1 应用场合 85
4.4.2 循环结构的流程图表示 86
4.4.3 循环语句 86
4.4.4 单重循环程序实例 88
4.4.5 嵌套循环及其程序实例 99
4.5 流程转移控制语句 103
4.5.1 goto语句 103
4.5.2 break和continue语句 104
4.5.3 程序实例 106
*4.6 程序调试与排错 110
4.6.1 程序中常见的出错原因 110
4.6.2 程序调试与排错的基本方法 111
4.6.3 使用getchar()需要注意的问题 113
*4.7 结构化程序设计方法简介 119
4.7.1 关于goto论战 119
4.7.2 结构化程序设计的核心思想 119
4.7.3 “自顶向下、逐步求精”的程序设计方法 120
本章小结 124
习题4 125
第5章 函数 130
5.1 程序设计的艺术 130
5.2 函数的定义和使用 131
5.2.1 函数的分类 131
5.2.2 函数的定义 132
5.2.3 函数的调用、参数传递和返回值 133
5.2.4 函数原型 134
5.2.5 主函数的特殊性 135
5.3 变量的作用域和存储类型 136
5.3.1 变量的作用域 136
5.3.2 全局变量 137
5.3.3 变量的存储类型 138
5.4 函数封装 140
5.5 预处理指令 140
5.5.1 #include指令 140
5.5.2 #define和#undef指令 141
5.5.3 条件编译 143
5.6 使用assert()查错 143
5.7 模块和链接 145
*5.8 模块化程序设计方法简介 147
5.8.1 模块划分的原则 147
5.8.2 应用实例——“猜数”游戏 148
*5.9 递归 150
5.9.1 递归问题的提出 150
5.9.2 递归函数 151
本章小结 154
习题5 155
第6章 数组 157
6.1 数组类型的应用场合 157
6.2 数组的定义、引用和初始化 157
6.2.1 数组的定义 157
6.2.2 数组的引用 159
6.2.3 数组的初始化 160
6.2.4 程序实例 161
6.3 向函数传递一维数组 166
6.4 向函数传递二维数组 176
6.5 字符数组 180
6.5.1 字符数组与字符串的关系 180
6.5.2 字符数组的输入/输出 182
6.5.3 字符串处理函数 183
6.5.4 应用实例 184
本章小结 187
习题6 188
第7章 指针 191
7.1 指针概述 191
7.1.1 指针的概念 191
7.1.2 为什么引入指针的概念 193
7.1.3 指针变量作为函数参数 195
7.1.4 字符指针作为函数参数 203
7.2 指针和数组间的关系 210
7.2.1 一维数组的地址和指针 210
7.2.2 二维数组的地址和指针 217
7.3 指针数组 222
*7.4 函数指针 226
*7.5 带参数的main()函数 231
*7.6 动态数组的实现 233
7.6.1 C语言程序的内存映像 233
7.6.2 动态内存分配函数 234
7.6.3 一维动态数组的实现 236
7.6.4 二维动态数组的实现 237
*7.7 使用const修饰指针变量 238
*7.8 代码风格 239
7.8.1 程序版式 240
7.8.2 命名规则 242
7.8.3 函数设计 243
7.8.4 防御性程序设计 243
本章小结 244
习题7 246
第8章 结构体和共用体 248
8.1 结构体的应用场合 248
8.2 结构体类型与结构体变量 250
8.2.1 结构体类型的声明 250
8.2.2 用typedef定义结构体类型 250
8.2.3 结构体变量的定义 251
8.2.4 指向结构体变量的指针 253
8.2.5 结构体变量的引用和初始化 254
8.3 结构体数组 256
8.3.1 结构体数组的定义 256
8.3.2 结构体数组程序实例 257
8.3.3 指向结构体数组的指针 260
8.4 向函数传递结构体 261
*8.5 动态数据结构 263
8.5.1 问题的提出 263
8.5.2 链表的定义 264
8.5.3 链表的特点及操作原理 265
8.5.4 链表的建立 265
8.5.5 链表的删除操作 267
8.5.6 链表的插入操作 269
8.6 共用体 271
本章小结 273
习题8 273
第9章 文件操作 275
9.1 计算机中的流 275
9.2 文件 276
9.2.1 存储设备的使用 276
9.2.2 目录 277
9.2.3 文件格式 277
9.3 基本文件操作 278
9.3.1 基本文件操作函数 278
9.3.2 错误处理 281
9.3.3 程序示例 282
9.3.4 基本文件操作的意义 285
9.4 高级文件操作 285
9.4.1 文件的打开和关闭 285
9.4.2 文件的读和写 286
9.4.3 程序实例 287
9.4.4 标准输入和标准输出 289
本章小结 290
习题9 291
第10章 游戏程序设计 293
10.1 动画设计的基本原理 293
10.2 人机交互走迷宫 294
10.3 自动走迷宫 297
本章小结 301
习题10 301
附录A C关键字 303
附录B GCC中各数据类型所占字节数和取值范围 304
附录C C运算符的优先级与结合性 305
附录D ASCII字符编码 306
附录E ASCII表和ASCII扩展码字符表 307
附录F 常用的ANSI C标准库函数 308
附录G Intel x86系列处理器与华为鲲鹏处理器的异同 313
参考文献 316