普通高等教育软件工程“十二五”规划教材

高级语言程序设计(C语言版)——基于计算思维能力培养

高级语言程序设计、C高级语言程序设计、C语言程序设计、C程序设计
分享 推荐 5 收藏 18 阅读 5.6K
揭安全 (著) 王明文 (主审) 978-7-115-39460-6

关于本书的内容有任何问题,请联系 孙澍


1.理论联系实际,强化计算思维能力培养
2.案例选取贴近生活,有助于提高学习兴趣
3.注重实践环节,设计了三层实验体系
4. 提供丰富的辅助教学资源:教学课件、教材源代码、实验案例、实验指导、习题解答、实验参考答案、测试样卷、重点难点解决办法及教学建议等资料

内容摘要


本书是一本以C 语言为描述语言,介绍结构化程序设计方法的教材。全书共10 章,内容包括:程序设计引论,C 数据类型、运算符和表达式,算法和简单C 程序设计,程序基本控制结构,函数及其应用,数组及其应用,指针及其应用,结构体及其应用,文件与数据存储,C 综合性程序设计案例分析。

前言

现在人类社会已进入到运行在软件上的信息化时代,这个时代背景下的软件开发涉及PC应用程序、工程计算和嵌入式系统、信息管理和移动互联网等众多领域。程序设计是从事软件开发工作的必备技能,程序设计的大部分工作是在寻找和优化问题的解决方案,它是一种创造性与高智力劳动。学习程序设计本身是一项具有挑战性的工作。“高级语言程序设计”(“程序设计基础”、“C语言程序设计”)作为大学计算机相关专业的第一门程序设计课程,承担了培养学生解决问题与程序设计的基本能力的任务。然而,一些学生在学习这门课程的过程中,过度纠结于程序设计语言的语法细节,忽略了程序设计方法的学习,完全没有体会到程序设计的乐趣;还有些同学甚至对学习程序设计产生恐惧心理,从而导致专业兴趣全无。因此,作为第一门程序设计课程,如何培养学生的程序设计学习兴趣至关重要。
早在2006年,美国Carnegie Mellon大学的Jeannette M. Wing教授就提出了Computational Thinking(计算思维)的概念,她认为计算思维就是运用计算机科学的知识分析问题、设计方案、解决实际问题的思维活动。近年来,计算思维引起了国内外计算机教育界的广泛关注,将计算思维贯穿于理论教学和实践应用,将有助于促进知识向能力的转化。计算思维的提出,对程序设计教学提出了更高的要求。因此,“高级语言程序设计”作为计算机相关专业的核心课程,同时还承担着培养学生计算思维能力的重任。
岁月如梭,今年正好是作者从事高等学校计算机教育的第十八年。十八年来的学习和教学经历让我体会到,一本“好”的程序设计书对学习者的重要程度。“若能回到二十多年前,我需要一本什么样的程序设计书来开启我学习程序设计的大门呢?这本书不应只是一本程序设计语言的语法手册,也不应只是包含大量编程技巧而难以理解的程序代码的堆积,它应该是真正教授程序设计方法和思维的,应该通俗易懂,而又不乏兴趣的……”带着这些思考,写一本程序设计书的想法在脑海里渐渐呈现。参加工作以来,我曾担任了八年的全国计算机等级考试(NCRE)考务工作,目睹过很多不得要领而无法通过全国计算机等级考试的学生。那时真想将自己积累的一点程序设计与教学经验融入一本教材,来帮助他们轻松学习程序设计,但终因时间问题,最终没有成文。近几年,在承担教学研究课题的过程中,我也在反思如何通过程序设计课程来培养学生的计算思维能力,如何帮助新步入教坛的年轻教师快速提升教学设计能力。这些思考让我决定着手写这本书的想法更加清晰。2014年我有机会到美国California State University Fullerton进行访学,近距离接触了美国高校计算机教育,并有时间将自己多年来的想法整理成文,于是一年后有了大家手中的这本书。
任何程序设计都是基于一种程序设计语言的,在程序设计语言百花齐放的今天,已没有哪一种语言能够包打开下。众所周知,目前许多主流的程序设计语言都是在C语言基础上发展起来的。本书以C语言作为描述语言,以应用为导向,以
程序设计方法教学为主线,力图通过课程学习,使读者能将普适的程序设计方法应用于实际的问题求解。这也正是本书取名《高级语言程序设计(C语言版)—基于计算思维能力培养》而非《C程序设计语言》的原因了。
本书共10章,内容包括:程序设计引论,C数据类型、运算符与表达式,算法与简单C语言程序设计,程序基本控制结构,函数及其应用,数组及其应用,指针及其应用,结构体及其应用,文件与数据存储,C综合性程序设计案例分析。
概括起来,全书有以下特点。
(1)理论联系实际,强化计算思维能力的培养。
本书语言语法介绍以够用、实用和应用为原则,将C语言的语法融入问题求解中;从实际应用案例中抽取教学要素,重点强化模块化程序设计方法与基本算法的学习。全书从数据组织的维度介绍了基本数据类型以及数组、指针和结构体等构造数据类型在数据处理中的应用;从算法维度将“迭代”“穷举”“递归”“分治”“检索”与“排序”等算法融入实际应用问题的求解过程。让读者在学习的过程中潜移默化地提高计算思维能力。
(2)案例选取贴近生活,有助于提高学习兴趣。
全书通过贴近生活的案例来分析问题的本质,如程序设计语言为何要区分不同的数据类型,如何在程序设计中选择正确的数据类型,如何存储大规模数据等,书中用了通俗易懂的例子来进行说明。同时,从读者熟悉的应用软件中抽取教学案例,如网银认证的验证码,信息加密,计算器的进位制转换,手机通信录查询等案例都贴近生活,突出了应用导向,有助于提高学生学习兴趣。
(3)内容呈现直观、形象,知识点讲解深入浅出,通俗易懂。
全书以图文并茂的方式深入剖析相关知识的底层原理,使读者对课程难点做到不但知其然,而且知其所以然。例如,通过递归调用图来说明递归程序的执行原理;通过详细的图示来说明指针、参数传递、链表等难点,并拓展了指针在生成动态不规则二维数组等方面的高级应用,这可为学生今后深入理解Java等新型程序设计语言的引用数据类型奠定基础。
(4)内容编排体现“以学为中心”的教学思想。
随着大规模在线教育课程(MOOC)和微课等新型教学媒体的出现,学生的学习呈现碎片化学习特点。本书在内容组织上进行了全新设计,将精选的相关练习与实验穿插到章节中间,题型涵盖全国计算机等级考试二级C语言程序设计全部题型,使读者在学习完相关内容后能够及时巩固并拓展所学知识,做到举一反三,满足“翻转课堂”等新型教学范式的教学需求。全书还以小贴士的形式提供了大量的相关拓展知识,以开阔读者的视野。
(5)C标准与时俱进,程序代码规范统一。
教材内容一方面符合当前全国计算机等级考试二级C语言程序设计考试大纲的要求,同时还拓展了部分C99与C11标准,以提升编写C语言程序的灵活性。例如,通过引入bool类型,使逻辑表达更加简洁,符合现代程序设计的规范。从第5章开始,大部分问题求解都以模块化的方式进行设计,有助于引导学生掌握模块化程序设计的思想。书中所有程序源代码均通过了调试。
(6)注重实践环节,设计了三层次实验体系。
正如我们不可能只通过书本知识来获得驾驶和游泳技能一样,程序设计实践是学习程序设计的最佳途径。为此,本书设计了验证型、设计型和综合设计型三层次实验体系,从多维度强化实践环节。建议读者在学习完每章节知识点后,完成相应的练习和实验题,在实践中达到提高程序设计能力的目的。作为本书的重要特色,在第5章和第10章分别提供了两个阶段性的综合设计案例。其中第10章详细分析了一个“基于用户角色的图书管理系统”的设计与实现方法,详细说明了需求方案、设计目标、设计任务、模块划分、功能实现等环节的设计方法,将程序编写和软件工程原理的阐述有机地贯穿在一起,起到事半功倍的效果,可为学校开展课程设计提供良好的借鉴。
(7)提供了丰富的辅助教学资源。
面向教师提供了精心设计的教学课件、程序源代码、实验案例、实验指导、习题解答、实验参考答案、测试样卷、重点难点解决办法及教学设计模板等资料。其中教学课件应用了动画、仿真等形式突破教学难点,可有效提升课堂教学效果,实验案例可直接应用于与课程同步的实验教学。
面向学生提供了Visual C++6.0、Code::Blocks集成开发工具的使用详解、程序源代码、实验案例、教学课件、全国计算机等级考试二级C语言程序设计模拟题、实验报告模板、课程设计报告模板等资料,可为学习者提供学习指导。第10章的综合课程设计案例源代码提供了分阶段的项目源代码(共10个阶段),可使读者理解在软件工程思想指导下的渐进式项目开发过程。上述资料都可以从出版社网站下载(www.ptpress.com.cn)或向编者发送邮件索取。
全书由揭安全著,王明文教授在百忙之中仔细审阅了全部初稿,并提出了许多宝贵的意见和建议,在此表示衷心的感谢!
本书可作为大学计算机科学与技术、软件工程、网络工程、信息管理、电子商务、物联网工程等专业“高级语言程序设计”“程序设计基础”课程的教材,也可作为大学公共计算机基础——“C语言程序设计”课程的教材,内容符合全国计算机等级考试二级C语言程序设计大纲要求,还可供参加全国计算机等级考试(NCRE)的同学或从事C语言程序开发的工程技术人员参考。
2004年本人参编的《数据结构》(C语言版)(第1版)在人民邮电出版社出版,2012年该书第2版被评为普通高等学校“十二五”国家级本科规划教材,现已出版第3版。在本书撰写、校审及出版过程中,人民邮电出版社给予了大力的支持,在此一并表示衷心的感谢!
因作者水平有限,书难免存在不妥之处,欢迎读者给我发送邮件,对本书和教学辅助资源提出意见和建议。编者E-mail:jieanquan@163.com、jaq@jxnu.edu.cn。

