C语言是目前使用最广的程序设计语言之一,学好C语言程序设计对掌握基本编程方法、培养“计算思维”方式、提高解决问题的能力具有重要意义。C语言程序设计是计算机专业学生的重要基础课程,也是非计算机专业学生选修的热门课程。
《C语言程序设计基础教程》面向高等学校各专业,内容主要涉及C语言编程的基本知识和结构化编程方法。通过与问题相关的实例讲解,让学习者掌握C语言的基本运算、程序的控制流程、模块化的设计方法、指针以及文件等相关基础知识。本书注重实践环节,每章按照程序设计在线评测(OJ)系统的实战题目安排训练。挑选典型实训题目,配合丰富的习题,精讲多练,培养学习者程序设计实践能力。
《C语言程序设计基础教程》内容循序渐进、结构清晰、通俗易懂,讲授的内容少而精,是作者们多年教学经验的总结。可作为普通高等学校计算机专业和非计算机专业C语言程序设计课程的本、专科教材,也可供其他自学者使用。
“程序设计基础”是高等院校计算机专业的基础课程,C语言是程序设计语言的主流语言。C语言功能丰富、表达能力强,使用灵活方便,程序执行效率高,它不但具有高级语言的功能,而且还具备低级语言的特性。具有完善的模块程序结构,可移植性好,而且可以直接实现对系统硬件的控制,具有较强的系统处理能力。因而,目前大部分院校都选择C语言作为编程入门语言。
本书根据教育部计算机科学与技术教学指导委员会发布的《高等学校计算机科学与技术专业发展战略研究报告暨专业规范》及《高等学校计算机科学与技术专业核心课程教学实施方案》的教学基本要求,结合多年讲授C语言程序设计课程的教学经验编写而成。参与本书编写的老师都是从事程序设计专业课或公共课教学的老师,先后进行了10多年的C语言课程的教学。我们一边实施教学,一边进行教改研究,先后获得省级精品课程、省级优秀教学团队及省级教学名师的殊荣。
本书内容丰富,实用性强,采用精讲多练的方式,使读者掌握C语言的基本内容及程序设计的基本方法和编程技巧,逐步建立程序设计的基本思想,为进一步学习计算机相关专业打下基础。本书具有如下特点。
(1) 结构清晰,知识完整。本书内容翔实、系统性强,依据高校教学大纲组织内容,并将实际经验融入基本理论之中。
(2) 学以致用,注重能力。本书以“基础知识—例题—实训”为主线,先介绍基础知识,再讲授例题,最后给出实训题目,以便于读者掌握该章的重点知识并提高编程能力。
(3) 示例丰富,实用性强。本书示例丰富、步骤明确、讲解细致,突出实用性。
(4) 注重规范,学用结合。本书知识点的学习与使用紧密结合,知识点基本上采用即学即用的原则。在用的同时引导学生养成良好的编程习惯,编写风格优美、可读性好、易于维护的程序代码。
本书适合作为高校计算机专业的学生学习“程序设计基础”类课程的教材,也可以作为非计算机专业的理工科学生学习“程序设计语言”的教材。在进行公共课教学时,可根据实际情况对教材内容及上机实践内容进行适当的调整。
全书共分为10章,详细介绍了初学者使用C语言进行程序设计所涉及的基本内容,每一章均配有例题和习题。本书第1、10章由孟繁军编写,第2、3章由张丽萍编写,第4、5章由王春晖编写,第6章由王利江编写,第7章由俞宗佐编写,第8章由李慧哲编写,第9章由朝力萌编写,附录由刘东升编写。全书由孟繁军统稿,刘东升审核。
本书在编写过程中得到了许多老师的帮助,在此表示诚挚的感谢。在编写过程中参考了很多文献,在此一并向文献的作者表示感谢。由于作者水平有限,书中难免有疏漏和不当之处,敬请读者和专家批评指正。
编 者
第1章 C程序设计概述 1
1.1 程序设计语言简介 1
1.2 C程序设计语言 2
1.2.1 C语言的发展历史 2
1.2.2 C语言的特点 3
1.3 一个简单的C程序:输出一行文字 3
1.4 C程序的运行过程与运行环境 4
1.4.1 C程序的运行过程 4
1.4.2 C程序的常用运行环境简介 4
1.5 本章小结 12
1.6 上机实训 12
1.7 习题 13
第2章 C程序设计入门 14
2.1 程序举例:两个数相加 14
2.2 数据的输入 16
2.3 C语言中的算术运算 19
2.3.1 C语言中算术运算符 19
2.3.2 数据类型与运算结果的关系 19
2.4 数据的输出 20
2.5 程序举例:计算圆的面积 21
2.5.1 常量 21
2.5.2 宏定义 22
2.6 源程序的书写格式 24
2.7 本章小结 24
2.8 上机实训 25
2.8.1 实训1 a+b的输入输出
练习 25
2.8.2 实训2 输出练习 25
2.9 习题 26
第3章 C程序数据的基本运算 28
3.1 数据类型 28
3.2 常量 29
3.3 变量 31
3.3.1 类型修饰符 32
3.3.2 变量的定义 33
3.3.3 存储单元的基本概念 35
3.4 基本运算 35
3.4.1 关系运算 35
3.4.2 逻辑运算 37
3.4.3 位运算 38
3.4.4 赋值运算 41
3.4.5 其他运算 41
3.4.6 运算符的优先级和结合性 42
3.5 不同类型数据之间的转换 44
3.5.1 自动类型转换 44
3.5.2 强制类型转换 45
3.6 本章小结 45
3.7 上机实训 46
3.7.1 实训1 关于圆的运算 46
3.7.2 实训2 判断较大数 47
3.8 习题 47
第4章 C程序控制结构(1) 49
4.1 算法初步 49
4.2 程序控制结构 50
4.3 算法描述 51
4.3.1 流程图 51
4.3.2 N-S图 53
4.3.3 伪码 53
4.4 if语句 54
4.4.1 单分支选择结构 54
4.4.2 双分支选择结构 56
4.4.3 多分支选择结构 57
4.5 用switch语句实现多分支选择结构 59
4.6 本章小结 60
4.7 上机实训 60
4.7.1 实训1 判断某年是否是闰年 60
4.7.2 实训2 简单四则运算 61
4.7.3 实训3 求一元二次方程的根 62
4.8 习题 64
第5章 C程序控制结构(2) 65
5.1 为什么要使用循环 65
5.2 三种循环语句 67
5.2.1 while循环语句 67
5.2.2 do-while循环语句 68
5.2.3 for循环语句 70
5.3 计数控制的循环 72
5.4 标记控件的循环 73
5.5 几种循环语句的比较 75
5.6 循环嵌套 76
5.7 流程转移控制语句 77
5.7.1 goto语句 78
5.7.2 break语句 78
5.7.3 continue语句 80
5.8 结构化程序设计的核心思想 80
5.9 “自顶向下、逐步求精”的设计方法 81
5.10 本章小结 84
5.11 上机实训 85
5.11.1 实训1 求斐波那契(Fibonacci) 数列 85
5.11.2 实训2 鸡兔同笼 86
5.11.3 实训3 求水仙花数 88
5.11.4 实训4 求?的近似值 89
5.12 习题 90
第6章 数组 92
6.1 为什么要使用数组 92
6.2 一维数组 93
6.2.1 一维数组定义 93
6.2.2 数组元素的使用 94
6.2.3 一维数组的初始化 95
6.3 字符数组 95
6.3.1 字符数组的定义 95
6.3.2 字符数组的使用 96
6.3.3 字符数组的初始化 96
6.3.4 字符数组的输入与输出 97
6.3.5 字符串输入输出函数 97
6.3.6 字符串函数 99
6.4 二维数组 102
6.5 多维数组 103
6.6 本章小结 103
6.7 上机实训 104
6.7.1 实训1 绝对值排序 104
6.7.2 实训2 两数组最短距离 105
6.7.3 实训3 字符替换 106
6.7.4 实训4 数组旋转 107
6.7.5 实训5 螺旋方阵 109
6.8 习题 111
第7章 结构体、共用体和枚举 112
7.1 程序举例:输出平均成绩最高的学生信息 112
7.2 结构体的定义 115
7.2.1 结构体类型的定义 115
7.2.2 结构体变量的定义 116
7.3 结构体变量的初始化 118
7.4 对结构体成员的访问 119
7.5 结构体数组 120
7.6 共用体 122
7.6.1 共用体的定义 122
7.6.2 共用体变量的引用 124
7.6.3 共用体变量与结构体变量的主要区别 125
7.6.4 共用体类型的应用 126
7.7 枚举类型 127
7.8 用typedef定义类型 130
7.9 本章小结 131
7.10 上机实训 132
7.10.1 实训1 使用结构体和共用体描述客车和货车 132
7.10.2 实训2 假设今天是星期日,判断若干天后是星期几 133
7.11 习题 133
第8章 函数与程序结构 135
8.1 C语言中的程序模块 135
8.2 函数的基本知识 136
8.2.1 函数的定义 137
8.2.2 函数的调用 137
8.2.3 函数原型 137
8.2.4 函数返回值 138
8.2.5 函数参数 140
8.3 函数的递归调用 141
8.4 数组做参数 144
8.5 变量的作用域 146
8.5.1 局部变量 147
8.5.2 全局变量 148
8.5.3 动态存储变量 149
8.5.4 静态存储变量 150
8.6 程序举例 151
8.7 编译预处理 154
8.7.1 宏定义 154
8.7.2 条件编译 157
8.7.3 数据类型再命名 159
8.8 本章小结 160
8.9 上机实训 160
8.9.1 实训1 简单计算器 160
8.9.2 实训2 找素数 162
8.10 习题 163
第9章 C指针 166
9.1 地址和指针的概念 166
9.2 指针变量 167
9.2.1 指针变量的定义 167
9.2.2 指针变量的引用 168
9.3 指针与数组 169
9.3.1 指向数组元素的指针 169
9.3.2 通过指针引用数组元素 170
9.3.3 用数组名作函数参数 170
9.3.4 字符串与指针 172
9.3.5 链表 173
9.4 指针与函数 177
9.4.1 指针变量作函数的参数 177
9.4.2 指向函数的指针 179
9.4.3 返回指针值的函数 180
9.4.4 指向指针的指针 181
9.5 本章小结 182
9.6 上机实训 182
9.6.1 实训1 在输入的字符串中查找有无‘k’字符 182
9.6.2 实训2 将数组中的n个整数按相反顺序存放 183
9.7 习题 184
第10章 文件 186
10.1 什么是文件 186
10.1.1 文本文件 186
10.1.2 二进制文件 187
10.2 文件指针FILE 187
10.3 文件的打开与关闭 188
10.3.1 文件的打开 188
10.3.2 文件的关闭 189
10.4 文本文件的读写操作 189
10.4.1 按文本方式打开文件 189
10.4.2 按文本方式读文件 190
10.4.3 按文本方式写文件 193
10.5 读写二进制文件 196
10.5.1 按二进制方式打开文件 197
10.5.2 按二进制方式读写文件 197
10.6 文件的随机读写 199
10.7 文件定位函数 200
10.8 本章小结 201
10.9 上机实训 202
实训 模拟实现操作系统的文件复制功能 202
10.10 习题 203
附录A ASCII码表 205
附录B C语言关键字 208
附录C 部分标准C库函数 209
附录D 预处理命令的使用 213
附录E 程序在线评测系统介绍 218
参考文献 225