标题：C语言程序设计（第3版）
图书信息
作者：张磊 
图书详细信息：ISBN：9787302273233定价：34.5元印次：3-2装帧：平装印刷日期：2013-1-21
图书简介
本书面向程序设计初学者编写，以“注重基础、注重方法、注重编程、注重应用”为指导思想，灵活运用案例教学、任务驱动、启发式教学等多种教学方法，对C语言程序设计的语言知识和程序设计的方法过程进行了系统介绍，特别适合将“C语言程序设计”作为第一门程序设计课程的高校学生。全书共有9章，分别为程序设计概述、简单程序设计、分支结构程序设计、循环结构程序设计、数组程序设计、函数程序设计、指针程序设计、结构体程序设计和文件程序设计。每章之后均设有实验指导，其内容与教学内容密切衔接、相辅相成。本书配有教学课件、程序源码和试题库等丰富资源。本书适合作为高等院校C语言程序设计等相关课程的教材，也可用作程序设计人员及程序设计爱好者的自学参考书。
图书前言
本书面向程序设计初学者，全书以程序设计为主线，突出主干知识教学，突出C语言课程的应用性、实践性特点，注重能力培养。本书主要具有以下特点。 (1) 加强算法设计的教学。在多年的教学实践中我们体会到，学生在学习程序设计时遇到的困难大部分发生在算法设计环节，尤其是初学者，面对实际问题往往无所适从，难以设计用程序解决问题的算法。本书从两个方面努力加强算法设计的教学，以提高学生的程序设计能力：一是注重程序执行过程的分析和说明，加强与计算机的沟通，提高读者的程序阅读能力，进而达到算法学习的目的；二是通过应用实例，加强问题分析和算法设计的教学。 (2) 本书的实例选择力求做到“科学性、趣味性、应用性和易学性”的统一，并按照不同的学习功能进行分类设置。一类是简单明了的演示性例题，重点说明C语言的语法知识，实现基本概念、基本语法的即时应用；另一类是培养程序设计能力的设计性例题，通过问题分析与算法设计、程序实现、程序讨论和说明等内容重点介绍程序设计方法，突出算法设计和程序编写、调试的教学，以加强程序设计的能力训练。 (3) 突出案例教学。书中凡是适合以程序案例开始的新知识，均通过程序示例和程序说明予以引导，首先建立感性认识，然后展开相关内容，进行知识的系统介绍。 (4) 本书的程序设计举例在相关章节保持了连续性，前后衔接，逐步扩展，既便于教师讲解，又便于学生学习理解。例如，学生成绩问题自第1章引入，一直贯穿到建立和使用学生成绩文件，相关举例在第2~5章、第8章、第9章都有介绍。 (5) 本书通过设置“问题思考”、“观察与思考”、“拓展知识”等栏目，灵活运用启发式教学方法，有针对性地引导读者进一步讨论和思考问题。当提示读者从逻辑思维的角度对某些问题做进一步思考时，通过“问题思考”栏目进行启发；当提示读者根据程序运行情况对程序做进一步改进、完善时，通过“观察与思考”栏目进行启发；当需要进一步延伸某些教学内容时，通过“拓展知识”栏目进行适当介绍。 (6) 主教材与实验指导合二为一，在每章之后设置实验及指导内容，不再单独配套实验指导教材，既方便学生实验课学习，也降低教材成本。 (7) 理论教学与实验教学有机结合。本书的实验指导分为基础实验和综合实验两部分。基础实验内容紧密结合课程中的例题程序设置，以“理解→验证→完善→扩充→提高”为实验教学线索，重在巩固课堂教学知识，提高调试程序及完善程序的能力；综合实验以算法设计和程序实现为重点，训练运用所学知识解决实际问题的能力。这样彻底解决了实验教学内容与主教材教学内容并行设置、孤立设置的问题，避免出现主教材与实验教材顾此失彼的情况。本书编者秉承“建设精品教材，培养优秀人才”的教育理念，广泛吸收、借鉴其他优秀教材的长处，在前期教材建设的基础上，融入多年的教学实践经验和教学研究成果，编写完成了本书，力求深入浅出、循序渐进、语言流畅、通俗易懂、便于讲解和学习。但由于编者水平所限，书中难免存在不足之处，敬请读者批评指正。参加本书编写工作的还有冯伟昌、黄忠义、魏建国、张元国、王桂东、王金才、李竹健、张文、高永存、王涛、薛莹、徐英娟、马明祥、滕秀荣、彭玉忠等。计算机程序设计爱好者潘振昌、张濛、徐思杰等为调试本书中的程序做了大量工作，在此一并表示感谢。
编 者2012年7月
图书目录
第1章 程序设计概述1 1.1 程序设计语言1 1.2 算法21.2.1 算法概念与算法描述31.2.2 算法的逻辑结构41.2.3 算法的特性71.2.4 算法评价7 1.3 程序设计与实现71.3.1 程序设计的基本过程71.3.2 使用Visual C++ 6.0实现C语言程序81.3.3 程序设计示例10 1.4 C语言程序的基本结构131.4.1 程序的函数化结构131.4.2 程序中的常量和变量151.4.3 程序中的基本语句161.4.4 标识符与保留字161.4.5 程序风格17 小结18 习题118 实验1 编辑运行C语言程序20第2章 简单程序设计23 2.1 用printf()函数输出数据232.1.1 固定数值的加法程序242.1.2 printf()函数25 2.2 用scanf()函数输入数据292.2.1 任意数值的加法程序292.2.2 scanf()函数30 2.3 输入输出字符数据342.3.1 getchar()函数和putchar()函数352.3.2 字符输入输出应用举例35 2.4 语言知识补遗362.4.1 数据类型362.4.2 常量详解362.4.3 简单变量详解382.4.4 算术运算 412.4.5 赋值运算422.4.6 宏命令43 2.5 程序设计举例492.5.1 计算三角形面积 492.5.2 字母转换502.5.3 鸡兔同笼问题51 ??2.6 表达式中数据类型的自动转换52 ??2.7 用typedef命名数据类型53 ??2.8 使用C++命令输入输出数据542.8.1 简单的C++程序542.8.2 C++的输入和输出55 小结57 习题258 实验2 简单程序设计62第3章 分支结构程序设计64 3.1 简单条件的分支程序643.1.1 判断优等生程序643.1.2 关系表达式653.1.3 if语句66 3.2 复合条件的分支程序743.2.1 使用新标准的优等生程序743.2.2 逻辑表达式75 3.3 用switch语句实现分支控制77 3.4 goto语句80 3.5 条件运算81 3.6 分支结构应用举例833.6.1 闰年问题833.6.2 判断等边三角形843.6.3 求解一元二次方程853.6.4 学生成绩分等显示86 小结88 习题388 实验3 分支结构程序设计91第4章 循环结构程序设计96 4.1 while循环结构程序964.1.1 while循环程序示例964.1.2 while语句974.1.3 自增、自减运算99 4.2 do-while循环结构程序1014.2.1 do-while循环程序示例1014.2.2 do-while语句102 4.3 for循环结构程序1024.3.1 for循环程序示例1024.3.2 for语句1034.3.3 逗号表达式105 4.4 循环体中的控制命令1054.4.1 break命令1064.4.2 continue命令107 4.5 多重循环程序1084.5.1 多重循环程序示例1084.5.2 多重循环的一般结构109 4.6 循环结构应用举例1104.6.1 字符统计1104.6.2 比赛评分1114.6.3 学生成绩分等统计1134.6.4 求最大公约数1154.6.5 Fibonacci数列1164.6.6 乘法表1174.6.7 搬砖问题1184.6.8 找素数1204.6.9 哥德巴赫猜想121 小结122 习题4123 实验4 循环结构程序设计128第5章 数组程序设计131 5.1 一维数组程序设计1315.1.1 逆序输出数据程序1315.1.2 一维数组的定义1325.1.3 数值型一维数组的输入和输出1335.1.4 数值型一维数组的初始化1355.1.5 字符型一维数组的初始化1375.1.6 一维数组的存储138 5.2 字符串操作1385.2.1 字符串的输入输出1385.2.2 多字符串操作函数1435.2.3 其他字符串操作函数145 5.3 二维数组程序设计1455.3.1 矩阵求和程序1465.3.2 二维数组的定义1465.3.3 二维数组的输入和输出1475.3.4 二维数组的初始化1485.3.5 二维数组的存储150 5.4 数组应用1515.4.1 排序1515.4.2 查找1535.4.3 单词统计1555.4.4 矩阵运算1565.4.5 成绩处理1615.4.6 杨辉三角形164 小结165 习题5166 实验5 数组程序设计168第6章 函数程序设计171 6.1 函数概述171 6.2 自定义函数示例172 6.3 函数定义及调用1736.3.1 函数定义1736.3.2 函数值和return命令1756.3.3 函数调用176 6.4 函数嵌套和递归函数1816.4.1 函数嵌套1826.4.2 递归函数183 6.5 数组作为函数的参数1876.5.1 数组元素作为函数参数1876.5.2 一维数组名作为函数参数1896.5.3 用一维数组求解二维数组问题191 6.6 函数应用举例1926.6.1 计算长方体的面积1926.6.2 利用递归函数计算Fibonacci数列1936.6.3 排序函数的设计与应用194 6.7 变量的作用域和存储类型1966.7.1 变量的作用域1966.7.2 变量的存储类型198 小结200 习题6200 实验6 使用自定义函数的程序设计205第7章 指针程序设计208 7.1 指针概述2087.1.1 指针变量2087.1.2 变量的直接访问和间接访问209 7.2 指针变量的定义和使用2097.2.1 指针变量程序示例2097.2.2 定义指针变量2107.2.3 使用指针变量210 7.3 指针与数组2137.3.1 指针与一维数组2137.3.2 指针与二维数组2167.3.3 指针与字符串2197.3.4 指针数组221 7.4 指针作为函数的参数2227.4.1 简单指针变量作函数参数2227.4.2 指向数组的指针作函数的参数2247.4.3 字符串指针作函数的参数2257.4.4 指针数组作函数的参数226??7.4.5 使用带参数的main()函数228 7.5 指针函数和指向函数的指针变量2297.5.1 指针函数229??7.5.2 指向函数的指针变量230 7.6 指针应用举例231 小结237 习题7237 实验7 指针程序设计242第8章 结构体程序设计245 8.1 结构体数据概述245 8.2 结构体类型和结构体变量2468.2.1 使用结构体变量存储学生信息2468.2.2 定义结构体数据类型2478.2.3 结构体变量的定义及使用248 8.3 结构体数组2528.3.1 结构体数组概述2528.3.2 结构体数组的初始化2538.3.3 利用结构体数组管理学生信息253 8.4 结构体指针变量2558.4.1 结构体指针变量的定义及使用2558.4.2 结构体指针作函数的参数257 8.5 使用链表动态存储数据2588.5.1 使用链表存储学生信息2588.5.2 链表的特点2598.5.3 动态内存管理函数2608.5.4 定义链表结构261 8.6 链表的基本操作2628.6.1 链表结点的插入2628.6.2 链表结点的删除2668.6.3 链表结点的查找268 8.7 结构体应用举例2718.7.1 字符串加密2718.7.2 学生成绩排序2738.7.3 Josephus问题276 小结279 习题8279 实验8 结构体程序设计284第9章 文件程序设计288 9.1 文件概述2889.1.1 文件的概念2889.1.2 文件的分类2899.1.3 文件的一般操作过程2909.1.4 文件的指针291 9.2 文件的基本操作2919.2.1 打开和关闭文件2929.2.2 最基本的文件读写函数293 9.3 文件的数据块读写操作2969.3.1 fwrite()函数2969.3.2 fread()函数298 9.4 文件的其他操作2999.4.1 文件的格式化读写3009.4.2 文件的随机读写3019.4.3 文件的字符串操作304 9.5 文件应用举例3059.5.1 文件复制3059.5.2 存储在文件中的学生成绩排序306 小结308 习题9308 实验9 文件程序设计311附录A C语言的运算符316附录B C语言的保留关键字318附录C 常用ASCII码字符对照表319参考文献320[1]