C语言程序设计:问题与求解方法
作者 : 何勤 著
出版日期 : 2012-12-06
ISBN : 978-7-111-40002-8
适用人群 : 适用学生层次:本科生适用课程:C程序设计
定价 : 36.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 330
开本 : 16
原书名 :
原出版社:
属性分类: 教材
包含CD :
绝版 :
图书简介

本书从编程原理、基本语法、丰富且循序渐进的例题三个方面以C语言为平台介绍C语言,意在培养学生的解决问题的思路和能力。

图书特色

C语言程序设计
问题与求解方法
何勤 著
程序设计能力已经成为高等院校理工科专业学生需要具备的一项基本能力,如何在课程中培养学生分析能力、设计合适的算法、编写出相应的程序是广大教师关注的问题。本书作者结合多年的教学实践和深入的分析、思考,创新性地提出程序设计课程中应包括编程原理、基本语法、类型丰富且循序渐进的例题,这有助于培养学生的思维能力、提升编程能力。

本书特点
以编程原理、深入透彻且简洁的C语言语法、类型丰富且难度循序渐进的例题为主线,在理论与实践密切结合的氛围下使学生通过理论学习、阅读大量优秀程序以及动手编程达到学会编程的目的。
从初学者的角度出发,理论讲授适度,每个知识点都辅以相应的例题。例题注重解决问题的思考过程和算法的讲述,同时通过问答、练习、章后习题的形式对易错、易忽视的知识点进行强调和巩固,使读者不仅能掌握应会的理论,更能通过实践掌握编程技巧。
创新性地通过“理想厨房”的工作过程类比计算机的工作原理,并在介绍计算机运行原理的基础上对程序设计背后涉及的硬件层面的原理和概念进行相应的介绍,使读者从更为深入的层面理解程序设计的规则、运行过程,从而学会用C语言解决问题的方法。
教辅齐备,提供PPT、源代码、课程设计案例、习题答案等资源,方便教师授课。

图书前言

在计算机被普遍使用的今天,是否具备一定的编程能力已经成为衡量一名理工科大学毕业生是否合格的重要标准。在未来的很多工作场合中,通过编程,可以利用计算机的超强能力节省大量的实验经费和时间,同时会使自己更具职业竞争力。当今,嵌入式编程也日益受到关注,这不仅使社会进入更环保、更智能的时代,也对IT工作者的编程能力提出了更高的要求。
一、程序设计课程中存在的问题
  程序设计课程已经成为高等院校普遍开设的课程之一。随着学校、学生能力、教师教学水平和选用的教材不同,课程的教学效果会有一定的差异。根据作者多年的教学体会和对学生的调查,发现在程序设计课程中普遍存在以下几个问题:
  1)学生学习本课程的目的不正确。我们发现,很多学生没有意识到学习本课程的重要性,只是把通过某种考试作为学习的唯一目标,因此出现“考完试后就把知识还给老师”的现象也不足为奇了。
  2)学生的学习方法不正确。很多学生在学习中过于关注语法细节,而没有关注编程思路的学习,因此在学完课程后遇到实际问题时,依然感觉无从下手。通过课程真正学会编程的学生比例很小,远远不能满足工作岗位的需要。
  3)学习材料存在一定的问题。学生经常反映,在学习的过程中有很多疑问,而在书中或参考资料中很难找到相应的答案。因此,不能像数学、物理之类的课程那样进行系统、透彻地学习,难以将知识融会贯通,越学到后面感觉越困难。
  4)学完本课程后,学生想进一步学习,提高自己的编程水平,面临的困难和障碍极大,这就是我们所说的编程能力提高的“天花板”现象。而突破这个“天花板”并非易事。
  如何才能解决上述问题呢?我认为,首先,要让学生认识到具备编程能力对他们未来的学习和工作是极其重要的;其次,教师必须明确本门课程的培养目标,并坚持把这个培养目标贯彻到教学过程的始终。对于C语言程序设计课程而言,应当把培养学生的编程能力放在核心位置,而绝不能把学习C语言的语法放在最重要的位置。
