内容简介
     《C语言程序设计(第3版)》是一本兼具趣味性和实用性的C程序设计教材。全书由13章组成,内容包括:为什么要学C语言,C数据类型、简单的算术运算符和表达式,键盘输入和屏幕输出,选择控制结构,循环控制结构,函数,数组,指针,字符串,指针和数组,结构体与共用体,文件操作。
  《C语言程序设计(第3版)》以应用为背景,面向编程实践和问题求解能力的训练,从实际问题出发,在案例的不断深化中逐步引出知识点,形成“程序设计方法由自底向上到自顶向下”和“数据结构由简单到复杂”的两条逻辑清晰的主线。案例内容紧密结合实践,举一反三,融会贯通,尤其侧重错误案例的分析和讲解,在任务驱动下,由浅入深、启发引导读者循序渐进地编写规模逐渐加大的程序,让读者在不知不觉中逐步加深对C语言程序设计方法的了解和掌握。《C语言程序设计(第3版)》配有多媒体课件、例题和习题源代码以及基于C/S结构的编程题考试自动评分系统等教学资源,免费向任课教师提供。
  《C语言程序设计(第3版)》适合作为高等学校各专业的C语言程序设计课程教材,也可作为从事计算机相关工作的科技人员、计算机爱好者及各类自学人员参考。     
作者简介
     苏小红,女,博士,教授,博士生导师,中国计算机学会高级会员,哈尔滨工业大学计算机科学与技术国家实验教学示范中心副主任,计算机语言基础教研室主任,校级教学名师,校教学带头人,国家精品课程和国家精品资源共享课程“C语言程序设计”以及省级精品课程“计算机图形学”负责人,中国大学MOOC课程“C语言程序设计精髓”和“程序设计基础”负责人。
  研究方向为:程序分析技术及其应用,智能信息处理与信息融合,图像处理与模式识别。完成国家自然科学基金、国防基础科研、国家863、国际合作等多项科研项目,获黑龙江省科技进步二等奖1项,黑龙江省自然科学二等奖1项,哈尔滨市自然科学技术学术成果一等奖1项。发表学术研究论文100余篇,获软件著作权登记8项。在教学研究方面,获国家教学成果二等奖1项,黑龙江省教学成果一等奖2项、二等奖2项,校级教学成果一等奖4项。主编教材9部,翻译外版教材2部,与国外大学教师合著教材2部,主审教材2部。2007年获宝钢优秀教师奖。2012年被评为黑龙江省师德先进个人。2014年被评为黑龙江省优秀教师。     
内页插图
          目录
   第1章 为什么要学C语言
