1、工业和信息化部高等教育“十三五”规划教材 C 语言程序设计 主 编 袁 敏 崔 健副主编 逄锦聚 王兆堃 代令军 魏 东 于韶杰 胡凤珠Publishing House of Electronics Industry 北京BEIJING 未经许可,不得以任何方式复制或抄袭本书之部分或全部内容。版权所有,侵权必究。图书在版编目(CIP)数据C 语言程序设计/袁敏,崔健主编.北京:电子工业出版社,2017.8 ISBN 978-7-121-32549-6 .C.袁 崔.C 语言程序设计.TP312.8 中国版本图书馆 CIP 数据核字(2017)第 203175 号策划编辑:郝国栋责任编辑:郝国栋
2、 印 刷:装 订:出版发行:电子工业出版社 北京市海淀区万寿路 173 信箱 邮编:100036 开 本:7871092 1/16 印张:15.5 字数:360 千字 版 次:2017 年 8 月第 1 版 印 次:2017 年 8 月第 1 次印刷 定 价:30.00 元 凡所购买电子工业出版社图书有缺损问题,请向购买书店调换。若书店售缺,请与本社发行部联系,联系及邮购电话:(010)88254888,88258888。质 量 投 诉 请 发 邮 件 至,盗 版 侵 权 举 报 请 发 邮 件 至。本书咨询联系方式:(0532)67772605,邮箱: V 目 录 第 1 章 C 语言程序设
3、计概述 1 1.1 程序与程序设计语言 1 1.1.1 程序与程序设计 1 1.1.2 程序设计语言 2 1.1.3 算法与数据结构 3 1.2 C 语言概述 3 1.2.1 C 语言的特点 3 1.2.2 C 语言程序的基本结构 4 1.2.3 C 语言的基本要素 5 1.3 设计 C 语言程序的基本过程 6 1.3.1 C 语言程序编程环境 6 1.3.2 编译、连接和运行 8 1.4 如何学习 C 语言 8 习题 1 9 第 2 章 数据类型和表达式 11 2.1 语言数据类型 12 2.2 变量 13 2.3 常量 15 2.3.1 整型常量 15 2.3.2 实型常量 16 2.3.
4、3 字符型常量 16 2.3.4 符号常量 17 2.4 数据的输入、输出 18 2.4.1 printf()函数 18 2.4.2 scanf()函数 20 2.5 运算符与表达式 23 2.5.1 算术运算符 23 2.5.2 关系运算符 25 2.5.3 逻辑运算符 25 2.5.4 赋值运算符 26 2.5.5 条件运算符 27 2.5.6 逗号运算符 27 2.5.7 位运算符 28 VI 2.6 类型转换 29 2.6.1 自动类型转换 29 2.6.2 强制类型转换 30 习题 2 31 第 3 章 程序控制结构 33 3.1 概述 33 3.2 顺序结构 34 3.3 选择结构
5、 36 3.3.1 单分支结构 36 3.3.2 双分支结构 37 3.3.3 分支结构的嵌套 38 3.3.4 多路分支结构 41 3.4 循环结构 46 3.4.1 for 循环结构 47 3.4.2 while 循环结构 49 3.4.3 do-while 循环结构 50 3.4.4 循环结构的嵌套 52 3.5 break 和 continue 控制语句 53 3.5.1 break 语句 53 3.5.2 continue 语句 54 3.6 程序控制结构的综合应用 56 习题 3 61 第 4 章 数组 64 4.1 一维数组 64 4.1.1 一维数组的定义和引用 64 4.1.
6、2 一维数组的初始化 66 4.1.3 一维数组编程实例 66 4.2 一维字符数组和字符串 74 4.2.1 一维字符数组的定义和初始化 74 4.2.2 字符串概念 75 4.2.3 字符串存储 75 4.2.4 字符串输出 77 4.2.5 字符串的处理 78 4.3 二维数组 81 4.3.1 二维数组的定义和引用 81 4.3.2 二维数组的初始化 82 4.3.3 二维数组编程实例 83 习题 4 87 第 5 章 函数 88 5.1 模块化程序设计 88 5.2 函数的定义和调用 90 5.2.1 函数的定义 90 5.2.2 函数的调用 92 VII 5.3 变量的存储属性 9
7、7 5.3.1 自动(auto)变量 98 5.3.2 寄存器(register)变量 99 5.3.3 静态(static)变量 99 5.3.4 用 extern 声明外部变量 101 5.4 函数的嵌套调用 104 5.5 递归函数 105 5.6 数组作函数参数 110 5.6.1 数组元素作函数实参 110 5.6.2 一维数组名作函数参数 111 5.6.3 二维数组名作函数参数 114 习题 5 117 第 6 章 指针 118 6.1 指针的概念 118 6.2 指针与简单变量 120 6.2.1 指针变量的定义与引用 120 6.2.2 指针变量的特殊性 122 6.2.3
8、指针变量作为函数的参数 123 6.3 指针与一维数组 127 6.3.1 数组名是一个指针常量 127 6.3.2 指针的运算 129 6.3.3 将数组地址传递给函数 131 6.4 指针与字符串 135 6.4.1 使用指针表示字符串 135 6.4.2 动态内存分配 136 6.4.3 常用的字符串处理函数 138 6.5 指针进阶 144 6.5.1 二级指针 144 6.5.2 指针与二维数组 145 6.5.3 指针数组 145 6.5.4 命令行参数 149 6.5.5 返回指针的函数 151 6.5.6 指向函数的指针 152 习题 6 154 第 7 章 构造数据类型与预编
9、译处理 156 7.1 结构体 156 7.1.1 结构体类型的定义 157 7.1.2 结构体变量的定义 158 7.1.3 结构体变量的引用 161 7.1.4 结构体变量的初始化 161 7.2 结构体数组 163 7.3 线性链表 167 7.3.1 链表的概念 168 VIII 7.3.2 链表的基本操作 169 7.4 共用体 174 7.4.1 共用体类型定义 174 7.4.2 共用体变量的定义、引用 175 7.4.3 共用体变量的赋值 175 7.5 枚举类型 177 7.6 自定义类型名 179 7.7 编译预处理 180 7.7.1 编译预处理命令简介 180 7.7.
10、2 宏定义 181 7.7.3 文件包含 185 7.7.4 条件编译 186 习题 7 189 第 8 章 文件 192 8.1 文件的基本概念 192 8.2 文件指针 193 8.3 文件的打开、读写与关闭 194 8.3.1 文件的打开 194 8.3.2 文件的关闭 195 8.3.3 文件的读写 195 8.3.4 文件读写函数的选用原则 203 8.4 文件定位 203 习题 8 205 附录 208 附录 ASCII 码表 208 附录 C 标准库函数 209 2.1 输入与输出函数 209 2.2 字符类测试函数 216 2.3 字符串函数 217 2.4 数学函数 220
11、2.5 实用函数 222 2.6 诊断函数 224 2.7 变长变元表函数 225 2.8 非局部跳转函数 225 2.9 信号处理函数 226 2.10 日期与时间函数 226 2.11 由实现定义的限制和 228 附录 C 语言错误提示 230 3.1 致命错误信息 230 3.2 一般错误信息 230 附录 编程风格 236 附录 全国计算机等级考试二级C语言程序设计考试大纲(2013年版)238 第 1 章 C 语言程序设计概述 1 第1章 C语言程序设计概述 C 语言是面向过程的高级程序设计语言之一,它具有数据枑型丰富、柸活高效和结构化等特征。本章主要介绍 C 语言的来枫,C 语言的
12、特征和如何使用 VC6.0 设计一个简单的 C 程序,并编译和运行这个 C 程序,最后就如何学好 C 语言给出建议。1.程序与程序设计语言 程序 程序设计 算法与数据结构 程序设计语言的发展 2.C 语言概述 C 语言的特点 C 语言程序的基本结构 C 语言的基本要素 3.C 程序设计基本过程 C 编程环境 编辑源程序 编译、连接、运行 4.如何学好 C 语言 1.1 程序与程序设计语言 1.1.1 程序与程序设计 程序是解决特定问题的步骤,计算机程序是用计算机程序设计语言编写的,最终能够在计算机上运行的指令的序列。计算机执行的每一个操作,都是按预先设好的指令完成的。如图 1.1 所示,勇气号
13、火星探测器在火星的行走、对岩石取样等都是一个个具体的任务,都需要设好指令。用指令编写成能够完成一个具体任务的序列,这就是程序。知 识 结 构 C 语言程序设计 2 程序设计是指设计、编制、调试程序的方法和过程。程序设计通常分为问题建模、算法设计、编写代码和编译调试几个阶段。1.1.2 程序设计语言 语言作为一种交流的工具,其要素有两点:一组符号和一组规则,按照规则由记号构成的记号串的总体就是语言。程序设计语言,简称编程语言,就是人与计算机交流的工具,用来向计算机发出指令,使得计算机能够准确完成解决特定问题设定的步骤。在程序设计语言中,记号串就是程序。程序设计语言的基本成分有:数据成分 描述程序
14、处理的对象,在计算机中统称为数据。运算成分 描述程序中对数据的处理,即运算。控制成分 描述程序的流程控制。传输成分 描述对数据的传输,即输入和输出。计算机程序设计语言的发展,经历了从机器语言、汇编语言到高级语言的历程,目前面向对象的程序设计思想和软件开发技术已经成为主流。1.机器语言 机器语言是指由二进制编码表示的一种语言。从始至今,计算机内部能识别的只有 0 和1 构成的二进制代码。最早的程序都是采取二进制的机器语言编写的,编程者要精通计算机的内部结构和熟记 0 和 1 构成的机器指令才能够设计程序,这相当困难,影响了计算机的普及和应用。2.汇编语言 为了解决计算机编程难的问题,人们在 19
15、52 年研究了能够代替机器语言的助记符语言,即汇编语言。汇编语言通过助记符代替机器指令,克服了机器语言难记和不易读等缺点,但是汇编语言依赖于特定机器,可移植性差,一般只用在系统软件和特定领域的开发。3.面向过程的高级语言 为了普及计算机,需要编制各领域的应用软件,让计算机发挥更大的作用,人们需要更易于掌握的和接近人类自然语言的编程语言,面向过程的高级语言就产生了。计算机不能直接运行使用高级语言编写的程序,需要编译或解释系统把它“翻译”成机器语言程序才能运行。不同的高级语言有不同的编译系统。高级语言种类很多,有 Fortran、Basic、ALGOL、C 等。面向过程的高级语言主要是面向数学公式
16、和算法的语言。具有丰富的数据类型、结构化的语句、模块化的结构、简单易懂、高效等特点。4.面向对象的高级语言 随着编写大型应用软件的需要,20 世纪 80 年代,产生了更接近人类自然交流的语言,如:C+,Perl,Visual Basic,Java 等。计算机程序设计和软件开发全面进入面向对象的程序设计阶段。随着各种软件系统的设计实现,计算机已经深入到国防安全、工业控制、金融通信、互联网等有关生活的方方面面。图 1.1 勇气号火星探测器 第 1 章 C 语言程序设计概述 3 1.1.3 算法与数据结构 著名的计算机科学家,Pascal 之父NiklausWirth 曾提出一个公式:数据结构+算法=程序 他因此获得了计算机界的诺贝尔奖图灵奖。1.算法 算法就是为解决特定问题所采取的方法和步骤,解决不同问题所采用的算法不同。在程序设计中,算法就是一系列解决问题的清晰指令。如果一个算法有缺陷或者不适合解决某个问题,执行这个算法,问题将得不到解决。解决同一问题可能有不同的算法,效率可能大不一样,衡量算法的优劣指标有时间复杂度和空间复杂度。算法的 5 大特征:有穷性 一个算法必须保证执行有限步之后