二、程序设计课程的核心内容
  基于上述认识,C语言程序设计课程应当讲什么就可以很容易地归纳出来了—所有有利于培养学生基本编程能力(这里指的是用C语言进行编程的能力)的素材,都可以放到C语言程序设计的课程之中,而不要拘泥于这些内容应该是属于哪一门课程的。应当在确保系统性、连贯性和完整性的前提下,按照提高编程能力的相关程度来决定一个素材讲解的详略程度。
  一般认为,培养学生编程能力主要涉及两大知识模块:语法和算法。但我认为这是不够全面的,还有一些知识对于提升编程能力是非常有帮助的。比如,不了解内存的基本结构,必然导致对变量概念理解的不透彻;不了解用补码表示有符号整数和用余码(有的教材称为移码)近似表示实数的原理,对变量之间的类型转换也必然是似懂非懂,在数值发生溢出或者在类型转换中出现错误时就会不知如何处理;不了解计算机如何执行机器语言指令的基本过程,就难以理解高级语言源程序的语句是如何命令计算机工作的;不了解二进制的数和码,以及文字、图像、声音如何通过编码进入计算机的知识,学生就会缺乏编写这类程序的能力;如果不懂得内存的编程结构,将对指针的学习和理解内存泄漏、缓冲区溢出的概念造成困难;如果不能清楚地区分内存和外存,就难以理解内存中的变量与外存中的文件之间是如何通过流(字节流或字符流)来传递数据,从而完成输入输出工作的;不理解编译程序的基本工作原理,就不能对变量、运算符和表达式的本质进行深入理解,更不可能用这些语法要素编写出正确的源程序。如果对计算机本质上能够做什么、不能够做什么都缺乏必要的理解,就不可能有基本的编程思路和扎实的编程基本功;不了解计算机操作系统的基本原理也是编程高手成长之路上的一个重大障碍。
  我把上面所列的与提高编程能力密切相关的,既不属于语法也不属于算法的知识,归纳到“编程原理”这个知识模块中。
  因此,我认为,从知识结构来看,培养编程能力的知识模块不应仅仅包括语法和算法,而应该包括三个模块,即编程原理、编程语法和编程思路。
  综上所述,我认为在程序设计课程中,必须妥善涵盖以上三个方面的知识。讲授编程原理的知识是解决编程能力提高的“天花板”现象的有效手段;培养学生面对实际问题的解决思路和算法构思能力是本门课程的重要任务,必须通过难度逐渐递增的(结合语法)讲解编程思路的大量例题(注意,绝不能是少量例题),让学生能够通过大量阅读和消化这些例题,来积累解决编程问题的思路和技巧,通过对例题的模仿学会构思算法。基本的语法知识是算法详细实现的需要,语法知识的学习也使得学生具备阅读和调试程序的能力,但切忌纠结于语法细节——这是导致学习过程枯燥乏味的根源(学生完全可以在学会编程后自学更高级的语法细节和知识)。最后,应该通过一两个有一定规模的实际案例尽可能将大部分重要的语法知识串联起来,使学生能够比较顺利地过渡到编写实用程序的阶段。此外,课程最好能兼顾与后继课程(如“数据结构与算法”、“嵌入式编程”等)的衔接,以降低学生进一步学习的难度。
  编程能力的培养是一个系统工程,缺乏以上提到的任何一个环节和训练,学生的编程能力可能都要大打折扣。
三、本书的编写理念
  基于以上的课程教学理念和长期的教学积累,笔者编写了此书。本书的创新之处可用“系统阐述编程原理,详细讲解编程思路”两句话来概括。
  编程原理阐述不系统、深入和透彻,很多知识点就要死记硬背,这样的学习方式必然枯燥乏味;同时,学生无法形成自己的知识地图,难以融会贯通。而例题的编程思路如果讲解不详细、不循序渐进、数量不够多,读者必然难以积累和养成自己的编程思路和技巧。这些恰恰是初学者学习编程时最关键的因素。因此,本书在内容组织上希望尽量解决这两方面的问题。
  本书的编排方式使得本书既适合作为教材,也适合各种层次的读者自学使用。没有基础的读者可以先认真学习、消化本书的基本内容,然后再学习延伸与拓展以及提高部分。有一定程序设计基础的读者,可以快速浏览基本内容,重点学习编程原理,钻研例题的编程思路,学习延伸与拓展部分以及提高部分。作为教材时,第4、5、6章中的例题只需讲解一半,其他的例题可作为学生的自学材料。书中带星号的内容、习题为选学内容,教师可根据学生情况选择是否讲授。
  需要注意的是,学习编程是一个理论与实践密切结合的过程。认真学习教材、消化书中所有例题是必不可少、极其重要的环节。但这样做还是不够的,读者还必须认真完成一定数量的编程题(包括上机调试),没有一定量的编程实践训练是不可能真正学会编程的。
  培养学生的编程能力是一项长期、系统的工作,作者做出了一些尝试。限于水平,书中难免有疏漏和错误,希望同行、读者指正。如果对本书有什么意见和建议,可与我直接联系,我的邮箱是heqin3785@yahoo.com.cn。