1.1 引言
1.2 游戏、黑客和C语言
1.3 c语言,不老的传说
1.4 c语言的爱与恨
1.5 c语言教给我们的事
1.6 什么是“编程”
1.7 本章小结
习题1
第2章 C数据类型
2.1 常量与变量
2.1.1 常量
2.1.2 变量
2.2 简单的屏幕输出
2.3 数据类型
2.4 如何计算变量或数据类型
所占内存空间的大小
2.5 变量的赋值和赋值运算符
2.6 本章扩充内容
2.7 本章知识点小结
2.8 本章常见错误小结
习题2
本章实验题
第3章 简单的算术运算和表达式
3.1 c运算符和表达式
3.1.1 算术运算符和表达式
3.1.2 复合的赋值运算符
3.1.3 增1和减l运算符
3.2 宏常量与宏替换
3.3 const常量
3.4 自动类型转换与强制类型转换运算符.
3.5 常用的标准数学函数
3.6 本章知识点小结
3.7 本章常见错误小结
习题3
本章实验题
第4章 键盘输入和屏幕输出
4.1 单个字符的输入/输出
4.1.1 字符常量
4.1.2 字符的输入/输出
4.2 数据的格式化屏幕输出
4.3 数据的格式化键盘输入
4.4 本章扩充内容
4.5 本章知识点小结
4.6 本章常见错误小结
习题4
本章实验题
第5章 选择控制结构
5.1 生活中与计算机中的问题求解方法
5.2 算法的概念及其描述方法
5.2.1 算法的概念
5.2.2 算法的描述方法
5.3 关系运算符与关系表达式
5.4 用于单分支控制的条件语句
5.5 用于双分支控制的条件语句
5.6 条件运算符和条件表达式
5.7 用于多分支控制的条件语句
5.8 用于多路选择的switch语句
5.9 逻辑运算符和逻辑表达式
5.10 本章扩充内容
5.10.1 程序测试
5.10.2 对输入非法字符的检查与处理
5.10.3 位运算符
5.11 本章知识点小结
5.12 本章常见错误小结
习题5
本章实验题
第6章 循环控制结构
6.1 循环控制结构与循环语句
6.2 计数控制的循环
6.3 嵌套循环
6.4 条件控制的循环
6.5 流程的转移控制
6.5.1 goto语句
6.5.2 break语句
6.5.3 continue语句
6.5.4 穷举法编程实例
6.6 本章扩充内容
6.6.1 结构化程序设计的核心思想
6.6.2 常用的程序调试与排错方法
6.6.3 类型溢出
6.7 本章知识点小结
6.8 本章常见错误小结
习题6
本章实验题
第7章 函数
7.1 分而治之与信息隐藏
7.2 函数的定义
7.2.1 函数的分类
7.2.2 函数的定义
7.3 向函数传递值和从函数返回值
7.3.1 函数调用
7.3.2 函数原型
7.3.3 函数封装与防御性程序设计
7.3.4 函数设计的基本原则
7.4 函数的递归调用和递归函数
7.5 变量的作用域和存储类型
7.5.1 变量的作用域
7.5.2 变量的存储类型
7.6 模块化程序设计
7.6.1 模块分解的基本原则
7.6.2 自顸向下、逐步求精
7.6.3 模块化程序设计实例
7.7 本章扩充内容
7.8 本章知识点小结
7.9 本章常见错误小结
习题7
本章实验题
第8章 数组
8.1 一维数组的定义和初始化
8.2 二维数组的定义和初始化
8.3 向函数传递一维数组
8.4 排序和查找
8.5 向函数传递二维数组
8.6 本章知识点小结
8.7 本章常见错误小结
习题8
本章实验题
第9章 指针
9.1 变量的内存地址
9.2 指针变量的定义和初始化
9.3 间接寻址运算符
9.4 按值调用与模拟按引用调用
9.5 用指针变量作函数参数的程序实例
9.6 函数指针及其应用
9.7 本章知识点小结
9.8 本章常见错误小结
习题9
本章实验题
第10章 字符串
10.1 字符串常量
10.2 字符串的存储
10.3 字符指针
10.4 字符串的访问和输入/输出
10.4.1 如何访问字符串中的单个字符
10.4.2 字符串的输入/输出
10.5 字符串处理函数
10.6 向函数传递字符串
10.7 从函数返回字符串指针
10.8 本章扩充内容
10.9 本章知识点小结
10.10 本章常见错误小结
习题10
本章实验题
第11章 指针和数组
11.1 指针和一维数组间的关系
11.2 指针和二维数组间的关系
11.3 指针数组及其应用
11.3.1 指针数组用于表示多个字符串
11.3.2 指针数组用于表示命令行参数
11.4 动态数组
11.4.1 C程序的内存映像
11.4.2 动态内存分配函数
11.4.3 长度可变的一维动态数组
11.4.4 长度可变的二维动态数组
11.5 本章扩充内容
11.5.1 常见的内存错误及其对策
11.5.2 缓冲区溢出攻击
11.6 本章知识点小结
11.7 本章常见错误小结
习题11
本章实验题
第12章 结构体和共用体
12.1 从基本数据类型到抽象数据类型
12.2 结构体的定义
12.2.1 为什么要定义结构体类型
12.2.2 结构体变量的定义
12.2.3 用typedef定义数据类型
12.2.4 结构体变量的初始化
12.2.5 嵌套的结构体
12.2.6 结构体变量的引用
12.2.7 结构体所占内存的字节数
12.3 结构体数组的定义和初始化
12.3.1 结构体数组的定义
12.3.2 结构体数组的初始化
12.4 结构体指针的定义和初始化
12.4.1 指向结构体变量的指针
12.4.2 指向结构体数组的指针
12.5 向函数传递结构体
12.6 共用体
12.7 枚举数据类型
12.8 动态数据结构——单向链表
12.8.1 问题的提出
12.8.2 链表的定义
12.8.3 单向链表的建立
12.8.4 单向链表的删除操作
12.8.5 单向链表的插入操作
12.9 本章知识点小结
12.1 0本章常见错误小结
习题12
本章实验题
第13章 文件操作
13.1 二进制文件和文本文件
13.2 文件的打开和关闭
13.3 按字符读写文件
13.4 按格式读写文件
13.5 按数据块读写文件
13.6 本章扩充内容
13.6.1 文件的随机读写
13.6.2 标准输入/输出重定向
13.7 本章知识点小结
13.8 本章常见错误小结
习题13
本章实验题
附录A C关键字
附录B VisualC++下基本数据类型的取值范围
附录C C运算符的优先级与结合性
附录D 常用字符与ASCII值对照表
附录E 常用的ANSIC标准库函数
参考文献      
精彩书摘
     《C语言程序设计(第3版)》:
  综上所述,无论一个C语言文件的内容是什么,它一律把数据看成是由字节构成的序列,即字节流。对文件的存取也是以字节为单位的,输入/输出的数据流仅受程序控制而不受物理符号(如回车换行符)的控制。所以,C语言文件又称为流式文件。
  一般来说,数据必须按存入的类型读出才能恢复其本来面貌。例如对图13-2中的文本文件来说,若按字符型以外的其他类型来读,则读出来的数据可能面目全非。所以文件的写入和读出必须匹配,两者约定为同一种文件格式,并规定好文件的每个字节是什么类型和什么数据。
  很多种文件都有公开的标准格式(如bmp、jpg和mp3等),并且通常还规定了相应的文件头的格式,要想正确读出文件中的数据,必须先了解文件头的格式和内容,只有正确读出文件头的内容才能正确读出文件头后面存储的数据的内容。很多应用软件也都支持这些类型的文件的读和写。当然也有不公开、甚至加密的文件格式。例如,MicrosoftWord的doc格式就不公开,所以至今还没有Word以外的其他软件能完美地读出doc格式的文件。
  ……      
