内容简介
C语言是当今国际上广泛流行的、最具发展前途的程序设计语言之一,本书讲解C语言程序设计的基础知识及其编程技巧。全书共分11章,包括绪论,基本数据类型,选择结构,循环结构,数组,函数,编译预处理,指针,结构体、共用体和枚举类型,指向结构体的指针与链表,文件等内容,同时每章包含丰富的课后习题。书中示例侧重实用性和启发性,趣味性强,通俗易懂,使读者能够快速掌握C语言的基础知识与编程技巧,为实战应用打下坚实的基础。
本书由浅入深,采用多案例教学,强调应用性和实践性,可作为应用型本科、高职院校各专业学生学习C语言程序设计的教材,也可供计算机等级考试者和其他各类学习者使用参考,还可作为软件开发人员的参考用书。
前 言
C语言程序设计是高等学校计算机相关专业的编程入门基础课程,在计算机教学中起到非常重要的作用。C语言是一门面向过程的编程语言。从C语言产生到现在,它已经成为最重要和最流行的编程语言之一。在各种流行的编程语言中,都能看到C语言的影子,如Java、C#的语法与C语言基本相同。学习、掌握C语言是每一名计算机技术人员的基本技能之一。
C语言既具有高级语言的强大功能,又有很多直接操作计算机硬件的功能(这些都是汇编语言的功能),因此,C语言通常被称为中级语言。学习和掌握C语言,既可以增进对计算机底层工作机制的了解,又能为进一步学习其他高级语言打下坚实的基础。
本书共分为11章,以培养C语言应用能力为主线,介绍了C语言的基本概念、语法规则和利用C语言进行程序设计的方法。第1章重点介绍C语言的特点、基本结构、输入输出语句,以及C程序的编辑、编译和运行方法等。第2章重点介绍C语言的基本数据类型、表示方法和存储格式,C语言变量的定义和赋值、不同数据类型间的类型转换,以及C语言中常用运算符的功能、使用方法、结合性和优先级等。第3章重点介绍程序设计的一般方法、结构化程序设计思想以及C语言的顺序结构和选择结构的实现方法。第4章重点介绍C语言的3种循环结构,即while语句、do-while语句和for语句,循环结构中常用语句break和continue的使用方法,以及循环语句的嵌套。第5章重点介绍C语言中数组的定义和使用、字符数组的定义和使用,以及常用字符串函数。第6章重点介绍模块化编程思想、C语言函数的定义和调用、函数的嵌套调用和递归调用。第7章重点介绍编译预处理的相关概念、宏定义的创建和使用。第8章重点介绍指针与指针变量的概念、指针的基本运算、指针与数组的运算、指针与函数的使用。第9章重点介绍C语言中结构体类型、共用体类型和枚举类型的定义和使用。第10章重点介绍C语言中指向结构体变量和结构体数组的指针变量的使用,结构体指针变量作为函数参数的使用,动态存储分配以及链表的概念和基本操作。第11章重点介绍C语言文件的基本类型和相关操作。
本书由李绍华、刁建华、李敏担任主编,赵静、关菁华担任副主编。第1章、第6章及第8章由李绍华编写,第3章和第4章由刁建华编写,第2章和第7章由李敏编写,第5章和第9章由赵静编写,第10章和第11章由关菁华编写,全书由李绍华、刁建华、李敏负责统稿。
本书在编写过程中,得到了大连外国语大学软件学院祁瑞华教授以及任课教师的大力支持,王语涵同学参与了本书的文字校验工作,在此表示衷心感谢。
本书的出版得到了大连外国语大学校级教学改革研究重点项目(2017Z16)、大连外国语大学2017年度高等教育研究课题(2017G18)、教育部2017年第二批产学合作协同育人项目(201702012001、201702012005)的资助。
本教材示例的源程序以及电子教案可以在清华大学出版社网站上免费下载,以供读者和教学使用。
尽管编者力求完美,但由于水平有限,书中难免会出现一些疏漏,希望此领域的专家和广大读者批评指正。
编 者
目录
第1章 绪论 11.1 C语言的历史 21.1.1 计算机语言的发展 21.1.2 C语言的发展 21.2 C语言的特点 31.3 C程序的结构 31.3.1 简单的C程序 31.3.2 C程序的基本结构 61.3.3 C程序的代码规范 61.4 输入输出库函数的使用 61.4.1 printf()函数 61.4.2 scanf()函数 91.5 C程序的开发过程 11习题1 11第2章 基本数据类型 152.1 C语言的数据类型 162.2 常量数据的表示 162.3 变量的定义 182.4 变量的赋值 202.5 C语言的类型修饰符 222.6 表达式的数据类型转换 242.6.1 自动类型转换 242.6.2 强制类型转换 252.7 C运算符和表达式 252.7.1 算术运算符和算术表达式 262.7.2 关系运算符和关系表达式 272.7.3 逻辑运算符和逻辑表达式 282.7.4 赋值运算符和赋值表达式 302.7.5 逗号运算符和逗号表达式 322.7.6 条件运算符和条件表达式 32习题2 34第3章 选择结构 353.1 程序设计的一般方法 363.2 结构化程序设计 373.3 顺序结构 383.4 选择结构——if条件语句 393.5 选择结构——switch语句 48习题3 52第4章 循环结构 634.1 while语句 644.2 do-while语句 684.3 for语句 714.4 break语句和continue语句 774.4.1 break语句 774.4.2 continue语句 794.5 循环语句的嵌套 82习题4 88第5章 数组 995.1 一维数组的定义和引用 1005.1.1 一维数组的定义 1005.1.2 一维数组元素的引用 1015.1.3 一维数组的初始化 1025.2 二维数组的定义和引用 1035.2.1 二维数组的定义 1035.2.2 二维数组元素的引用 1065.2.3 二维数组的初始化 1075.3 字符数组 1085.4 字符串 1095.4.1 字符串的定义和赋值 1095.4.2 字符串的输入和输出函数 1115.4.3 字符串操作函数 1135.4.4 二维字符串数组 117习题5 118第6章 函数 1256.1 模块化编程思想 1266.1.1 程序的模块化组成结构 1266.1.2 程序的模块化设计方法 1276.2 函数的定义和调用 1276.2.1 函数的定义 1286.2.2 函数的调用 1326.2.3 函数的声明 1346.3 函数的参数和返回值 1356.3.1 函数的参数 1356.3.2 函数的返回值 1376.4 函数的嵌套和递归调用 1386.4.1 嵌套调用 1386.4.2 递归调用 1396.5 数组作为函数参数 1446.5.1 数组元素作函数参数 1446.5.2 数组名作函数参数 1456.6 变量的存储属性 1496.6.1 变量的生存周期和作用域 1496.6.2 自动变量 1536.6.3 外部变量 1536.6.4 静态变量 1546.6.5 变量的存储类别 1566.7 函数的分类 156习题6 158第7章 编译预处理 1697.1 预处理的概念 1707.2 宏定义命令 1707.2.1 无参数宏定义命令 1707.2.2 带参数宏定义命令 1737.3 文件包含命令 1767.4 条件编译命令 177习题7 179第8章 指针 1818.1 地址与变量 1828.1.1 内存地址 1828.1.2 变量存储 1838.1.3 变量访问 1838.2 指针变量 1848.2.1 指针变量的声明 1848.2.2 指针变量运算符“*”及其使用 1868.2.3 指针变量的初始化 1898.3 指针运算 1908.3.1 指针的算术运算 1908.3.2 指针的关系运算 1918.3.3 指针的赋值运算 1928.4 指针与一维数组和字符串 1928.4.1 指针与一维数组 1928.4.2 指针与字符串 1958.5 指针与二维数组 1998.5.1 指向二维数组元素*p的使用 2018.5.2 指向二维数组中一维数组(*p)[N]的使用 2028.5.3 指针数组*p[ ]的使用 2038.5.4 复合指针**p的使用 2058.6 指针与函数 2068.6.1 指针变量作为函数参数 2068.6.2 指向数组的指针作为函数参数 2098.6.3 指针类型函数 2128.6.4 指向函数的指针 2148.6.5 main函数中的参数 215习题8 217第9章 结构体、共用体和枚举类型 2319.1 结构体类型的定义 2329.2 结构体类型变量 2339.2.1 结构体变量的定义 2339.2.2 结构体变量中成员的引用 2359.2.3 结构体变量的赋值 2369.2.4 结构体变量的初始化 2379.3 结构体数组 2379.4 共用体 2409.4.1 共用体类型的定义 2409.4.2 共用体变量的定义 2409.4.3 共用体变量的引用 2419.5 枚举类型 2429.5.1 枚举类型的定义 2429.5.2 枚举变量的说明 2439.6 类型定义符typedef 2449.7 位运算符 2459.7.1 按位与运算 2469.7.2 按位或运算 2469.7.3 按位异或运算 2479.7.4 取反运算 2479.7.5 左移运算 2479.7.6 右移运算 247习题9 248第10章 指向结构体的指针与链表 25310.1 结构体指针变量的说明和使用 25410.1.1 指向结构体变量的指针 25410.1.2 指向结构体数组的指针 25610.1.3 结构体指针变量作函数 参数 25710.2 动态存储分配 25910.3 链表的概念 26110.4 链表的基本操作 262习题10 266第11章 文件 27111.1 C文件概述 27211.2 文件指针 27311.3 文件的打开与关闭 27311.3.1 文件的打开函数 (fopen函数) 27311.3.2 文件关闭函数 (fclose函数) 27511.4 文件的读写 27511.4.1 字符读写函数fgetc 和fputc 27511.4.2 字符串读写函数fgets 和fputs 27911.4.3 数据块读写函数fread 和fwrite 28111.4.4 格式化读写函数fscanf 和fprintf 28211.5 文件的随机读写 28411.5.1 文件定位 28411.5.2 文件的随机读写 28511.6 文件检测函数 28611.6.1 文件结束检测函数feof() 28611.6.2 读写文件出错检测函数 ferror() 28611.6.3 文件出错标志和文件结束 标志置0函数clearerr() 28611.7 C库文件 286习题11 288附录A Microsoft Visual C++ 6.0使用手册 295附录B ASCII码对照表 300附录C 运算符的优先级及结合性 302附录D 常用库函数 304参考文献 307