作者

上架指导

计算机\程序设计

封底文字

程序设计能力已经成为高等院校理工科专业学生需要具备的一项基本能力,但是如何在课程中培养学生分析能力、设计合适的算法、编写出相应的程序是广大教师关注的问题。本书作者结合多年的教学实践和深入的分析、思考,创新性地提出程序设计课程中应包括编程原理、基本语法、类型丰富且循序渐进的例题,这有助于培养学生的思维能力、提升编程能力的有效方法。
本书特点:
以编程原理、深入透彻且简洁的C语言语法、类型丰富且难度循序渐进的例题为主线,在理论与实践密切结合的氛围下使学生通过理论学习、大量优秀程序的阅读以及动手编程达到学会编程的目的。
从初学者的角度出发,理论讲授适度,每个知识点都辅以相应的例题。例题注重解决问题的思考过程和算法的讲述,同时通过问答、练习、章后习题的形式对易错、易忽视的知识点进行强调和巩固,使读者不仅能掌握应会的理论,更能通过实践掌握编程技巧。
创新性地通过“理想厨房”的工作过程类比计算机的工作原理,并在介绍计算机运行原理的基础上对程序设计背后涉及的硬件层面的原理和概念进行相应的介绍,使读者从更为深入的层面理解程序设计的规则、运行过程,从而设计更为科学的程序。
教辅齐备,提供PPT、源代码、课程设计案例、习题答案等资源,方便教师授课。

图书目录