前言/序言
     我们所使用的工具深刻地影响着我们的思维方式和思维习惯,进而也将深刻地影响着我们的思维能力。
  ——Edsger W.Dijkstra
  学习程序设计本身是一件既充满挑战、更充满乐趣的事情。然而,它常常会给人以枯燥乏味的感觉,是因为没有人帮助发掘出其中的趣味。本书力图用最简明的语言、最典型的实例以及最通俗的类比和解释将这种趣味性挖掘出来,带给读者全新的学习体验,和读者一起欣赏C语言之美,领悟C语言之妙,体会学习C语言之无穷乐趣。
  本书以应用为背景,面向编程实践和问题求解能力训练,,从实际问题出发,在一个实际案例的不断深化中逐步引出相关知识点,借助任务驱动的实例将相关知识点像珠链一样串联起来,形成“程序设计方法由自底向上到自顶向下”和“数据结构由简单到复杂”的两条逻辑清晰的主线。案例内容紧密结合实践,举一反三,融会贯通。在任务驱动下,由浅入深、启发引导读者循序渐进地编写规模逐渐加大的程序,让读者在不知不觉中逐步加深对C语言程序设计方法的了解和掌握。
  在内容的指导思想上,本书以C语言为工具,介绍计算思维方法和程序设计的基本方法.不拘泥于C语言的基本语法知识,面向实际应用,把计算思维方法和程序设计中最基本、最新、最有价值的思想和方法渗透到C语言的介绍中。目的是使读者在学习了C语言以后,无论使用什么语言编程,都具有灵活应用这些思想和方法的能力。
  全书共分13章,内容包括:为什么要学C语言,C数据类型,简单的算术运算和表达式,键盘输入和屏幕输出,选择控制结构,循环控制结构,函数,数组,指针,字符串,指针和数组,结构体和共用体,文件操作。
  在内容编排上,全书内容注重教材的易用性。每章开头都有内容导读,指导读者阅读,每章结尾以表格的形式给出本章知识点小结和常见错误小结,帮助读者整理思路。本书既适合于程序设计的初学者,也适合于想更深入了解C语言的人。书中设计了很多思考题,并在每章的扩充内容中增加了一些有一定深度和开放性的内容,供希望深入学习程序设计的读者选学和参考,力求做到内容有宽度、有深度、有高度。
  在内容写作上,本书力图避免以往教材编写中常常出现的通病和问题,如“实例不实,为解释语法而设计”、“语法堆砌,只见树木不见森林”、“忽视错误程序的分析和讲解”等。因此编写的主要特色是注重错误程序的讲解和分析以及与软件工程内容的联系。在分析常见错误案例的过程中,讲解程序设计的基本方法、程序测试方法以及程序调试和排错方法,帮助读者了解错误发生的原因、实质、排错方法及解决对策。
  全书程序采用统一的代码规范编写,并且在编码中注重程序的健壮性。全书例题、习题和实验题的内容选取兼具趣味性和实用性,习题以巩固基本知识点和强化程序设计方法为目的,难度分成多个阶梯,包括:改写例题的编程题,模仿例题的编程题,趣味游戏类编程题。题型包括:侧重程序阅读理解能力训练的写出程序运行结果题和程序填空题,侧重程序调试和排错能力训练的分析改错题,侧重编程实践能力训练的任务递进式编程题等。实验题从“巩固基础、综合设计、创新应用”三个层次进行设计,从第8章到第13章的实验题全部围绕一个综合应用实例来逐步展开和深入,以循序渐进的任务驱动方式,引导读者逐步编写出有一定规模的、贯穿全书的综合应用程序,即菜单驱动的学生成绩管理系统,该内容可作为课程设计的参考内容。    
				
 
				
				
					探索 C 语言的无限可能:一本面向未来的程序设计指南  这是一本关于 C 语言的深度探索与实践指南。它不仅仅是一本教材,更是一份通往底层计算世界的钥匙,一扇理解现代软件架构基石的大门。本书以清晰的逻辑、详实的案例和前瞻性的视角,引领读者从零开始,逐步构建扎实的 C 语言基础,并深入理解其在不同领域的应用潜力。  核心内容概览:  本书致力于为读者提供一个全面而深入的 C 语言学习体验。我们不仅仅满足于介绍语法规则,更着力于揭示 C 语言的设计哲学和其强大的表达能力。  第一部分:C 语言基础入门     变量、数据类型与运算符: 从最基本的构建块开始,我们将详细介绍 C 语言支持的各种数据类型,包括整型、浮点型、字符型以及布尔型(在 C99 标准及之后)。我们将深入理解它们在内存中的表示方式,以及各种运算符(算术、关系、逻辑、位运算等)的工作原理和优先级。本部分将通过大量的实例,帮助读者熟练掌握变量的声明、初始化和使用,以及如何利用运算符进行高效的数据操作。    控制流程: 程序之所以能够“思考”和“决策”,离不开控制流程语句。我们将系统讲解顺序结构、选择结构(if-else, switch-case)和循环结构(while, do-while, for)。每个结构都会配以生动形象的图示和实际应用场景,例如文件读写中的循环遍历,或者根据用户输入执行不同功能的条件判断。读者将学会如何运用这些语句来构建具有逻辑性的程序,解决复杂问题。    函数: 函数是 C 语言实现模块化和代码复用的核心。本书将详尽介绍函数的定义、声明、参数传递(传值与传址)以及返回值。我们将探讨递归函数的概念和应用,并演示如何设计和调用复杂的函数库,从而提高代码的可读性和可维护性。大量的示例将展示如何将大型问题分解为小型、易于管理的函数。    数组与字符串: 数组作为存储同类型数据的结构,是 C 语言中不可或缺的数据结构。我们将深入讲解一维数组、多维数组的声明、初始化和访问。特别地,本书将花大力气介绍 C 语言中字符串的本质——字符数组,以及相关的字符串处理函数(如 `strlen`, `strcpy`, `strcat`, `strcmp` 等)的使用和原理。通过实际操作,读者将掌握如何高效地管理和处理文本数据。    指针: 指针是 C 语言最强大也最具挑战性的特性之一。本书将循序渐进地引导读者理解指针的概念,包括指针变量的声明、取址运算符 `&` 和解引用运算符 ``。我们将深入探讨指针与数组的关系,函数指针、指针数组、指向指针的指针等高级概念。通过精心设计的案例,例如动态内存分配、链表实现、字符串的高级操作等,读者将逐步克服对指针的畏惧,并充分发挥其在内存管理和底层操作中的优势。  第二部分:深入 C 语言特性与高级应用     结构体与联合体: 当需要组织不同类型的数据时,结构体和联合体便派上了用场。本书将详细介绍如何定义和使用结构体,包括嵌套结构体和指向结构体的指针。我们还将介绍联合体,并解释其在内存共享和节省空间方面的独特之处。实际项目将演示如何使用它们来构建复杂的数据模型。    文件输入/输出: 数据的持久化存储是任何应用程序都离不开的功能。本书将全面介绍 C 语言的标准文件 I/O 库,包括文本文件和二进制文件的读写操作。我们将讲解文件指针、打开、关闭文件,以及 `fprintf`, `fscanf`, `fread`, `fwrite` 等常用函数的使用。通过实例,读者将学会如何处理配置文件、日志文件以及进行数据备份等。    预处理器指令: 预处理器是 C 语言编译过程中的一个重要阶段。本书将讲解 `include`, `define`, `ifdef`, `ifndef` 等常用的预处理器指令,以及宏定义、条件编译等技术。读者将学会如何利用预处理器来提高代码的可移植性、可维护性,并实现代码的条件化编译。    内存管理: C 语言提供了直接的内存访问能力,这既是其高效的来源,也是潜在的风险所在。本书将深入讲解动态内存分配的函数,如 `malloc`, `calloc`, `realloc` 和 `free`。我们将详细解释内存泄漏、野指针等常见问题,并教授如何编写安全可靠的内存管理代码,确保程序的稳定运行。    数据结构与算法基础: 在掌握了 C 语言的基础后,本书将进一步引导读者接触一些基本但至关重要的数据结构和算法。我们将通过 C 语言实现单向链表、双向链表、栈、队列等。同时,还将介绍简单的排序算法(如冒泡排序、选择排序)和查找算法(如顺序查找、二分查找),并分析它们的时空复杂度。这部分内容将为读者进一步学习更复杂的数据结构和算法打下坚实的基础。  第三部分:面向实际应用的 C 语言编程     错误处理与调试: 编写健壮的程序离不开有效的错误处理和调试机制。本书将介绍 C 语言中常见的错误类型,并讲解如何利用返回值、错误码和 `errno` 等机制进行错误检测和处理。同时,我们将介绍常用的调试工具(如 GDB)和调试技巧,帮助读者快速定位和修复程序中的 bug。    位操作与底层编程: C 语言因其接近硬件的特性,在系统编程、嵌入式开发等领域有着广泛的应用。本书将深入讲解位运算符,以及如何利用它们进行高效的位操作。我们将通过实例展示如何使用位操作来处理硬件寄存器、实现高效的数据压缩或加密算法。    C 语言在现代软件开发中的地位: 尽管高级语言层出不穷,C 语言依然是许多关键技术的基础。本书将探讨 C 语言在操作系统(如 Linux 内核)、嵌入式系统、高性能计算、游戏开发、网络编程(如 socket 编程)等领域的应用,并分析其在这些领域不可替代的原因。    进阶主题展望: 为帮助读者更好地规划后续学习路径,本书还将简要介绍 C 语言的一些进阶主题,例如多线程编程、网络通信协议(TCP/IP)、与其他语言的交互(如 C++),以及一些现代 C 语言的特性(如 C11, C18 标准)。  本书的独特之处:     循序渐进的教学设计: 从最基础的概念出发,逐步深入到高级主题,确保每个读者都能找到适合自己的学习节奏。    丰富的实战案例: 每个知识点都配有精心设计的、可运行的 C 语言代码示例,并配有详细的解释,帮助读者理解概念的实际应用。    注重底层原理: 深入剖析 C 语言的内存模型、编译过程等底层原理,让读者知其然,更知其所以然。    面向未来的视野: 不仅教授 C 语言本身,更强调其在现代软件开发中的价值和应用前景,激发读者的学习兴趣和职业规划。    高质量的图示与排版: 采用清晰易懂的图示和专业的排版,提升阅读体验,帮助读者更好地理解抽象的概念。  目标读者:     初学者: 对计算机编程感兴趣,希望系统学习一门强大的编程语言。    在校学生: 计算机科学、软件工程、电子工程等相关专业的学生,需要掌握 C 语言作为核心课程。    职业开发者: 希望巩固 C 语言基础,或者需要了解 C 语言在特定领域的应用(如嵌入式、系统底层)。    对计算机底层原理感兴趣的技术爱好者: 希望深入理解计算机是如何工作的,以及软件是如何执行的。  掌握 C 语言,您将不仅仅是学会一门编程语言,更是获得了一种强大的思维方式,一种解决问题的能力,以及一份通往更广阔技术世界的大门。本书期待与您一同踏上这段精彩的 C 语言探索之旅。