标题：新概念C程序设计大学教程
图书信息
作者：张基温 
图书详细信息：ISBN：9787302283126定价：35元印次：1-1装帧：平装印刷日期：2012-6-12
图书简介
本书是一本基于能力培养体系的C语言程序设计教材。本书按照作者提出的“提出问题、分析问题-编写程序、语法说明-程序测试、结果分析”的思路，并按照“前期以培养解题思路为主，语法知识够用就行；后期补充必要的语法细节”的原则编写，旨在引导读者在逻辑思维能力、语法应用能力和程序测试能力3个方面同步提高。全书分为3篇。第1篇从几个经典问题入手，将读者带入穷举、迭代、递归、随机模拟、时间步长、事件步长等基本逻辑思维训练之中，并相对集中地融入基本语法，为初学者奠定程序设计的基本知识和能力。第2篇通过数组、结构体和指针3种构造数据类型以及常用算法设计策略的介绍，使读者的程序设计能力上升到“数据结构 + 算法 = 程序”的水平。第3篇对C语言重点语法进行总结、提升和拓展，使读者在发挥C语言优势方面得到提升。本书结构新颖、概念准确，鱼渔并重、和木皆宜，例题经典、习题丰富、题型全面，适应面宽、注重效果，适合教学、兼顾自学，与教育部计算机科学与技术教学指导委员会推荐的《高等学校计算机科学与技术专业：公共核心知识体系与课程》中关于程序设计课程的要求一致，可以作为高等学校各专业的新一代程序设计课程教材，也可供从事程序设计相关领域的人员自学或参考。
图书前言
（一）在信息时代，程序设计会被人称为计算机以及相关专业的看家本领，然而不仅如此，在程序设计中所蕴涵的逻辑，是解决所有领域复杂问题的根基，同时在程序设计课程中所进行的逻辑思维训练，所有人都可从中获益。但是，尽管程序设计课程已经开设几十年了，教学效果却很不尽如人意。程序设计涉及逻辑思维、语言和方法3方面内容。然而，早期的程序设计课程仅仅是语言手册的改编。因此，从20世纪80年代，就开始着手改变这种状况，于1985年出版的我的第一本著作--《BASIC程序设计》中就在原来的语法体系中引入典型算法和软件工程思想。以后受CIT考试的启发，在为NIT（国家信息技术考试）编写的《程序设计（C语言）》（清华大学出版社，1999）一书中，把程序测试引入到程序设计教材中。之后，几家出版社先后约稿，出版了《新概念C语言程序设计》（中国铁道出版社，2003) 、《C语言程序设计案例教程》（清华大学出版社，2004) 、《新概念C程序设计教程》（南京大学出版社，2007) 、《新概念C语言教程》（中国电力出版社，2011) 。在这些教材中，逐步形成并完善了按照内容体系的程序设计教材。所以将它们以“新概念”命名，是想表明这种全新理念的程序设计体系。让我欣慰的是，随着这几本书的不断改进，类似的书也陆续问世，品种不断增加，说明面向问题，按照“问题分析-设计代码-语法说明”线索组织程序设计教学的理念日益被广泛接受。（二）本书应清华大学出版社之邀而撰写，它是对前几本教材的进一步完善与改进。全书分为3篇。第1篇由5个单元组成，在这5个单元中，以几个经典问题为载体，以穷举、迭代、递归、随机模拟、时间步长、事件步长等基本算法为主线，将设计思路、程序测试方法和C语言基本语法知识融于其中。第2篇由4个单元组成。第6～8单元分别介绍数组、结构体和指针这3种支持程序数据结构的重要类型，使读者可以初步领略数据结构对于程序设计的重要性，第9单元介绍几种常用的算法设计策略。通过这4个单元，使“数据结构 + 算法 = 程序”的思想在读者心中扎根。前面两篇，按照“训练解题思路为主，语法够用就行”的原则编写。第3篇用6个单元补充了一些重要的语法细节，使读者能在前两篇初步掌握了程序设计的基本方法的基础上，将C语言程序设计的学习引向深入。这样不仅建立了一种全新的内容体系，将应试教育向能力培养方面做了较大幅度的转变，同时也与教育部计算机科学与技术教学指导委员会推荐的《高等学校计算机科学与技术专业：公共核心知识体系与课程》中关于程序设计课程的要求一致，读者可以按照自己的专业定位选择其中的有关内容。（三）为了能有的放矢地进行训练，本书以二级节为单位给出习题。习题分为4个栏目：概念辨析、代码解析、探索验证和开发练习。“概念辨析”主要提供了一些选择题和判断题，旨在提高读者对基础语法知识的认知。“代码解析”包括指出程序（或代码段）执行结果、改错和填空，旨在提高读者的代码阅读能力。因为读程序也是程序设计的一种基本训练。“探索验证”主要是用于提示或者指导学习者如何通过自己上机验证来提高掌握语法细节的能力。除了这个栏目中的习题外，学习者最好也能通过设计程序验证自己对于概念辨析栏目中的习题的判断是否正确。“开发练习”是一种综合练习，应当要求学习者写出开发文档。内容主要包括问题（算法）分析、代码设计、测试用例设计、测试及调试结果分析等几个部分，重点应当放在问题分析、代码设计和测试用例的设计上。要把这些工作都做好，再上机调试、测试，不要什么还没有设计出来就上机。（四）在本书即将出版之际，由衷地感谢在本书写作过程中参与收集资料、程序调试以及校阅工作的姚威、张秋菊、文明瑶、杜勇、丁群、朱莎、史林娟、张展为、张有明。同时，也殷切地期待着广大读者和同仁的批评和建议。让我们共同把程序设计课程的改革做得更有实效。
张基温2012年2月
图书目录
第1篇 C语言程序设计初步第1单元 简单的C语言程序31.1 两个整数相加31.1.1 两个整数常数相加的C语言程序31.1.2 C语言程序的编译与连接31.1.3 带有输出操作的C程序4习题1.161.2 变量初步81.2.1 使用变量的两整数相加程序81.2.2 从键盘给变量输入值10习题1.2121.3 用浮点数进行除运算141.3.1 整数相除的问题141.3.2 两个浮点数相除的C程序15习题1.316第2单元 选择结构182.1 将从键盘输入的任意两个数按升序输出182.1.1 问题分析与参考代码182.1.2 关系运算符与关系表达式192.1.3 if-else二分支选择结构202.1.4 程序测试212.1.5 程序的书写风格22习题2.1232.2 三中取大252.2.1 算法分析与参考代码252.2.2 逻辑运算符与逻辑表达式262.2.3 多分支选择结构中if与else的配对规则272.2.4 测试用例设计： 语句覆盖与分支覆盖282.2.5 else if结构292.2.6 条件运算符30习题2.2312.3 字符分类342.3.1 字符类型352.3.2 基于整型值匹配的switch结构372.3.3 算法分析与参考代码372.3.4 程序测试用例设计的等价分类法402.3.5 switch结构与if-else结构的比较41习题2.342第3单元 重复结构463.1 C语言重复结构基础463.1.1 C语言的三种重复结构463.1.2 累加器程序473.1.3 打印九九乘法表53习题3.1 563.2 穷举653.2.1 求素数653.2.2 搬砖问题673.2.3 推断名次69习题3.2733.3 迭代与递推783.3.1 用辗转相除法求两个正整数的最大公因子783.3.2 Fibonacci数列813.3.3 猴子吃桃子833.3.4 用二分迭代法求解一元二次方程85习题3.388第4单元 用函数组织C程序924.1 函数基础924.1.1 函数定义924.1.2 函数调用944.1.3 函数原型声明954.1.4 局部变量与全局变量964.1.5 模块化程序设计99习题4.11024.2 递归1054.2.1 阶乘的递归计算1054.2.2 汉诺塔106习题4.2109第5单元 计算机模拟1115.1 随机问题模拟1115.1.1 产品随机抽样1115.1.2 用蒙特卡洛法求π的近似值114习题5.11155.2 基于步长的模拟1165.2.1 事件步长法--中子扩散问题1165.2.2 时间步长法--盐水池问题118习题5.2122第2篇 数据结构+算法第6单元 顺序地组织同类型数据--数组类型1276.1 数组基础1276.1.1 扑克牌的表示与数组定义1276.1.2 扑克牌查找： 数组元素引用与数组名参数1296.1.3 扑克洗牌的随机模拟1326.1.4 扑克牌整理： 数组元素排序1336.1.5 扑克发牌： 二维数组应用135习题6.11396.2 字符串1436.2.1 字符串与字符数组1436.2.2 字符串输入输出1446.2.3 字符串的其他操作147习题6.2150第7单元 描述一类对象的属性--结构体类型和共用体类型1537.1 结构体类型基础1537.1.1 结构体类型的定义1537.1.2 结构体类型的实例化1547.1.3 结构体变量的引用155习题7.11577.2 结构体数组1597.2.1 结构体数组的定义与初始化1597.2.2 结构体数组元素的引用161习题7.21637.3 union类型1657.3.1 共用体类型的定制与共用体变量的定义1657.3.2 共用体类型与结构体类型的比较1657.3.3 共用体变量的应用167习题7.3168第8单元 指针类型1718.1 指针的概念1718.1.1 指针=基类型+地址1718.1.2 悬空指针、空指针与void指针1738.1.3 多级指针1748.1.4 指针的操作174习题8.11778.2 数组的指针形式1808.2.1 数组名与指向数组的指针1808.2.2 二维数组的指针形式1828.2.3 指针与C字符串184习题8.21868.3 指针参数1888.3.1 变量地址传送1898.3.2 数组地址传送1908.3.3 字符指针参数1948.3.4 带参主函数197习题8.3199第9单元 常用算法设计策略??2029.1 分治策略2029.1.1 二分查找2029.1.2 快速排序2049.1.3 自行车带人问题207习题9.12099.2 回溯策略2119.2.1 迷宫问题2119.2.2 使用堆栈组织搜索过程215习题9.22209.3 贪心策略2219.3.1 旅行费用问题2229.3.2 删数问题224习题9.32279.4 动态规划228习题9.4232第3篇 深入学习C语言第10单元 C语言中常量的表示23710.1 字面常量23710.1.1 整型字面常量的表示和辨识23710.1.2 浮点类型字面常量的表示和辨识238习题10.123910.2 宏24110.2.1 宏定义24110.2.2 使用宏应当注意的几点24110.2.3 带参宏定义243习题10.224510.3 const修饰符24810.3.1 用const“固化”变量24810.3.2 用const修饰指针249习题10.325210.4 枚举类型25310.4.1 枚举类型及其定义25310.4.2 枚举变量的定义25410.4.3 对枚举变量和枚举元素的操作254习题10.4255第11单元 数据类型25711.1 基本数据类型特性25811.1.1 整型数据类型的主要特性25811.1.2 浮点数据类型的主要特性260习题11.126111.2 数据类型转换26211.2.1 数据类型转换的一般规则26211.2.2 数据类型转换的副作用与注意事项265习题11.226911.3 typedef和sizeof操作符27011.3.1 typedef27011.3.2 sizeof运算符272习题11.3272第12单元 C程序中变量的访问属性27412.1 变量访问属性的概念27412.1.1 变量的存储类型与生存期27412.1.2 标识符的作用域27512.1.3 标识符的链接属性276习题12.127612.2 C语言程序实体的存储类型27712.2.1 C程序中的局部变量27712.2.2 C程序中的外部变量279习题12.228312.3 C程序中的动态内存分配28712.3.1 申请存储空间28812.3.2 释放一个指针指向的存储空间28912.3.3 修改一个指针指向的存储空间大小290习题12.3291第13单元 格式化输入输出函数详解29213.1 格式化输出函数printf ()29213.1.1 格式参数结构29213.1.2 基本格式符29213.1.3 长度修饰符29313.1.4 域宽与精度说明29313.1.5 前缀修饰符294习题13.129613.2 格式化输入函数scanf ()29713.2.1 地址参数29713.2.2 格式参数结构与工作机制29713.2.3 数值数据的输入控制30013.2.4 scanf ()与输入缓冲区30113.2.5 字符型数据的输入控制30213.2.6 scanf ()的停止与返回306习题13.2306第14单元 文件30814.1 C文件的基本概念30814.1.1 I/O流与缓冲30814.1.2 文件及其分类30914.1.3 FILE类型及其指针309习题14.131014.2 C文件操作的一般过程31014.2.1 文件打开31114.2.2 文件读写定位与读写操作31214.2.3 文件关闭313习题14.231414.3 文件操作程序示例31714.3.1 写若干行字符串到文本文件31714.3.2 文件复制317习题14.3318第15单元 位运算与位段32015.1 位运算32015.1.1 按位逻辑运算32015.1.2 移位运算32215.2 位段322习题15325附录327附录A C语言的关键字及其用途327附录B C语言运算符的优先级和结合方向328附录C 编译预处理命令328C.1 宏定义328C.2 文件包含329C.3 条件编译329附录D C语言常用标准库函数329D.1 数学函数330D.2 字符函数和字符串函数331D.3 输入输出函数331D.4 动态内存分配函数333D.5 退出程序函数333D.6 数值转换函数334D.7 时间和日期函数334参考文献335[1]