前言
写给学生的话—应该如何学习编程
教学建议
第0章 “理想厨房”的工作原理1
0.1 理想厨房系统1
0.2 理想厨房系统的一个炒菜实例3
0.3 “理想厨房”工作的重要特点6
0.4 理想厨房系统与计算机系统术语对照表7
本章习题8
第1章 计算机的基本工作原理9
1.1 二进制简介9
1.1.1 二进制与二进制数的基本概念9
1.1.2 与二进制数相关的术语:位、位串、字节 10
1.1.3 数和码的含义与区别11
1.2 计算机系统13
1.2.1 计算机系统中的硬件14
1.2.2 计算机系统中的软件16
1.2.3 计算机指令所能做的工作17
1.3 提高部分18
1.3.1 程序(指令序列)在硬件上的运行过程18
1.3.2 结构化、规范化的机器语言程序18
1.3.3 各种数制之间的转换19
本章习题21
第2章 C语言程序结构和基本语法要素24
2.1 高级程序设计语言和编译程序简介24
2.2 C语言历史概述24
2.3 C语言源程序的主要构成成分:函数定义25
2.4 C语言源程序的次要组成成分:编译预处理命令、注释和声明26
2.5 C语言字符集29
2.6 标识符30
2.7 关键字 30
2.8 分隔符31
2.9 常量31
2.9.1 数值常量31
2.9.2 符号常量32
2.9.3 数据的机内形式和机外形式33
2.10 变量33
2.10.1 变量的定义33
2.10.2 变量名和变量的值34
2.10.3 各种基本类型的变量定义35
2.10.4 变量的初始化36
2.11 数据输出—格式化输出函数 printf()的用法 36
2.12 数据输入—格式化输入库函数scanf()的用法39
2.13 运算符42
2.14 表达式43
2.15 算术表达式44
2.16 赋值语句45
2.17 提高部分48
2.17.1 对字符量的进一步说明48
2.17.2 变量地址的运算符 & 和变量占用的内存字节数的运算符 sizeof49
本章习题50
第3章 顺序结构程序设计53
3.1 语句执行的顺序性53
3.2 用计算机求解问题的步骤53
3.3 逐步求精的伪代码54
3.4 验证算法的方法56
3.5 赋值表达式和多重赋值59
3.6 变量类型的进一步讨论59
3.7 各种类型的常量62
3.8 不同类型数据之间的类型转换63
3.9 常见编程错误66
3.10 提高部分67
3.10.1 机内形式的整数67
3.10.2 二进制浮点数在计算机中的表示方法 70
本章习题72
第4章 选择结构程序设计 74
4.1 两种基本的if语句74
4.2 布尔表达式之一:关系表达式77
4.3 空语句79
4.4 复合语句81
4.5 if语句的嵌套及其用法83
4.6 布尔表达式之二:逻辑表达式84
4.7 一种特殊的多重嵌套if语句——多分支选择结构语句90
4.8 switch语句 92
4.9 选择结构的常见错误96
*4.10 提高部分97
4.10.1 其他表达式作为布尔表达式使用97
4.10.2 条件运算符98
4.10.3 逻辑表达式的短路运算98
本章习题98
第5章 循环结构程序设计100
5.1 while语句100
5.2 自增、自减运算符和表达式的副作用109
5.3 do…while循环语句113
5.4 for语句117
5.5 复合赋值运算符和逗号表达式120
5.6 break语句和continue语句121
5.7 循环语句的嵌套125
5.8 常见错误139
5.9 提高部分139
本章习题140
第6章 数组142
6.1 引言142
6.2 一维数组143
6.2.1 一维数组的定义143
6.2.2 下标变量(数组元素)143
6.2.3 数组元素中的下标和下标表达式143
6.2.4 动态下标变量143
6.2.5 下标和下标表达式的允许取值范围 144
6.2.6 数组元素在内存中的相对位置144
6.2.7 数组元素的初始化144
6.2.8 下标变量中数值的存取145
6.3 一维字符数组和字符串162
6.3.1 一维字符数组的定义162
6.3.2 单个字符的输入输出库函数166
6.4 二维数组172
6.5 编程综合练习181
本章习题194
第7章 函数196
7.1 引言196
7.2 函数的概念197
7.3 函数编写的一些重要原则199
7.4 使用数组(或数组元素)作为函数参数206
7.5 函数的递归209
7.6 有关函数定义、返回、声明、调用的进一步说明218
7.6.1 函数定义218
7.6.2 return语句与函数类型219
7.6.3 函数声明与函数原型220
7.6.4 函数调用221
7.6.5 函数的形式参数与实际参数221
7.7 提高部分222
本章习题229
第8章 指针231
8.1 引言231
8.2 指针变量的定义、初始化和应用231
8.2.1 指针变量的定义231
8.2.2 指针变量的初始化232
8.2.3 指针赋值 233
8.2.4 间接寻址运算符233
8.2.5 指针变量作为函数的形式参数和实际参数235
8.2.6 指针作为函数调用的返回值 237
8.3 指向数组的指针以及相关的运算237
8.3.1 指针变量指向数组元素238
8.3.2 数组名用作指针(常量)240
8.4 提高部分243
本章习题246
第9章 C语言进阶248
9.1 结构 248
9.1.1 结构类型的定义248
9.1.2 定义结构变量 249
9.1.3 结构变量的初始化和访问(输入/输出和存取)250
9.1.4 结构数组和结构指针的定义、初始化以及访问方式252
9.1.5 用typedef 定义类型的别名254
9.2 编译预处理255
9.2.1 #include 命令255
9.2.2 #define命令256
9.2.3 条件编译指令257
9.3 文件、流和输入/输出258
9.3.1 概述258
9.3.2 文件和流的概念 259
9.3.3 文件的两种形式260
9.3.4 文件的输入和输出261
9.4 提高部分266
9.4.1 链表(单链表)266
9.4.2 位运算271
9.4.3 枚举类型274
9.4.4 文件流的本质276
本章习题277
第10章 综合案例280
本章习题289
第11章 编程原理进阶290
11.1 引言290
11.2 输入/输出设备和输入/输出接口电路291
11.3 硬盘291
11.4 中断和操作系统292
11.4.1 操作系统工作的机制292
11.4.2 操作系统的特点295
11.5 计算机为何采用二进制数字信号300
本章习题302
附录A Microsoft Visual C++ 6.0集成开发环境介绍303
附录B 常用字符与ASCII码对照表310
附录C C语言常用库函数313
附录D 运算符的优先级与结合性317
附录E printf()函数和scanf()函数的使用方式318
参考文献320

教学资源推荐
作者: 骆斌 主编 邵栋 任桐炜 编著
作者: 余永红
作者: 秦维佳 伞宏力 侯春光 孟艳红
作者: 郑阿奇 梁敬东 主编 朱毅华 时跃华 赵青松 编著
参考读物推荐