标题：C程序设计与项目实践
图书信息
  书名：C程序设计与项目实践
作者：王一萍、梁伟、金梅
出版社：清华大学出版社
出版日期：2011年9月第1版第1次印刷
ISBN：978-7-302-26922-9
定价：49.80元
封面设计
设计主题：
海天一色，扬帆起航
蕴含的意义：
1. 海阔天空：海阔凭鱼跃，天高任鸟飞。
2. 天、地、人合一，领悟程序设计之道。
3. 人与世界的关系，是起点也是终点。
设计要点：
海天分界线，按黄金分割线比例0.618。
内容介绍
C语言是近几十年来影响最为深远的程序设计语言，在它的基础上诞生了C++、Java和C#等当前非常流行并且极具生产力的程序设计语言，许多计算机专业人员和计算机爱好者都把C语言作为学习程序设计语言的首选。
本书不是一本大而全的C语言语法教科书，而是一个能够让初学者轻松入门和快速提高的“言传身教”者。在编写过程中，我们始终坚持理论与实践并重，理论深入浅出，高屋建瓴，实践扎扎实实、脚踏实地。
本书在系统化介绍C语言语法知识的前提下，致力于培养学生利用所学知识进行程序设计和项目实践的能力。全书通过数十个精心设计、由浅入深、贴近实际的案例和小项目的分析讲解，帮助他们学以致用、轻松入门和快速提高。本书案例精心设计，来源于长期的教学实践，覆盖了尽可能多的类型（如数值计算类、逻辑推理类、小游戏类、事务处理类、算法学习类、设计方法类等），每一个案例都尽可能贴近实用、有意义，让初学者爱学好学、容易上手，并且在学习过程中不知不觉、循序渐进地就掌握了众多实用的案例，积累了丰富的小项目开发实践经验。
本书一开始就促使程序设计初学者把学习的焦点集中在如何利用程序设计语言进行程序设计上，而不是死抠语法，纸上谈兵。“读书百遍，不如抄书一遍”，程序设计更是“读书百遍，不如敲书一遍”。为了便于初学者学习，本书列出了所有案例和项目的完整源代码以及运行效果图，供学习者阅读、分析、领悟和超越。
本书作为程序设计类教材，着重强调超越语言的各种语言概念和指导程序设计实践的相关思想与理念。从一开始就强调注重代码的书写风格，便于初学者模仿，逐渐养成良好的程序设计习惯。侧重讲解了迭代式、增量式的模块化程序分析、设计方法。在案例和小项目实践中逐步地引入了测试、程序的调试、输入验证、持久存储等使程序更加健壮和实用化的考虑。同一个案例或小项目在不同的章节往往采用不同的数据结构、算法以及程序架构来进行重构，使它们尽可能地贴近实际，让学习者持久地思考和改进它们，为将来企业级的开发做足准备。
通过本教材，学习者可以在贴近实际的案例和项目中更容易地理解和掌握相关的程序设计语言的概念和语法知识，奠定扎实的基本功，同时积累丰富的小项目开发经验。
本书注重教材的可读性和实用性，在每章的开头都给出了本章的学习目标，重要的知识点都给出了完整的程序示例和运行效果，结尾部分给出了本章知识点的总结，并在习题与实践中给出了课后进一步提升的程序设计实践项目。
本书共分9章：
第1章C语言程序设计导引，介绍什么是计算机、什么是程序、什么是程序设计语言、什么是程序设计、C语言的相关背景知识（历史沿革及特点）、C程序设计快速入门三要素（快速开发HelloWorld程序、掌握基本的输入/输出手段、C程序的基本组织结构），以及HelloWorld程序扩展的几个小案例（字符界面设计、纸张对折到月球、IPv6地址分配、计算机的计时系统、超市计费系统1.0版）。
第2章数据类型、运算符与表达式，介绍C语言的基本数据类型、常量和变量、各种运算符和表达式、数据类型转换，以及两个小案例（计算机中的数学和3种方式交换两个整数）。
第3章算法与流程控制，介绍什么是算法、算法的流程图表示、基本的流程控制语句（顺序、分支、循环），以及3个小案例（超市计费系统2.0版、模拟龟兔赛跑1.0版、猜数游戏1.0版）。
第4章函数与模块化程序设计，介绍函数的概念、定义、声明、调用，参数传递的两种方式，函数的嵌套和递归调用、变量的存储类别、生存期和作用域，编译预处理（包含头文件、宏定义及宏展开、条件编译及特殊符号处理），模块化的编译和链接，以及5个利用模块化方法开发的小案例（模拟龟兔赛跑2.0版、猜数游戏2.0版、模拟银行ATM机、石头剪刀布游戏、小学生四则运算练习软件）。
第5章数组，介绍数组的概念、定义及使用，一维数组和二维数组的应用，基本的排序和查找算法，字符串操作相关库函数，以及相关的案例（学籍管理系统、奇数阶魔方矩阵）。
第6章指针，介绍地址与指针的概念，指针的基本运算，空指针与指向void的指针、多级指针的概念，指针与一维/二维数组的关系，指针与函数的关系（指向函数的指针、指针作为函数的参数、返回指针的函数、命令行参数与动态内存分配），以及相关的案例（寻找最长输入行、输入串模式匹配、输入验证处理、基本数据类型的存储表示）。
第7章用户定制数据类型，介绍结构体、共用体的概念、定义及使用，结构体与数组指针和函数的关系，链表的概念、创建及基本操作，枚举类型，typedef自定义类型，位段与位操作，以及相关的案例（C关键词查找统计、表达式求值）。
第8章文件，介绍文件的概念、作用、基本操作（打开与关闭、顺序读写、随机读写、错误检测等），以及相关的案例（英语单词测试系统、软件产权保护系统）。
第9章综合案例分析，介绍利用不同数据结构进行迭代、增量开发的同学通讯录系统和骑士飞行棋游戏的完整开发过程。
本书为任课教师免费提供电子课件，包括教学用PPT、全部案例和项目的完整源代码，以方便教学者进行教学，需要者可登录清华大学出版社网站。
本书特别适合作为高等院校相关专业学生学习程序设计课程的教材，也可作为相关人员自学程序设计的教材和参考书。
本书由王一萍主编，梁伟、金梅参编。第1章、第4章、第6章、第9章由梁伟编写，第2章、第8章和附录由金梅编写，第3章、第5章、第7章由王一萍编写。全书由王一萍、梁伟统稿。 
精彩论述
计算机的基本工作原理：
现代计算机几乎都采用冯·诺依曼的存储程序体系结构。它有5大部件：输入设备、输出设备、存储设备、运算器和控制器。其中运算器和控制器合称为中央处理单元，即CPU。
计算机在组织结构上非常类似于生产性的企业：输入设备相当于原材料的采购部门，输出设备相当于最后产品的销售部门，存储设备相当于企业的仓库，运算器相当于生产车间，控制器相当于企业的经营管理部门。
在工作流程上，计算机也和生产性的企业非常类似：生产性的企业在经营管理部门（控制器）的指导控制下，通过采购部门（输入设备）采购相应的原材料（待加工的数据），存储在仓库（存储器）中，生产开始时将原材料从仓库（存储器）中取出送至生产车间（运算器）进行加工生产，生产的半成品或最终成品又临时存储在仓库（存储器）中，最后将成品交由销售部门（输出设备）进行销售，从而完成整个生产流程。
--------以上论述摘自《C程序设计与项目实践》一书第一章。
学习任何程序语言快速入门三要素：
1. 尽快开发出该语言版本的HelloWorld程序。
2. 掌握和理解该语言版本的基本程序结构。
3. 找出该语言中如何进行输入输出。
--------以上论述摘自《C程序设计与项目实践》一书第一章。
程序设计三要素：
1. 数据结构的分析和设计； 
2. 算法（即处理逻辑，微观层次）的分析和设计；
3. 系统架构（即处理逻辑，宏观层次）的分析和设计。 
--------以上论述摘自《C程序设计与项目实践》一书第一章。
图书目录
第1章　C语言程序设计导引 
1.1  程序与程序设计语言 
1.1.1　计算机与程序 
1.1.2　程序设计语言 
1.1.3　程序开发过程 
1.2  C语言相关知识概述 
1.2.1  C语言的历史沿革 
1.2.2　C语言的特点 
1.3  C语言程序设计快速入门 
1.3.1　HelloWorld程序开发过程 
1.3.2　C语言的基本输入/输出 
1.3.3　C语言程序的基本结构 
1.3.4　C语言程序的简单调试 
1.4  案例分析 
1.4.1　HelloWorld程序的扩展 
1.4.2　纸张对折多少次到月球 
1.4.3　IPv6地址能分配多久 
1.4.4　计算机系统中的计时问题 
1.4.5　超市计费系统1.0版 
小结 
习题与实践 
第2章　数据类型、运算符与表达式 
2.1  数据类型 
2.1.1  基本数据类型 
2.1.2  构造数据类型 
2.1.3  指针和void类型 
2.2  常量与变量 
2.2.1  常量 
2.2.2  变量 
2.3  运算符与表达式 
2.3.1  算术运算符 
2.3.2  赋值运算符 
2.3.3  关系运算符 
2.3.4  逻辑运算符 
2.3.5  逗号运算符 
2.3.6  条件运算符 
2.3.7  位运算 
2.3.8  表达式求值 
2.4  数据类型转换 
2.4.1  自动转换 
2.4.2  强制转换 
2.5  案例分析 
2.5.1  计算机中的数学 
2.5.2　交换两个整数 
小结 
习题与实践 
第3章　算法与流程控制 
3.1　算法的概念与表示 
3.1.1  算法的概念 
3.1.2  算法举例 
3.1.3　算法的特征 
3.1.4  算法的表示 
3.2  顺序流程控制 
3.2.1  赋值语句 
3.2.2  表达式语句 
3.2.3  函数调用语句 
3.2.4  空语句与复合语句 
3.3　选择流程控制 
3.3.1　if语句 
3.3.2　switch语句 
3.3.3　多分支结构总结 
3.4　循环结构程序设计 
3.4.1  引述 
3.4.2　while语句 
3.4.3　do...while语句 
3.4.4　for 语句 
3.4.5　循环中的问题 
3.4.6　循环的嵌套 
3.5  案例分析 
3.5.1　超市计费系统2.0版 
3.5.2　模拟龟兔赛跑1.0版 
3.5.3　猜数游戏1.0版 
小结 
习题与实践 
第4章　函数与模块化程序设计 
4.1  函数 
4.1.1　函数的定义与声明 
4.1.2　函数的调用与传参 
4.1.3　函数的嵌套调用与递归调用 
4.2  变量的存储属性 
4.2.1　变量的生存期与作用域 
4.2.2　变量的存储类别 
4.3  编译预处理 
4.3.1　包含头文件 
4.3.2　宏定义及宏展开 
4.3.3　条件编译 
4.3.4　特殊符号处理 
4.4  模块化编译链接 
4.4.1　分别编译 
4.4.2　链接 
4.5  案例分析 
4.5.1　模拟龟兔赛跑2.0版 
4.5.2　猜数游戏2.0版 
4.5.3　模拟银行ATM自动取款机 
4.5.4　石头剪刀布游戏 
4.5.5　小学生四则运算练习软件 
小结 
习题与实践 
第5章　数　　组 
5.1　数组的引入 
5.2  一维数组 
5.2.1  一维数组的定义 
5.2.2  一维数组元素的引用 
5.2.3  一维数组的初始化 
5.2.4  一维数组与函数的关系 
5.2.5  一维数组的简单应用 
5.2.6  排序与查找 
5.3  二维数组 
5.3.1  二维数组的定义 
5.3.2  二维数组元素的引用 
5.3.3  二维数组的初始化 
5.3.4  二维数组的应用 
5.4  字符数组与字符串 
5.4.1  字符数组与字符串 
5.4.2  字符串输入输出 
5.4.3  字符串处理库函数 
5.4.4  字符串的应用 
5.5  案例分析 
5.5.1  学籍管理系统 
5.5.2  奇数阶魔方矩阵 
小结 
习题与实践 
第6章　指　　针 
6.1  指 针 基 础 
6.1.1  指针的概念 
6.1.2  指针的运算 
6.1.3  空指针与指向void的指针 
6.1.4  多级指针 
6.2  指针与数组 
6.2.1  指向数组元素的指针 
6.2.2  指向数组的指针 
6.2.3  指针数组 
6.2.4  数组作为函数参数 
6.2.5  指针与字符串 
6.3  指针与函数 
6.3.1  指针作为函数的参数 
6.3.2  指向函数的指针 
6.3.3  返回指针的函数 
6.3.4  命令行参数 
6.3.5  动态内存分配 
6.4  案例分析 
6.4.1  寻找最长行 
6.4.2  输入模式匹配 
6.4.3  输入验证处理 
6.4.4  基本数据类型的存储表示 
小结 
习题与实践 
第7章　用户定制数据类型 
7.1  结构体类型基础 
7.1.1  结构体类型定义 
7.1.2  结构体变量的定义及初始化 
7.1.3  结构体变量的引用 
7.2  结构体数组 
7.2.1  结构体数组的定义与初始化 
7.2.2  结构体数组元素的引用 
7.3  结构体指针 
7.3.1  指向结构体变量的指针 
7.3.2  指向结构体数组的指针 
7.4  结构体与函数 
7.4.1  结构体变量作为函数参数 
7.4.2  结构体指针作为函数参数 
7.4.3  返回结构体的函数 
7.5  链表 
7.5.1  链表的概念 
7.5.2  简单链表 
7.5.3  链表的基本操作 
7.6  共用体类型 
7.7  枚 举 类 型 
7.8  typedef自定义类型 
7.9  位段与位操作 
7.9.1  位段结构类型及位段结构变量
的定义 
7.9.2  位段结构的使用 
7.10  案例分析 
7.10.1  C关键词查找统计 
7.10.2  表达式求值 
小　结 
习题与实践 
第8章　文件 
8.1  文件的相关概念 
8.1.1  文件及文件分类 
8.1.2  文件名、目录与路径 
8.1.3  文件指针与文件位置指针 
8.2  文件的打开与关闭 
8.2.1  文件的打开 
8.2.2  文件的关闭 
8.3  文件的读写操作 
8.3.1  文件的顺序读写 
8.3.2  文件的随机读写 
8.4  文件检测函数 
8.4.1  文件结束检测函数feof函数 
8.4.2  读写文件出错检测函数 
8.4.3  文件出错标志和文件结束标志
置0函数 
8.5  案例分析 
8.5.1  英语单词测试系统 
8.5.2  软件产权保护系统 
小结 
习题与实践 
第9章　综合案例分析 
9.1  同学通讯录系统 
9.2  骑士飞行棋游戏 
小结 
习题与实践 
附录A　运算符的优先级与结合性 
附录B　ASCII码表 
附录C　C语言库函数 
参考文献