目录

第 1章 程序设计引论 1
1.1 计算科学与问题求解 1
1.2 程序与程序设计 2
1.2.1 程序 2
1.2.2 程序设计 4
1.3 程序设计语言 4
1.3.1 程序设计语言分类 4
1.3.2 程序的执行方式 6
1.4 C语言简介 7
1.5 C语言程序开发工具 9
1.6 C语言程序开发步骤 14
本章小结 16
实验一 16
第 2章 数据类型、运算符与表达式 18
2.1 C程序基本结构 18
2.2 C程序中常见的符号 21
2.3 数据类型 22
2.4 常量 26
2.4.1 整型常量 26
2.4.2 实型常量 27
2.4.3 字符常量 28
2.4.4 字符串常量 29
2.4.5 宏常量 29
练习2.1 30
2.5 变量 30
2.5.1 变量的声明 30
2.5.2 变量初始化 31
2.5.3 变量的访问与使用 32
练习2.2 34
2.6 运算符与表达式 34
2.6.1 算术运算符 35
2.6.2 运算符的优先级与结合性 36
2.6.3 关系运算符 37
2.6.4 复合赋值运算符 38
2.6.5 ++和--运算符 39
2.7 表达式的类型转换 40
2.7.1 赋值表达式的类型转换 40
2.7.2 强制类型转换 41
2.8 const常量 42
练习2.3 43
本章小结 43
实验二 44
第3章 算法与简单C程序设计 45
3.1 C语句 45
3.2 C程序输入/输出操作的实现 46
3.2.1 字符输入/输出 46
3.2.2 格式输入/输出 49
练习3.1 54
3.3 算法 54
3.3.1 问题求解过程中算法的作用 55
3.3.2 算法的特点 57
3.3.3 算法的描述 58
3.4 简单程序设计举例 64
练习3.2 67
本章小结 67
实验三 67
第4章 程序基本控制结构 68
4.1 逻辑运算符与逻辑表达式 68
4.1.1 逻辑运算符 68
4.1.2 逻辑表达式 69
练习4.1 70
4.2 选择控制结构 71
4.2.1 if单分支语句 71
4.2.2 if双分支语句 77
4.2.3 if多分支语句 78
4.3 条件表达式 83
练习4.2 83
4.4 switch多分支语句 84
练习4.3 88
4.5 循环控制语句 89
4.5.1 while循环语句 89
4.5.2 for循环语句 94
4.5.3 do while循环语句 99
练习4.4 101
4.6 程序跳转语句 102
4.6.1 break语句 102
4.6.2 continue 语句 104
4.6.3 goto语句 105
练习4.5 105
4.7 多重循环及其应用 106
练习4.6 110
4.8 循环程序设计方法 110
4.8.1 迭代法 110
4.8.2 穷举法 113
本章小结 115
实验四 116
第5章 函数及其应用 118
5.1 C函数概述 118
5.2 C函数的定义和调用 119
5.2.1 C函数的定义 119
5.2.2 return语句 121
5.2.3 函数调用 122
5.2.4 函数声明 124
练习5.1 125
5.3 引用库函数与自定义函数 126
5.3.1 库函数分类 126
5.3.1 #include指令 126
5.4 函数参数传递方式 127
练习5.2 129
5.5 函数嵌套调用 130
5.5.1 嵌套调用的概念 130
5.5.2 模块化设计基本方法 131
练习5.3 134
5.6 递归函数及其应用 135
5.6.1 递归的概念 135
5.6.2 递归程序分析 138
练习5.4 141
5.6.3 递归程序应用 141
练习5.5 145
5.7 变量的作用域与生存期 145
5.7.1 局部变量 145
5.7.2 全局变量 147
5.7.3 变量的存储类型 149
练习5.6 152
5.8 函数综合应用——趣味算术游戏 153
练习5.7 161
本章小结 161
实验五 161
第6章 数组及其应用 162
6.1 一维数组 162
6.1.1 一维数组的定义与引用 162
6.1.2 一维数组的初始化 166
练习6.1 168
6.2 向函数传递一维数组 168
练习6.2 172
6.3 基于数组的常用算法及其应用 173
6.3.1 顺序查找 173
6.3.2 数据删除 175
6.3.2 数据插入 176
6.3.4 寻找**大值 177
练习6.3 179
6.3.5 数据排序 179
6.3.6 数据倒置 185
6.3.7 二分查找 187
6.3.8 一维数组应用实例 189
练习6.4 192
6.4 二维数组 193
6.4.1 二维数组的定义、引用及初始化 193
6.4.2 二维数组应用实例 195
练习6.5 199
6.5 向函数传递二维数组 200
练习6.6 203
6.6 字符串及字符数组 203
6.6.1 字符串 203
6.6.2 字符数组的初始化 204
6.6.3 字符数组的输入/输出 205
6.6.4 字符串处理函数 207
6.6.5 字符串应用实例 209
练习6.7 214
6.7 基于数组的递归算法 215
练习6.8 217
本章小结 218
实验六 218
第7章 指针及其应用 220
7.1 指针的本质 220
7.2 指针变量的定义与初始化 221
7.3 间接寻址运算符 223
练习7.1 224
7.4 指针与函数 225
7.4.1 传值调用与传地址调用 225
7.4.2 指针作函数参数的应用实例 227
练习7.2 230
7.5 指针和一维数组 231
7.5.1 指针的算术运算与关系运算 231
7.5.2 应用指针访问一维数组 233
7.5.3 深入理解一维数组作函数参数的本质 236
练习7.3 237
7.6 字符指针 239
7.6.1 使用字符指针指示字符串常量 239
7.6.2 利用字符指针访问字符串变量 240
练习7.4 242
7.7 指针和二维数组 244
7.7.1 列指针 244
7.7.2 行指针 245
7.7.3 深入理解二维数组作函数参数的本质* 246
7.7.4 巧用列指针设计通用二维数组处理函数* 247
练习7.5 249
7.8 指针的高应 249
7.8.1 指针数组其应用 249
7.8.2 动态内存分配 254
7.8.3 二级指针* 257
7.8.4 指向函数的指针及其应用* 261
练习7.6 262
本章小结 263
实验七 264
第8章 结构体及其应用 265
8.1 为何要用结构体 265
8.2 结构体类型与结构体变量 265
8.2.1 结构体类型的声明 265
8.2.2 结构体变量的定义 267
8.2.3 对结构体变量的操作 268
8.2.4 结构体变量的初始化 269
练习8.1 270
8.3 指向结构体的指针 271
练习8.2 272
8.4 向函数传递结构体 272
8.4.1 值传递 272
8.4.2 地址传递 273
练习8.3 274
8.5 结构体数组 275
8.5.1 结构体数组的定义 275
8.5.2 结构体数组的初始化与引用 276
8.5.3 结构体数组的应用 278
练习8.4 281
8.6 动态数据结构——单链表 282
8.6.1 单链表的定义 283
8.6.2 在单链表插入新结点 284
8.6.3 建立单链表 285
8.6.4 单链表的遍历 287
8.6.5 在单链表中查找结点 288
8.6.5 在单链表中删除结点 289
练习8.5 292
本章小结 293
实验八 293
第9章 文件与数据存储 294
9.1 引例——学生文件信息的创建 294
9.2 文件概述 295
9.2.1 流的概念 295
9.2.2 文件的分类 296
9.2.3 文件指针 297
9.3 文件的打开和关闭 298
9.3.1 文件的打开 298
9.3.2 文件的关闭 299
练习9.1 300
9.4 文件检测函数 300
9.4.1 检测文件末尾函数 300
9.4.2 检测出错函数 301
9.5 文件的读/写操作 301
9.5.1 字符读/写函数 301
9.5.2 字符读/写函数应用实例 302
9.5.3 字符串读/写函数 303
9.5.4 字符串读/写函数应用实例 304
9.5.5 格式化读/写函数 304
9.5.6 格式化读/写函数应用实例 305
9.

读者评论

  • 看不懂,还不够深奥!!!!!

    周星驰发表于 2017/5/23 17:14:26

我要评论

作者介绍

揭安全,男,毕业于江西师范大学计算机系,获计算机软件与理论硕士学位,1997年参加工作,现任江西师大计算机学院副教授,计算机科学系系主任,2013年起低职高聘教授。主要承担《高级语言程序设计》、《数据结构》、《面向对象程序设计》等课程的教学工作,三门课程均被评为江西省高等学校精品资源共享课程。制作的《高级语言程序设计》教学课件获得江西省高校第四届多媒体课件大赛一等奖。获得江西省模范教师,江西省师德标兵,江西省高校中青年骨干教师,江西师范大学教学名师等荣誉称号。2014年3月~2014年8月California State University Fullerton 访学。

推荐用户

同系列书

相关图书

人邮微信
本地服务
教师服务
教师服务
读者服务
读者服务
返回顶部
返回顶部