《C语言程式设计(第3版)》是一本张磊编制,由清华大学出版社在2013-1-21出版的书籍。
基本介绍
- 书名:C语言程式设计(第3版)
- 作者: 张磊
- ISBN:9787302273233
- 定价:34.5元
- 装帧:平装
- 印次::3-2
- 印刷日期::2013-1-21
图书简介
本书面向程式设计初学者编写,以“注重基础、注重方法、注重编程、注重套用”为指导思想,灵活运用案例教学、任务驱动、启发式教学等多种教学方法,对C语言程式设计的语言知识和程式设计的方法过程进行了系统介绍,特别适合将“C语言程式设计”作为第一门程式设计课程的高校学生。 全书共有9章,分别为程式设计概述、简单程式设计、分支结构程式设计、循环结构程式设计、数组程式设计、函式程式设计、指针程式设计、结构体程式设计和档案程式设计。每章之后均设有实验指导,其内容与教学内容密切衔接、相辅相成。本书配有教学课件、程式源码和试题库等丰富资源。
本书面向程式设计初学者,全书以程式设计为主线,突出主干知识教学,突出C语言课程的套用性、实践性特点,注重能力培养。
本书适合作为高等院校C语言程式设计等相关课程的教材,也可用作程式设计人员及程式设计爱好者的自学参考书。
图书前言
本书面向程式设计初学者,全书以程式设计为主线,突出主干知识教学,突出C语言课程的套用性、实践性特点,注重能力培养。
本书主要具有以下特点。
(1) 加强算法设计的教学。在多年的教学实践中我们体会到,学生在学习程式设计时遇到的困难大部分发生在算法设计环节,尤其是初学者,面对实际问题往往无所适从,难以设计用程式解决问题的算法。本书从两个方面努力加强算法设计的教学,以提高学生的程式设计能力:一是注重程式执行过程的分析和说明,加强与计算机的沟通,提高读者的程式阅读能力,进而达到算法学习的目的;二是通过套用实例,加强问题分析和算法设计的教学。
(2) 本书的实例选择力求做到“科学性、趣味性、套用性和易学性”的统一,并按照不同的学习功能进行分类设定。一类是简单明了的演示性例题,重点说明C语言的语法知识,实现基本概念、基本语法的即时套用;另一类是培养程式设计能力的设计性例题,通过问题分析与算法设计、程式实现、程式讨论和说明等内容重点介绍程式设计方法,突出算法设计和程式编写、调试的教学,以加强程式设计的能力训练。
(3) 突出案例教学。书中凡是适合以程式案例开始的新知识,均通过程式示例和程式说明予以引导,首先建立感性认识,然后展开相关内容,进行知识的系统介绍。
(4) 本书的程式设计举例在相关章节保持了连续性,前后衔接,逐步扩展,既便于教师讲解,又便于学生学习理解。例如,学生成绩问题自第1章引入,一直贯穿到建立和使用学生成绩档案,相关举例在第2~5章、第8章、第9章都有介绍。
(5) 本书通过设定“问题思考”、“观察与思考”、“拓展知识”等栏目,灵活运用启发式教学方法,有针对性地引导读者进一步讨论和思考问题。当提示读者从逻辑思维的角度对某些问题做进一步思考时,通过“问题思考”栏目进行启发;当提示读者根据程式运行情况对程式做进一步改进、完善时,通过“观察与思考”栏目进行启发;当需要进一步延伸某些教学内容时,通过“拓展知识”栏目进行适当介绍。
(6) 主教材与实验指导合二为一,在每章之后设定实验及指导内容,不再单独配套实验指导教材,既方便学生实验课学习,也降低教材成本。
(7) 理论教学与实验教学有机结合。本书的实验指导分为基础实验和综合实验两部分。基础实验内容紧密结合课程中的例题程式设定,以“理解→验证→完善→扩充→提高”为实验教学线索,重在巩固课堂教学知识,提高调试程式及完善程式的能力;综合实验以算法设计和程式实现为重点,训练运用所学知识解决实际问题的能力。这样彻底解决了实验教学内容与主教材教学内容并行设定、孤立设定的问题,避免出现主教材与实验教材顾此失彼的情况。
本书编者秉承“建设精品教材,培养优秀人才”的教育理念,广泛吸收、借鉴其他优秀教材的长处,在前期教材建设的基础上,融入多年的教学实践经验和教学研究成果,编写完成了本书,力求深入浅出、循序渐进、语言流畅、通俗易懂、便于讲解和学习。但由于编者水平所限,书中难免存在不足之处,敬请读者批评指正。
参加本书编写工作的还有冯伟昌、黄忠义、魏建国、张元国、王桂东、王金才、李竹健、张文、高永存、王涛、薛莹、徐英娟、马明祥、滕秀荣、彭玉忠等。电脑程式设计爱好者潘振昌、张濛、徐思杰等为调试本书中的程式做了大量工作,在此一併表示感谢。
本书主要具有以下特点。
(1) 加强算法设计的教学。在多年的教学实践中我们体会到,学生在学习程式设计时遇到的困难大部分发生在算法设计环节,尤其是初学者,面对实际问题往往无所适从,难以设计用程式解决问题的算法。本书从两个方面努力加强算法设计的教学,以提高学生的程式设计能力:一是注重程式执行过程的分析和说明,加强与计算机的沟通,提高读者的程式阅读能力,进而达到算法学习的目的;二是通过套用实例,加强问题分析和算法设计的教学。
(2) 本书的实例选择力求做到“科学性、趣味性、套用性和易学性”的统一,并按照不同的学习功能进行分类设定。一类是简单明了的演示性例题,重点说明C语言的语法知识,实现基本概念、基本语法的即时套用;另一类是培养程式设计能力的设计性例题,通过问题分析与算法设计、程式实现、程式讨论和说明等内容重点介绍程式设计方法,突出算法设计和程式编写、调试的教学,以加强程式设计的能力训练。
(3) 突出案例教学。书中凡是适合以程式案例开始的新知识,均通过程式示例和程式说明予以引导,首先建立感性认识,然后展开相关内容,进行知识的系统介绍。
(4) 本书的程式设计举例在相关章节保持了连续性,前后衔接,逐步扩展,既便于教师讲解,又便于学生学习理解。例如,学生成绩问题自第1章引入,一直贯穿到建立和使用学生成绩档案,相关举例在第2~5章、第8章、第9章都有介绍。
(5) 本书通过设定“问题思考”、“观察与思考”、“拓展知识”等栏目,灵活运用启发式教学方法,有针对性地引导读者进一步讨论和思考问题。当提示读者从逻辑思维的角度对某些问题做进一步思考时,通过“问题思考”栏目进行启发;当提示读者根据程式运行情况对程式做进一步改进、完善时,通过“观察与思考”栏目进行启发;当需要进一步延伸某些教学内容时,通过“拓展知识”栏目进行适当介绍。
(6) 主教材与实验指导合二为一,在每章之后设定实验及指导内容,不再单独配套实验指导教材,既方便学生实验课学习,也降低教材成本。
(7) 理论教学与实验教学有机结合。本书的实验指导分为基础实验和综合实验两部分。基础实验内容紧密结合课程中的例题程式设定,以“理解→验证→完善→扩充→提高”为实验教学线索,重在巩固课堂教学知识,提高调试程式及完善程式的能力;综合实验以算法设计和程式实现为重点,训练运用所学知识解决实际问题的能力。这样彻底解决了实验教学内容与主教材教学内容并行设定、孤立设定的问题,避免出现主教材与实验教材顾此失彼的情况。
本书编者秉承“建设精品教材,培养优秀人才”的教育理念,广泛吸收、借鉴其他优秀教材的长处,在前期教材建设的基础上,融入多年的教学实践经验和教学研究成果,编写完成了本书,力求深入浅出、循序渐进、语言流畅、通俗易懂、便于讲解和学习。但由于编者水平所限,书中难免存在不足之处,敬请读者批评指正。
参加本书编写工作的还有冯伟昌、黄忠义、魏建国、张元国、王桂东、王金才、李竹健、张文、高永存、王涛、薛莹、徐英娟、马明祥、滕秀荣、彭玉忠等。电脑程式设计爱好者潘振昌、张濛、徐思杰等为调试本书中的程式做了大量工作,在此一併表示感谢。
编 者2012年7月
图书目录
第1章 程式设计概述1
1.1 程式设计语言1
1.2 算法2
1.2.1 算法概念与算法描述3
1.2.2 算法的逻辑结构4
1.2.3 算法的特性7
1.2.4 算法评价7
1.3 程式设计与实现7
1.3.1 程式设计的基本过程7
1.3.2 使用Visual C++ 6.0实现C语言程式8
1.3.3 程式设计示例10
1.4 C语言程式的基本结构13
1.4.1 程式的函式化结构13
1.4.2 程式中的常量和变数15
1.4.3 程式中的基本语句16
1.4.4 标识符与保留字16
1.4.5 程式风格17
小结18
习题118
实验1 编辑运行C语言程式20
第2章 简单程式设计23
2.1 用printf()函式输出数据23
2.1.1 固定数值的加法程式24
2.1.2 printf()函式25
2.2 用scanf()函式输入数据29
2.2.1 任意数值的加法程式29
2.2.2 scanf()函式30
2.3 输入输出字元数据34
2.3.1 getchar()函式和putchar()函式35
2.3.2 字元输入输出套用举例35
2.4 语言知识补遗36
2.4.1 数据类型36
2.4.2 常量详解36
2.4.3 简单变数详解38
2.4.4 算术运算 41
2.4.5 赋值运算42
2.4.6 宏命令43
2.5 程式设计举例49
2.5.1 计算三角形面积 49
2.5.2 字母转换50
2.5.3 鸡兔同笼问题51
??2.6 表达式中数据类型的自动转换52
??2.7 用typedef命名数据类型53
??2.8 使用C++命令输入输出数据54
2.8.1 简单的C++程式54
2.8.2 C++的输入和输出55
小结57
习题258
实验2 简单程式设计62
第3章 分支结构程式设计64
3.1 简单条件的分支程式64
3.1.1 判断优等生程式64
3.1.2 关係表达式65
3.1.3 if语句66
3.2 複合条件的分支程式74
3.2.1 使用新标準的优等生程式74
3.2.2 逻辑表达式75
3.3 用switch语句实现分支控制77
3.4 goto语句80
3.5 条件运算81
3.6 分支结构套用举例83
3.6.1 闰年问题83
3.6.2 判断等边三角形84
3.6.3 求解一元二次方程85
3.6.4 学生成绩分等显示86
小结88
习题388
实验3 分支结构程式设计91
第4章 循环结构程式设计96
4.1 while循环结构程式96
4.1.1 while循环程式示例96
4.1.2 while语句97
4.1.3 自增、自减运算99
4.2 do-while循环结构程式101
4.2.1 do-while循环程式示例101
4.2.2 do-while语句102
4.3 for循环结构程式102
4.3.1 for循环程式示例102
4.3.2 for语句103
4.3.3 逗号表达式105
4.4 循环体中的控制命令105
4.4.1 break命令106
4.4.2 continue命令107
4.5 多重循环程式108
4.5.1 多重循环程式示例108
4.5.2 多重循环的一般结构109
4.6 循环结构套用举例110
4.6.1 字元统计110
4.6.2 比赛评分111
4.6.3 学生成绩分等统计113
4.6.4 求最大公约数115
4.6.5 Fibonacci数列116
4.6.6 乘法表117
4.6.7 搬砖问题118
4.6.8 找素数120
4.6.9 哥德巴赫猜想121
小结122
习题4123
实验4 循环结构程式设计128
第5章 数组程式设计131
5.1 一维数组程式设计131
5.1.1 逆序输出数据程式131
5.1.2 一维数组的定义132
5.1.3 数值型一维数组的输入和输出133
5.1.4 数值型一维数组的初始化135
5.1.5 字元型一维数组的初始化137
5.1.6 一维数组的存储138
5.2 字元串操作138
5.2.1 字元串的输入输出138
5.2.2 多字元串操作函式143
5.2.3 其他字元串操作函式145
5.3 二维数组程式设计145
5.3.1 矩阵求和程式146
5.3.2 二维数组的定义146
5.3.3 二维数组的输入和输出147
5.3.4 二维数组的初始化148
5.3.5 二维数组的存储150
5.4 数组套用151
5.4.1 排序151
5.4.2 查找153
5.4.3 单词统计155
5.4.4 矩阵运算156
5.4.5 成绩处理161
5.4.6 杨辉三角形164
小结165
习题5166
实验5 数组程式设计168
第6章 函式程式设计171
6.1 函式概述171
6.2 自定义函式示例172
6.3 函式定义及调用173
6.3.1 函式定义173
6.3.2 函式值和return命令175
6.3.3 函式调用176
6.4 函式嵌套和递归函式181
6.4.1 函式嵌套182
6.4.2 递归函式183
6.5 数组作为函式的参数187
6.5.1 数组元素作为函式参数187
6.5.2 一维数组名作为函式参数189
6.5.3 用一维数组求解二维数组问题191
6.6 函式套用举例192
6.6.1 计算长方体的面积192
6.6.2 利用递归函式计算Fibonacci数列193
6.6.3 排序函式的设计与套用194
6.7 变数的作用域和存储类型196
6.7.1 变数的作用域196
6.7.2 变数的存储类型198
小结200
习题6200
实验6 使用自定义函式的程式设计205
第7章 指针程式设计208
7.1 指针概述208
7.1.1 指针变数208
7.1.2 变数的直接访问和间接访问209
7.2 指针变数的定义和使用209
7.2.1 指针变数程式示例209
7.2.2 定义指针变数210
7.2.3 使用指针变数210
7.3 指针与数组213
7.3.1 指针与一维数组213
7.3.2 指针与二维数组216
7.3.3 指针与字元串219
7.3.4 指针数组221
7.4 指针作为函式的参数222
7.4.1 简单指针变数作函式参数222
7.4.2 指向数组的指针作函式的参数224
7.4.3 字元串指针作函式的参数225
7.4.4 指针数组作函式的参数226
??7.4.5 使用带参数的main()函式228
7.5 指针函式和指向函式的指针变数229
7.5.1 指针函式229
??7.5.2 指向函式的指针变数230
7.6 指针套用举例231
小结237
习题7237
实验7 指针程式设计242
第8章 结构体程式设计245
8.1 结构体数据概述245
8.2 结构体类型和结构体变数246
8.2.1 使用结构体变数存储学生信息246
8.2.2 定义结构体数据类型247
8.2.3 结构体变数的定义及使用248
8.3 结构体数组252
8.3.1 结构体数组概述252
8.3.2 结构体数组的初始化253
8.3.3 利用结构体数组管理学生信息253
8.4 结构体指针变数255
8.4.1 结构体指针变数的定义及使用255
8.4.2 结构体指针作函式的参数257
8.5 使用鍊表动态存储数据258
8.5.1 使用鍊表存储学生信息258
8.5.2 鍊表的特点259
8.5.3 动态记忆体管理函式260
8.5.4 定义鍊表结构261
8.6 鍊表的基本操作262
8.6.1 鍊表结点的插入262
8.6.2 鍊表结点的删除266
8.6.3 鍊表结点的查找268
8.7 结构体套用举例271
8.7.1 字元串加密271
8.7.2 学生成绩排序273
8.7.3 Josephus问题276
小结279
习题8279
实验8 结构体程式设计284
第9章 档案程式设计288
9.1 档案概述288
9.1.1 档案的概念288
9.1.2 档案的分类289
9.1.3 档案的一般操作过程290
9.1.4 档案的指针291
9.2 档案的基本操作291
9.2.1 打开和关闭档案292
9.2.2 最基本的档案读写函式293
9.3 档案的数据块读写操作296
9.3.1 fwrite()函式296
9.3.2 fread()函式298
9.4 档案的其他操作299
9.4.1 档案的格式化读写300
9.4.2 档案的随机读写301
9.4.3 档案的字元串操作304
9.5 档案套用举例305
9.5.1 档案複製305
9.5.2 存储在档案中的学生成绩排序306
小结308
习题9308
实验9 档案程式设计311
附录A C语言的运算符316
附录B C语言的保留关键字318
附录C 常用ASCII码字元对照表319
参考文献320
1.1 程式设计语言1
1.2 算法2
1.2.1 算法概念与算法描述3
1.2.2 算法的逻辑结构4
1.2.3 算法的特性7
1.2.4 算法评价7
1.3 程式设计与实现7
1.3.1 程式设计的基本过程7
1.3.2 使用Visual C++ 6.0实现C语言程式8
1.3.3 程式设计示例10
1.4 C语言程式的基本结构13
1.4.1 程式的函式化结构13
1.4.2 程式中的常量和变数15
1.4.3 程式中的基本语句16
1.4.4 标识符与保留字16
1.4.5 程式风格17
小结18
习题118
实验1 编辑运行C语言程式20
第2章 简单程式设计23
2.1 用printf()函式输出数据23
2.1.1 固定数值的加法程式24
2.1.2 printf()函式25
2.2 用scanf()函式输入数据29
2.2.1 任意数值的加法程式29
2.2.2 scanf()函式30
2.3 输入输出字元数据34
2.3.1 getchar()函式和putchar()函式35
2.3.2 字元输入输出套用举例35
2.4 语言知识补遗36
2.4.1 数据类型36
2.4.2 常量详解36
2.4.3 简单变数详解38
2.4.4 算术运算 41
2.4.5 赋值运算42
2.4.6 宏命令43
2.5 程式设计举例49
2.5.1 计算三角形面积 49
2.5.2 字母转换50
2.5.3 鸡兔同笼问题51
??2.6 表达式中数据类型的自动转换52
??2.7 用typedef命名数据类型53
??2.8 使用C++命令输入输出数据54
2.8.1 简单的C++程式54
2.8.2 C++的输入和输出55
小结57
习题258
实验2 简单程式设计62
第3章 分支结构程式设计64
3.1 简单条件的分支程式64
3.1.1 判断优等生程式64
3.1.2 关係表达式65
3.1.3 if语句66
3.2 複合条件的分支程式74
3.2.1 使用新标準的优等生程式74
3.2.2 逻辑表达式75
3.3 用switch语句实现分支控制77
3.4 goto语句80
3.5 条件运算81
3.6 分支结构套用举例83
3.6.1 闰年问题83
3.6.2 判断等边三角形84
3.6.3 求解一元二次方程85
3.6.4 学生成绩分等显示86
小结88
习题388
实验3 分支结构程式设计91
第4章 循环结构程式设计96
4.1 while循环结构程式96
4.1.1 while循环程式示例96
4.1.2 while语句97
4.1.3 自增、自减运算99
4.2 do-while循环结构程式101
4.2.1 do-while循环程式示例101
4.2.2 do-while语句102
4.3 for循环结构程式102
4.3.1 for循环程式示例102
4.3.2 for语句103
4.3.3 逗号表达式105
4.4 循环体中的控制命令105
4.4.1 break命令106
4.4.2 continue命令107
4.5 多重循环程式108
4.5.1 多重循环程式示例108
4.5.2 多重循环的一般结构109
4.6 循环结构套用举例110
4.6.1 字元统计110
4.6.2 比赛评分111
4.6.3 学生成绩分等统计113
4.6.4 求最大公约数115
4.6.5 Fibonacci数列116
4.6.6 乘法表117
4.6.7 搬砖问题118
4.6.8 找素数120
4.6.9 哥德巴赫猜想121
小结122
习题4123
实验4 循环结构程式设计128
第5章 数组程式设计131
5.1 一维数组程式设计131
5.1.1 逆序输出数据程式131
5.1.2 一维数组的定义132
5.1.3 数值型一维数组的输入和输出133
5.1.4 数值型一维数组的初始化135
5.1.5 字元型一维数组的初始化137
5.1.6 一维数组的存储138
5.2 字元串操作138
5.2.1 字元串的输入输出138
5.2.2 多字元串操作函式143
5.2.3 其他字元串操作函式145
5.3 二维数组程式设计145
5.3.1 矩阵求和程式146
5.3.2 二维数组的定义146
5.3.3 二维数组的输入和输出147
5.3.4 二维数组的初始化148
5.3.5 二维数组的存储150
5.4 数组套用151
5.4.1 排序151
5.4.2 查找153
5.4.3 单词统计155
5.4.4 矩阵运算156
5.4.5 成绩处理161
5.4.6 杨辉三角形164
小结165
习题5166
实验5 数组程式设计168
第6章 函式程式设计171
6.1 函式概述171
6.2 自定义函式示例172
6.3 函式定义及调用173
6.3.1 函式定义173
6.3.2 函式值和return命令175
6.3.3 函式调用176
6.4 函式嵌套和递归函式181
6.4.1 函式嵌套182
6.4.2 递归函式183
6.5 数组作为函式的参数187
6.5.1 数组元素作为函式参数187
6.5.2 一维数组名作为函式参数189
6.5.3 用一维数组求解二维数组问题191
6.6 函式套用举例192
6.6.1 计算长方体的面积192
6.6.2 利用递归函式计算Fibonacci数列193
6.6.3 排序函式的设计与套用194
6.7 变数的作用域和存储类型196
6.7.1 变数的作用域196
6.7.2 变数的存储类型198
小结200
习题6200
实验6 使用自定义函式的程式设计205
第7章 指针程式设计208
7.1 指针概述208
7.1.1 指针变数208
7.1.2 变数的直接访问和间接访问209
7.2 指针变数的定义和使用209
7.2.1 指针变数程式示例209
7.2.2 定义指针变数210
7.2.3 使用指针变数210
7.3 指针与数组213
7.3.1 指针与一维数组213
7.3.2 指针与二维数组216
7.3.3 指针与字元串219
7.3.4 指针数组221
7.4 指针作为函式的参数222
7.4.1 简单指针变数作函式参数222
7.4.2 指向数组的指针作函式的参数224
7.4.3 字元串指针作函式的参数225
7.4.4 指针数组作函式的参数226
??7.4.5 使用带参数的main()函式228
7.5 指针函式和指向函式的指针变数229
7.5.1 指针函式229
??7.5.2 指向函式的指针变数230
7.6 指针套用举例231
小结237
习题7237
实验7 指针程式设计242
第8章 结构体程式设计245
8.1 结构体数据概述245
8.2 结构体类型和结构体变数246
8.2.1 使用结构体变数存储学生信息246
8.2.2 定义结构体数据类型247
8.2.3 结构体变数的定义及使用248
8.3 结构体数组252
8.3.1 结构体数组概述252
8.3.2 结构体数组的初始化253
8.3.3 利用结构体数组管理学生信息253
8.4 结构体指针变数255
8.4.1 结构体指针变数的定义及使用255
8.4.2 结构体指针作函式的参数257
8.5 使用鍊表动态存储数据258
8.5.1 使用鍊表存储学生信息258
8.5.2 鍊表的特点259
8.5.3 动态记忆体管理函式260
8.5.4 定义鍊表结构261
8.6 鍊表的基本操作262
8.6.1 鍊表结点的插入262
8.6.2 鍊表结点的删除266
8.6.3 鍊表结点的查找268
8.7 结构体套用举例271
8.7.1 字元串加密271
8.7.2 学生成绩排序273
8.7.3 Josephus问题276
小结279
习题8279
实验8 结构体程式设计284
第9章 档案程式设计288
9.1 档案概述288
9.1.1 档案的概念288
9.1.2 档案的分类289
9.1.3 档案的一般操作过程290
9.1.4 档案的指针291
9.2 档案的基本操作291
9.2.1 打开和关闭档案292
9.2.2 最基本的档案读写函式293
9.3 档案的数据块读写操作296
9.3.1 fwrite()函式296
9.3.2 fread()函式298
9.4 档案的其他操作299
9.4.1 档案的格式化读写300
9.4.2 档案的随机读写301
9.4.3 档案的字元串操作304
9.5 档案套用举例305
9.5.1 档案複製305
9.5.2 存储在档案中的学生成绩排序306
小结308
习题9308
实验9 档案程式设计311
附录A C语言的运算符316
附录B C语言的保留关键字318
附录C 常用ASCII码字元对照表319
参考文献320