C语言开发手册(典藏版)作 者: 薛园园 等编著出版时间:2011内容简介 毋庸置疑,C语言从产生到现在的各个阶段,都是最重要和最流行的编程语言之一。熟悉和掌握C语言程序设计,已经成为程序员的一门必修课。本书言简意赅、通俗易懂,知识点覆盖全面,详细介绍了C语言的程序设计及最新的C语言编程技术。《C语言开发手册(典藏版)》分4篇,共29章,分别介绍了C语言基础、C语言进阶、C语言的接口技术和现代C语言的扩展。首先,介绍了C语言及其开发环境,并全面介绍了C语言的基本语法知识;接着,详细讲解了C语言的一些高级程序应用;然后,介绍了C语言与其他主流编程语言的接口;最后,讲解了现代C语言的一些扩展应用和高级技术。《C语言开发手册(典藏版)》结构安排紧凑、讲解详细、实例丰富。C语言程序设计的初学者通过本书可以快速掌握C语言程序设计方法。读者对象:本书对现代C语言程序的接口和高级技术进行了全面讲解,对具有一定开发经验的设计人员也有非常好的参考价值。本书可以作为C语言初学者的入门教材,也可作为C语言程序员的参考手册,还可作为大中专院校学生及电脑培训班的参考书。目录第1篇 C语言基础篇第1章 C语言概述C语言是现代应用最为广泛的编程语言,深受广大程序员的喜爱。本章将简要介绍C语言的产生发展、C语言的特点、标准及C语言流程等内容。并通过一个完整的例子演示C程序开发过程中的项目创建、源代码编写、编译及调试的全过程。同时,将分析C语言程序构成特点。1.1 C语言发展历史1.2 C语言的特点1.2.1 C语言的基本特点1.2.2 C语言的优点1.2.3 C语言的缺点1.3 C语言的标准1.3.1 C标准概述1.3.2 C语言的新标准1.3.3 编译器对C标准的支持1.4 C语言开发流程1.4.1 功能分析1.4.2 划分任务1.4.3 编写源代码1.4.4 编译和链接1.4.5 修改源代码1.4.6 功能测试1.4.7 发布程序1.4.8 维护和修改1.5 第一个C程序1.5.1 创建项目1.5.2 输入源代码1.5.3 编译链接1.5.4 调试1.6 C程序构成分析1.6.1 头文件1.6.2 主函数1.6.3 其他组成部分1.7 良好的编程规范1.7.1 完备和详尽的程序注释1.7.2 整齐的代码书写格式1.7.3 简洁清晰的命名1.8 C语言在不同领域的扩展应用1.8.1 单片机方面1.8.2 LabVIEW方面1.8.3 LabWindows/CVI方面1.8.4 MATLAB方面1.8.5 JavaScript方面1.8.6 并行计算方面1.8.7 Linux平台1.9 小结第2章 典型的C语言开发环境C语言的成功及大范围的应用也造就了丰富的C语言编译器。对于用户来说,学习C语言要紧密结合C编译器或者C集成开发环境来进行。程序员要想快速高效地开发C程序,必须首先熟悉C语言开发环境的使用。本章将介绍几种主流的C语言开发环境。2.1 C语言开发环境简介2.1.1 C语言开发环境的构成2.1.2 典型的C语言开发环境2.2 使用Turbo C开发2.2.1 Turbo C的开发环境简介2.2.2 Turbo C的配置文件2.2.3 用Turbo C创建C程序2.2.4 编译链接程序2.2.5 运行程序2.3 使用Visual Studio开发2.3.1 Microsoft Visual C++的开发环境简介2.3.2 使用Visual Studio 2008创建C程序2.3.3 编译链接程序2.3.4 调试运行程序2.4 使用Dev-C++开发2.4.1 Dev-C++的开发环境简介2.4.2 Dev-C++开发环境的设置2.4.3 使用Dev-C++创建C程序2.4.4 编译和运行程序2.4.5 升级Dev-C++2.5 使用Code::Blocks开发2.5.1 Code::Blocks的开发环境简介2.5.2 Code::Blocks开发环境的设置2.5.3 使用Code::Blocks创建C程序2.5.4 编译运行程序2.6 小结第3章 C语言数据类型应用程序一般在计算机的内存中运行,对各种数据进行操作。C语言中的数据具有不同的类型,用于不同对象的表示。数据是C语言基本的操作对象。本章将首先介绍内存中程序和数据的存储,然后将介绍C语言中各种数据类型及其特点。3.1 数据的存储3.1.1 内存单元3.1.2 数据的存储3.1.3 程序在内存中的映射3.2 数据类型简介3.2.1 基本类型3.2.2 构造类型3.2.3 指针类型3.2.4 空类型3.3 标识符和关键字3.3.1 标识符3.3.2 关键字3.4 分隔符3.4.1 单分隔符3.4.2 组合分隔符3.5 常量3.5.1 直接常量3.5.2 符号常量3.6 变量3.6.1 变量声明3.6.2 变量初始化3.7 整型数据3.7.1 整型数据的声明3.7.2 整型数据的存储3.7.3 整型常量3.7.4 整型数据的输入3.7.5 整型数据的输出3.8 字符型数据3.8.1 字符型变量的声明3.8.2 字符型的存储3.8.3 字符型常量3.8.4 转义字符3.8.5 字符型数据的输入3.8.6 字符型数据的输出3.9 浮点型数据3.9.1 浮点型数据的声明3.9.2 浮点型数据的存储3.9.3 浮点型常量3.9.4 浮点型数据的输入3.9.5 浮点型数据的输出3.10 类型转换3.10.1 混合运算中的类型转换3.10.2 强制类型转换3.11 C99新增数据类型3.12 小结第4章 运算符和表达式第3章介绍了C语言中的基本数据类型,这些是C语言最基本的操作对象。而在第4章中,读者将了解到最基本的操作方法,即运算符和表达式。在C语言中,通过运算符将常量、变量等操作对象组成表达式,而后,由表达式进一步构成C语句。可以说,运算符和表达式是C语言中最基本的操作方法。4.1 运算符4.1.1 运算符概述4.1.2 算术运算符4.1.3 赋值运算符4.1.4 关系运算符4.1.5 逻辑运算符4.1.6 条件运算符4.1.7 位运算符4.1.8 其他运算符4.1.9 运算符优先级和结合性4.2 表达式4.2.1 算术表达式4.2.2 赋值表达式4.2.3 逗号表达式4.2.4 关系和逻辑表达式4.3 小结第5章 C语句及流程控制结构第4章介绍了C语言中的运算符和表达式,这些是构成C语句的基本单元。C语句,即C语言中的操作命令,用于使计算机完成特定的功能。一条完整的语句必须以";"结束。C语言的源程序是由一系列的语句组成的,这些语句可以完成变量声明、赋值和控制输入/输出等操作。由于计算机能识别的是机器指令,因此,编译系统将一条语句转换成若干条机器指令来执行。C语言中的语句包括说明语句、表达式语句、循环语句、条件语句、开关语句、复合语句、空语句和返回语句等,下面分别进行介绍。5.1 说明语句5.2 表达式语句5.3 复合语句5.4 循环语句5.4.1 while循环语句5.4.2 do…while循环语句5.4.3 for循环语句5.5 条件语句5.5.1 单分支if条件结构5.5.2 双分支if条件结构5.5.3 阶梯式if…else…if条件结构5.5.4 if条件结构总结5.6 开关语句5.7 跳转语句5.7.1 goto跳转语句5.7.2 break跳转语句5.7.3 continue跳转语句5.8 函数调用语句5.9 空语句5.10 返回语句5.11 C语言的流程控制结构5.12 小结第6章 格式化输入/输出使用计算机程序解决问题时,需要由用户输入数据,通过程序进行运算后,再输出结果。由此过程可以看到,程序中输入/输出占有相当重要的地位。在C语言中,所有的数据输入/输出都是由库函数完成的,因此都是函数语句。在前面各章的实例中,曾使用过printf()函数和scanf()函数进行数据的输出和输入。本章将详细介绍这两个函数的使用,同时,还将介绍其他一些用于输入和输出的函数。6.1 格式化输出函数printf()6.1.1 printf()函数的格式6.1.2 printf()函数的格式字符6.1.3 printf()函数的修饰符6.1.4 典型的printf()函数实例6.1.5 动态设置输出宽度和精度6.1.6 printf()函数的返回值6.1.7 理解输出列表6.1.8 printf格式化输出函数综合实例6.2 格式化输入函数scanf()6.2.1 scanf()函数的格式6.2.2 scanf()函数格式字符串6.2.3 scanf()函数注意问题6.2.4 scanf()函数的返回值6.2.5 格式化输入函数scanf()综合实例6.3 其他常用的输入/输出函数6.3.1 字符读入函数getchar()6.3.2 字符读入函数getch()6.3.3 字符串读入函数gets()6.3.4 字符输出函数putch()6.3.5 字符输出函数putchar()6.3.6 字符串输出函数puts()6.3.7 格式化内存缓冲区输出函数sprintf()6.3.8 格式化内存缓冲区输入函数sscanf()6.4 小结第7章 数组在前面章节中介绍了C语言的基本数据类型,包括整型、字符型和实型。以这些基本数据类型为基础,C语言还提供几种构造数据类型。构造类型数据是由基本类型数据按一定规则组成的,数组就是其中一种构造数据类型。在程序中用循环结构可以很方便地处理数组。本章将详细介绍C语言中数组的使用。7.1 了解数组7.1.1 使用数组的好处7.1.2 数组的概念7.1.3 数组的维数7.2 一维数组7.2.1 一维数组的声明7.2.2 一维数组的存储7.2.3 一维数组的引用7.2.4 向函数传递一维数组7.2.5 一维数组的初始化7.3 二维数组7.3.1 二维数组的声明7.3.2 二维数组的存储7.3.3 二维数组的引用7.3.4 二维数组的初始化7.4 字符数组和字符串7.4.1 一维字符串数组7.4.2 了解字符串7.4.3 字符串的操作函数7.4.4 字符串的输入输出7.4.5 二维字符串数组7.5 多维数组7.6 数组的基本应用7.6.1 反转字符串7.6.2 查找最大值7.6.3 数据排序7.7 小结第8章 函数使用C语言编程,就肯定会使用到函数。C语言允许用户使用一些编译环境自带的库函数,例如使用printf()函数输出变量的值,使用scanf()函数接收用户的输入等。合理使用库函数可以大大简化程序设计过程。同时,为了有利于程序的模块化,促进程序资源的共享。C语言也支持用户使用自定义函数。本章将详细介绍函数的概念、调用、作用域等相关知识。8.1 函数的概念8.1.1 什么是函数8.1.2 函数的分类8.1.3 函数的定义8.1.4 main()函数8.2 函数的工作过程8.2.1 程序结构8.2.2 函数执行过程8.3 编写函数8.3.1 函数头8.3.2 返回类型8.3.3 参数列表8.3.4 函数体8.3.5 函数原型8.4 函数的参数8.4.1 形参和实参8.4.2 参数传递过程8.4.3 值调用8.4.4 引用调用8.4.5 数组作为函数参数8.4.6 指针作为函数参数8.4.7 main()函数的参数8.5 函数调用8.5.1 函数调用方式8.5.2 被调函数的说明8.5.3 函数的返回值8.6 几种典型的函数调用形式8.6.1 赋值调用与引用调用8.6.2 嵌套调用8.6.3 递归调用8.7 函数及其变量的作用域8.7.1 函数的作用域8.7.2 函数的变量作用域8.8 小结第9章 指针指针是C语言中广泛使用的一种数据类型。利用指针可以操作各种基本的数据类型,以及数组等复合数据结构,甚至使用指针还可以访问函数。正确理解和使用指针对于成功进行C语言程序设计是至关重要的。指针是C语言最显著的特征,同时又是C语言最危险的特征。例如,在使用指针的程序中,常常因为用错指针导致程序出错,而这类错误却很难发现。更严重的是,对未初始化的指针进行操作可能会导致系统崩溃。9.1 内存和变量9.1.1 计算机内存9.1.2 变量的存储9.2 指针和简单变量9.2.1 指针的概念9.2.2 创建指针9.2.3 初始化指针变量9.2.4 指针变量的引用9.2.5 给函数传递指针9.3 指针变量的赋值9.3.1 初始化赋值9.3.2 取地址赋值9.3.3 指针之间赋值9.3.4 数组赋值9.3.5 字符串赋值9.3.6 函数入口赋值9.4 指针和数组的关系9.4.1 指针、数组和地址间的关系9.4.2 指针变量的运算9.4.3 用指针操作数组元素9.5 指向多维数组的指针9.5.1 理解二维数组的地址9.5.2 多维数组的指针表示9.5.3 指向多维数组的指针变量9.5.4 数组名作为函数的参数9.5.5 指向数组的指针小结9.6 指针和字符串9.6.1 字符串的指针表示9.6.2 字符串指针作函数参数9.6.3 字符数组和字符指针的区别9.7 指针数组9.7.1 指针数组的概念9.7.2 用指针数组处理字符串9.7.3 指针数组作函数参数9.8 指向指针的指针9.8.1 理解指向指针的指针9.8.2 二级指针变量与数组9.9 指针和函数9.9.1 返回指针的函数9.9.2 指向函数的指针9.10 指针和const变量9.10.1 用const控制指针9.10.2 const的几种特殊用法9.11 指针总结9.11.1 明确分辨各种指针类型9.11.2 正确理解指针9.12 小结第10章 结构在实际的程序设计中,经常需要处理具有不同数据类型的一组数据。例如,在学生成绩统计表中,应该包含如下几项:姓名(字符型)、学号(整型或字符型)、年龄(整型)、性别(字符型)和成绩(整型或浮点型)。由于数组中各元素的类型和长度都必须一致,因此不能用一个数组存放这一组数据。在这种情况下,C语言中可以使用"结构",这是一种构造数据类型,相当于其他高级语言中的记录类型。10.1 结构的定义10.2 结构变量的定义10.2.1 先定义结构,再定义结构变量10.2.2 在定义结构的同时,定义结构变量10.2.3 直接说明结构变量10.3 结构变量的使用10.4 结构变量的初始化10.5 结构数组10.5.1 结构数组的定义和引用10.5.2 结构数组的初始化10.5.3 结构数组实例10.6 结构指针10.6.1 定义结构指针10.6.2 结构指针的引用10.6.3 用指针处理结构数组10.7 嵌套结构10.7.1 包含数组的结构10.7.2 包含指针的结构10.7.3 包含结构的结构10.8 向函数传递结构10.8.1 传递结构变量的值10.8.2 传递结构指针到函数10.9 小结第11章 联合、枚举和位域在C语言中,除了数组和指针外,还定义了联合和枚举两种聚合数据类型,并且可以进行类型说明和定义位域,这些是特殊形式的数据类型。下面分别进行讲解。11.1 联合11.1.1 定义联合类型11.1.2 定义联合变量11.1.3 联合变量成员的引用11.1.4 联合变量数组11.1.5 联合变量指针11.1.6 在结构中嵌套联合类型11.1.7 结构和联合的区别11.2 枚举11.2.1 定义枚举类型11.2.2 定义枚举变量11.2.3 枚举类型变量的赋值11.3 类型说明11.4 二进制数据存储11.4.1 数据的存储11.4.2 不同数据类型的二进制表示11.5 位运算11.5.1 位逻辑运算符11.5.2 移位运算符11.5.3 位运算的复合赋值运算符11.5.4 位运算的用途11.6 位域11.6.1 定义位域结构11.6.2 位域变量的声明11.6.3 位域的使用11.6.4 位域与联合的使用11.7 小结第12章 预处理C语言的程序中可包括各种以符号#开头的编译指令,这些指令称为预处理命令。预处理命令属于C语言编译器,而不是C语言的组成部分。通过预处理命令可扩展C语言程序设计的环境。预处理命令通常在程序编译时进行一些符号处理,其并不执行具体的硬件操作。C语言中的预处理命令主要有宏定义指令、文件包含指令和条件编译指令,还有其他一些调试时使用的指令。本章将介绍预处理程序各命令的使用方法。12.1 预处理简介12.1.1 预处理功能12.1.2 预处理命令12.2 宏定义命令12.2.1 无参数的宏定义12.2.2 带参数的宏定义12.2.3 #undef命令12.2.4 预处理操作符#和##12.3 文件包含指令12.4 条件编译指令12.4.1 #if、#else、#endif命令12.4.2 #elif命令12.4.3 #ifdef、#ifndef命令12.4.4 使用#defined和#undef12.5 其他预处理命令12.5.1 预定义的宏名12.5.2 重置行号和文件名命令#line12.5.3 修改编译器设置命令#pragma12.5.4 产生错误信息命令#error12.6 内联函数12.7 小结第13章 存储管理在大多数情况下,存储管理都是操作系统的功能。一般的程序设计语言不提供对内存的管理。而C语言提供了管理内存的相关函数,可实现内存的动态存储管理。这是C语言功能强大的一个表现,本章将介绍C语言的内存组织方式和动态存储管理。13.1 内存组织方式13.1.1 内存组织方式13.1.2 堆和栈的比较13.2 C语言的动态存储管理13.3 分配内存函数--malloc()13.4 带初始化的分配内存函数--calloc()13.5 调整已分配内存函数--realloc()13.6 释放分配的内存函数--free()13.7 丢失的内存13.8 小结第2篇 C语言进阶篇第14章 字符及字符串操作在实际的程序设计中,经常需要处理文本数据。在C语言中,文本数据按字符串格式保存。对于字符串,前面已经介绍过如何用字符数组保存字符串、用字符指针指向一个字符串常量、字符串的输入与输出函数等。在C语言的库函数中提供了丰富的处理字符及字符串的函数,本章将介绍这些函数的用法。14.1 字符的操作14.1.1 检查英文字母函数14.1.2 检查字母数字函数14.1.3 检查控制字符函数14.1.4 十进制数字检查函数14.1.5 可打印字符检查函数14.1.6 包含空格的可打印字符检查函数14.1.7 格式字符检查函数14.1.8 小写英文字母检查函数14.1.9 大写英文字母检查函数14.1.10 控制字符检查函数14.1.11 十六进制数字检查函数14.1.12 大写字符转换函数14.1.13 小写字符转换函数14.1.14 ASCII字符转换函数14.1.15 大写字符宏转换函数14.1.16 小写字符宏转换函数14.2 字符串的存储14.2.1 字符串的静态存储14.2.2 字符串的动态存储14.3 字符串的操作14.4 检测字符串长度函数14.5 查找字符串14.5.1 查找字符位置函数--strchr()14.5.2 查找相同字符函数--strspn()14.5.3 查找包含字符位置函数--strcspn()14.5.4 查找包含字符函数--strpbrk()14.5.5 查找子串函数--strstr()14.5.6 字符查找函数--memchr()14.5.7 字符包含函数--strrchr()14.6 比较字符串14.6.1 比较字符串函数--strcmp()14.6.2 比较部分字符串函数--memcmp()14.6.3 比较时忽略大小写函数--stricmp()14.6.4 包含结束符的比较函数--strncmp()14.7 连接字符串14.7.1 连接字符串函数--strcat()14.7.2 连接部分字符函数--strncat()14.8 复制字符串14.8.1 复制字符串函数--strcpy()14.8.2 复制部分字符函数--strncpy()14.8.3 更省事的复制函数--strdup()14.8.4 字符串复制函数--memcpy()14.8.5 带终止字符的复制函数--memccpy()14.8.6 字符串移动函数--memmove()14.9 字符和字符串的转换14.9.1 大小写字符的转换14.9.2 转换大小写字符串14.9.3 字符串与数值的转换14.10 其他字符串函数14.10.1 字符串反转函数--strrev()14.10.2 替换字符串中的字符函数--strset()14.10.3 分解字符串函数--strtok()14.10.4 字符串填充函数--memset()14.11 小结第15章 文件操作在前面各章的实例程序中,每次执行程序时,需要用户从键盘上输入数据,并将程序运行结果输出到屏幕上。在实际的应用中,可能需要将计算机的处理结果打印输出或保存到一个文件中,以供其他用户查看。当程序需要处理大量数据时,可能还需要从一个文件中读取这些数据。C语言提供了丰富的文件操作函数。本章将介绍操作文件的常用函数。15.1 文件与数据流15.1.1 程序的输入/输出概念15.1.2 流的概念15.1.3 预定义的流15.1.4 文件的基本概念15.1.5 缓冲文件系统15.2 文件的打开与关闭15.2.1 文件指针15.2.2 打开文件函数--fopen()15.2.3 关闭文件函数--fclose()15.3 从文件中读写字符15.3.1 写字符函数--putc()和fputc()15.3.2 读字符函数--getc()和fgetc()15.3.3 合并文件15.4 从文件中读写字符串15.4.1 写字符串函数--fputs()15.4.2 读字符串函数--fgets()15.4.3 文件格式输出函数--fprintf()15.4.4 文件格式输入函数--fscanf()15.5 二进制文件的读写15.5.1 写入整型数据函数--putw()15.5.2 读取整型数据函数--getw()15.5.3 写数据块函数--fwrite()15.5.4 读数据块函数--fread()15.5.5 文件检测函数15.6 文件的随机读写15.6.1 获取当前位置函数--ftell()15.6.2 重置文件位置指针函数--rewind()15.6.3 设置文件位置指针--fseek()函数15.7 管理缓冲区15.8 输入/输出的重定向15.8.1 操作系统的重定向功能15.8.2 重定向输出15.8.3 重定向函数--freopen()15.9 文件管理15.9.1 重命名文件15.9.2 删除文件15.9.3 复制文件15.9.4 创建临时文件15.10 小结第16章 典型库函数应用前面曾经介绍过C语言中的字符及字符串处理函数。在实际应用中,其实还有很多其他方面的应用。例如数学运算或绘图程序中需要用到大量的数学函数,而另一些程序中可能需要处理日期和时间类的数据等。在C语言中,还提供了一些库函数用于数学和时间处理等。本章将介绍C语言程序设计中,这些典型的库函数应用。16.1 随机函数16.1.1 伪随机函数--rand()16.1.2 随机种子函数--srand()16.1.3 更加合理的随机数产生方法16.1.4 获取任意范围的随机数16.1.5 获取随机字符16.2 数学函数16.2.1 绝对值函数16.2.2 三角函数16.2.3 双曲三角函数16.2.4 指数函数和对数函数16.2.5 取整函数16.2.6 浮点型分离函数16.2.7 幂函数16.2.8 取余函数16.2.9 C99中扩展的数学函数 上一篇: C语言程序设计(第四版 高清晰版)谭浩强著 下一篇: Delphi高手突破