何勤:《C语言程序设计问题以及求解方法》.pdf
《何勤:《C语言程序设计问题以及求解方法》.pdf》由会员分享,可在线阅读,更多相关《何勤:《C语言程序设计问题以及求解方法》.pdf(163页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C语言程序设计问题与求解方法编程高手修炼捷径何 勤 著代序目前,人们要真正学会编程,大多都要花费五年以上的时间,悬梁刺股、卧薪尝胆。真正原因何在?其实只需到真正会编程的人身上,就能找到根本原因。经过认真仔细分析,我发现根本原因在于:每个真正会编程者,都必须具备计算机科学的大局观。也就是说,每个真正会编程者都必须懂得和掌握:1、c 语言的基本语法(主要是各种命令型语言的公共部分,其他语言目前还无法取代)2、大量阅读和调试经典的、基本的、由易到难的各种类型的C 语言程序(至少100题以上)。消化和积累各种基本问题的编程思路,并能用逐步求精的伪代码构造常见问题的算法;3、学习算法和数据结构的基本知识
2、。4、整体上把握计算机到底是如何工作的;5、整体上把握操作系统是如何在硬件的密切配合下通过查找各种表格,管理调度计算机的所有软硬件资源为多道应用程序运行(和计算机用户)提供服务的。6、编译程序大体上是如何对源程序进行编译工作的。以上六项是必须具备的。此外,如果想成为程序员,还应当学习和掌握:汇编语言程序设计、数据库原理及数据库编程、计算机网络及网络编程、面向对象程序设计等课程知识、计算机原理和操作系统更深入的知识。由此可见,这条成才之路确实非常漫长和艰苦!尤其是第4 到第6 项知识的掌握,更是一个极为痛苦的心路历程上的万里长征!因为读者不仅要认真学习这些知识,而且还要做大量的提炼精华、融会贯通
3、的艰巨功课。这是由于各门课程之间的内容衔接这项无比艰巨的工作,通常必须由学生亲自去完成,目前没有任何一本书在这方面做得比较好。为了大大减轻这个成才过程中的痛苦,明显缩短读者真正学会编程的周期。笔者花费了十余年时间广泛收集、筛选素材,并且进行了长时间地、艰苦地探索。终于很幸运地找到了一个绝好的比喻理想厨房系统,恰好可以把以上几个方面的知识在一个比较初级的层次上,比较完美地串联起来。构成一幅计算机科学中(与真正学会编程有关的)最重要的、最精华的基本知识的“联络图”。为初学者在短时间内把握计算机科学的大局观并学会编程,开辟了一条相对比较轻松的捷径。而且,这也为后续更高级编程技术课的学习奠定了扎实的知
4、识基础。本书虽然比较系统地讲解了 C 语言语法,但是,读者别指望从这本书中找到很多高深语法细节问题的详细讲解。因为笔者认为:过早学习太多高深语法知识,是很多读者学不会编程的罪魁祸首!这将导致很多读者觉得程序设计课相当枯燥乏味。浪费了读者本可以用来学习生动有趣的编程思路和技巧的、有限和宝贵的精力。大脑里留存下了一大堆未经消化的细节语法规则,反而束缚了最需灵活自由的编程思路的展开和翱翔。编程语言的高级语法知识的学习和掌握,比大量编程思路的领会、消化和积累要容易得多!读者在学习编程过程中最需要得到的是编程思路上的引导和启发。读者应当在真正学会编程后再决定是否要比较全面深入自学哪一种程序设计语言的语法
5、细节知识。本书中的大多数例题值得你认真钻研,因为其中蕴含了大量比较经典的基本编程思想和编程技巧。本书不可能系统讲解各种编程思路(这是算法、数据结构这两门课程的任务),然而,本书却教给了读者很多有效的举一反三的编程方法,这种方法强调从特殊到一般,来探索问题的编程思路和编程技巧。在循环和数组这两章中的很多例题中,展现了如何利用这种方法来做各类编程题。本书也很重视培养读者用逐步求精的伪代码来构思算法的能力。读者要注意,学习钻研本书,一定要配套做100200道各种类型的由易到难的编程题。这个亲自动手编写和调试程序的实践性修炼环节,是任何编程书籍和老师都无法替代的。这是学会编程决不能省略的最重要环节。再
6、困难也要坚持,挺过开始的困难阶段,变成一种习惯后,你就能够逐渐享受到编程带来的极大乐趣。读者还要特别注意:千万不要被某些教科书误导,从而陷入钻研一门高级语言语法细节知识的痴迷和狂热之中,误以为学好一门语言的高深语法,就可以轻松步入编程高手的行列。这就象一位想学会写作文的学生,只热衷于冷僻汉字和高深语法,而置更为重要的通过认真学习消化课文来积累写作思路和技巧(包括大量造句和写作文)于不顾那么可笑!必须将编程思路的学习领会和积累,放在编程学习中的首要位置。以理想厨房为 纲,以程序如何运行、如何构思、如何编写为“目,把计算机科学中为了真正学会编程必须掌握的、几乎所有的、基础的、精华的知识有机的串联起
7、来。在本书中仅仅做了这样一件事。一书在手,“软(指软件)硬(指硬件)兼施、内(指编程思想)外(指语言语法)兼修”,让读者可以真正全方位学习编程,并且真正学会编程,这是本书的写作目标。所以,本书中的知识讲解比较密集、浓缩,尤其是第一章和第二章。读者要作好心理上的准备,你是否愿意付出艰苦努力,去认真学习本书,出版社和作者是否值得信任。读者不要以为真正学会编程只是计算机专业学生的事。任何一位当代社会的理工类大学生,都必须具备一定的编程能力,能够在未来的科技工作中把计算机做为自己的得力助手和亲密伙伴,否则你就不是当代社会的合格科技人材。当代科技工作者不会编程,就象古代战士不会射箭一样。何勤初学者阅读本
8、书,建议从第4 1页开始第一部分:计算机原理(初)第。章“理想厨房”的工作原理0.1理想厨房系统0.2理想厨房系统的一个炒菜实例0.3 理想厨房”工作的重要特点0.4理想厨房系统与计算机系统术语对照表第1章计算机的基本工作原理1.1 二进制简介1.1.1 二进制与二进制数的基本概念1.1.2 与二进制相关的术语:位、位串、字节1.1.3 数和码的含义与区别1.2 计算机系统1.2.1 计算机系统中的硬件1.2.2 计算机系统中的软件1.2.3 计算机指令能做的工作1.3 提高部分1.3.1 程 序(指令序列)在硬件上的运行过程1.3.2 结构化、规范化的机器语言程序1.3.3 各种数制之间的转
9、换第二部分(C语言基础)第2章C语言程序结构和基本语法要素第3章顺序结构程序设计3.1 语句执行的顺序性3.2 用计算机求解问题的步骤3.3 逐步求精的伪代码3.4 验证算法的方法3.5 赋值表达式和多重赋值3.6 变量类型的进一步讨论3.7 各种类型的常量3.8 不同类型数据之间的类型转换3.9 常见编程错误3.1 0 提高部分3.1 0.1 机内形式的整数3.1 0.2 二进制浮点数在计算机中的表示方法第4章选择结构程序设计4.1 两种基本的i f语句4.2 布尔表达式之一:关系表达式4.3 空语句4.4 复合语句4.5 if语句的嵌套及其用法4.6 布尔表达式之二:逻辑表达式4.7 一种
10、特殊的多重嵌套if语句多分支选择结构语句4.8 switch 语句4.9 选择结构常见错误4.1 0 提高部分4.10.1 其他表达式作为布尔表达式使用4.10.2 条件运算符4.10.3逻辑表达式的短路运算第5章循环结构程序设计5.1 while 语句5.2 自增、自减运算符和表达式的副作用5.3 do-while循环语句5.4 f o r语句5.5 复合赋值运算符和逗号表达式5.6 break 语句和 continue 语句5.7 循环语句的嵌套5.8常见错误5.9提高部分第6章数组6.1 引言6.2 一维数组6.2.1 一维数组的定义6.2.2 下标变量(数组元素)6.2.3 下标和下标
11、表达式6.2.4 动态下标变量6.2.5 下标和下标表达式的允许取值范围6.2.6 数组元素在内存中的相对位置6.2.7 数组元素的初始化6.2.8 下标变量的存取6.3 一维字符数组和字符串6.3.1 一维字符数组的定义6.3.2 单个字符的输入输出库函数6.4 二维数组6.5 编程综合练习第7章函数7.1 引言7.2 函数的概念7.3 函数编写的一些重要原则7.4 使用数组(或数组元素)作为函数参数7.5 函数的嵌套与递归7.6 有关函数定义、返回、声明、调用的进一步说明7.6.1 函数定义7.6.2 return语句与函数类型7.6.3 函数声明与函数原型7.6.4 函数调用7.6.5
12、函数的形式参数与实际参数7.7 提高部分第8章指针8.1 引言8.2 指针变量的定义、初始化和应用8.2.1 指针变量的定义8.2.2 指针变量的初始化8.2.3 指针赋值8 2 4间接寻址运算符8.2.5 指针变量作为函数的形式参数和实际参数8.2.6 指针作为函数调用的返回值8.3 指向数组的指针以及相关的运算8.3.1 指针变量指向数组元素8.3.2 数组名用作指针(常量)8.4 提高部分第9章C语言进阶9.1 结构9.1.1 结构类型的定义9.1.2 定义结构变量9.1.3 结构变量的初始化和访问(输入/输出和存取)9.1.4 结构数组和结构指针的定义、初始化以及访问方式9.1.5 用
13、typedef定义类型的别名9.2 编译预处理9.2.1#includc 命令9.2.2#def ine 命令9.2.3 条件编译指令9.3 文件、流和输入/输出9.3.1 概述9.3.2 文件和流的概念9.3.3 文件的两种形式9.3.4 文件的输入和输出9.4 提高部分9.4.1 链 表(单链表)9.4.2 位运算9.4.3 枚举类型9.4.4 文件流的本质第三部分算法与数据结构简介第四部分利用ege图形库函数的游戏编程案例第五部分计算机原理和操作系统简介第11章编程原理进阶1 1.1 引言11.2 输入/输出设备和输入/输出接口电路11.3 内存与外存1 1.4 中断和操作系统11.4.
14、1 操作系统工作的机制11.4.2 操作系统的特点11.5 提高部分11.5.1计算机为何使用二进制数字信号?11.5.2 模拟图像和声音的数字化编码过程附录A ege图形库函数使用说明和库函数列表附录B常用字符与ASCII码对照表附录B常用C语言库函数附录C运算符的优先级和结合性附录D格式化输入输出库函数的用法小结参考文献第零章理想厨房的工作原理一种有着神奇的“魔 力 和“智能”的人造设备,正在迅速地、彻底地、默默无闻或者令人震惊地改变和丰富我们所生活的大千世界。这个看起来很不起眼的,在少数场合被称为“电脑”的电器设备,是如何具有如此神奇的“魔力”和“智能”的?本章和下一章将带你开始解开这个
15、与我们的生活和工作息息相关的当代社会最大的谜。0.1 节介绍理想厨房系统,0.2 节通过一个炒菜实例,讲解理想厨房各部件是如何密切配合工作的。0.3是一张理想厨房系统与计算机系统的对照表。计算机从发明到现在不过70年左右的时间,然而计算机的发明、改进和普及,把人类带进了智能时代。计算机本身也变得越来越复杂、快速、小巧、种类繁多。但大多数计算机都遵循冯.诺伊曼体系结构,这为我们理解计算机的基本工作原理提供了方便。从某种角度来看,计算机就是一种人造智能生命。想要真正学会编程,通过编写的程序命令计算机工作,就必须懂得计算机的基本工作原理。就像人们要与某种具有智能的其他物种个体进行交流通信,就必须对那
16、个物种的习性有一个基本了解一样。本章和下一章是全书的重要基础。通过这两章,读者可以了解计算机的工作过程。这些知识对学习程序设计非常有帮助。直接学习计算机工作原理是极其枯燥乏味、很困难的,因为有大量的新名词。为此,笔者付出了极大的努力,找到了一种比较好的类比方法理想厨房系统,通过这个例子就可以初步了解计算机的基本工作原理。0.1理想厨房系统:理想厨房系统,是一个通过顺序执行菜谱中的各个加工步骤,把原材料加工成菜肴的系统。它由硬件和软件(菜谱)组成。1)软件部分:菜谱是理想厨房系统中的一个无重量、无体积、不会损坏、但可以经常更换的极为重要的“软件”部件。菜谱由一个个的加工步骤顺序组成。每个加工步骤
17、命令理想厨房系统完成一个基本操作(比如炒、蒸、煮、输入一种原材料等)。注意:为了解说简洁起见,在以下叙述中,我们经常把菜谱中的一个“加工步骤”称为一条“揖令:。因为一个加工步骤就是一条指导理想厨房如何工作的命令。2)硬件部分:理想厨房系统,主要由以下四个“硬 件 (即实物)部件构成理想厨房、自动冰箱、输入输出设备(即配菜员和传菜生)和三条传送带。需要注意的是,理想厨房仅仅只是理想厨房系统中的一个重要组成部分。理想厨房系统的构成简图如图0所示:理想厨房自动冰箱0.1理想厨房系统运行示意图:0.1理想厨房系统示意图:自动冰箱:自动冰箱负责临时保存菜谱、原材料和菜肴。它由非常多的(比如几百个)大小一
18、样的格子组成,每个格子都有一个唯一固定编号,这个编号称为地址。地址是从0开始逐一递增的。是不是感到很奇怪:菜谱也要保存在冰箱中,这样做的道理请看本章后面。每份原材料和菜谱中的每个加工步骤,都占据冰箱中的一个格子。理想厨房:功能:负责根据从冰箱的菜谱中取到的加工步骤,进行炒菜以及进行相关的控制工作。构成:理想厨房主要由厨房管理员、厨师、炊具和一些碟子组成,参见图0.1。理想厨房中的各种碟子理想厨房中有一些起着重要作用的碟子:一 个P C碟(又称为指令地址存放碟):此碟中存放一个非负整数值,这个值是一个地址;它指明将要执行的指令位于自动冰箱的哪一格中。一个IR碟(又称为指令存放碟):用来存放刚刚从
19、冰箱中取过来的一条立即要执行的指令。理想厨房中还有若干个通用碟(图0.1中标有名称RO、RI、R 2的碟):用来临时存放从冰箱中取来的原材料或经过加工了的半成品或成品。这是由于到冰箱格子中存取物品,要比到通用碟慢得多的缘故。指令执行的全过程理想厨房每次只能按顺序执行菜谱中的一条指令。理想厨房执行指令的流程完全是周期性的,即任意一条指令都是按照“取指令阅读分析指令执行指令”这三个阶段进行的。厨房管理员首先根据PC碟中的值,通过三条传送带的协调工作(三条传送带如何协调工作的细节,请参见下一节),到自动冰箱的指定格中去取菜谱中的一条指令。取到理想厨房并把它存放到IR 碟中之后,PC碟中的值将会加上1
20、这是为取下一条指令预先做好准备。然后,厨房管理员阅读并分析IR 碟中刚取到的这一条指令,根据该指令的指示,去做以下六类工作中的一种:1.取物品:通过三套传送带,命令自动冰箱把指定地址格子中的(炒菜加工步骤马上要用到的)原 材 料(通过材料传送带)传送到理想厨房中来;2.加 工:章令厨师按照指令的要求,对原材料作一个基本加工操作(做 炒 ,蒸二“煮”等基本操作步骤中的某一个动作);3.存物品:通过向三套传送带向自动冰箱发号令,把某个碟子或炊具中的成品(或半成品)送回到冰箱指定的格子中存放;4.在厨房内部进行物品传送:在厨房的各个碟子和炊具之间传送原料或半成品;5.输入:命令配菜员为某道菜临时配备
21、原材料;(在本章不作讨论)。6.输出:命令传菜生将炒好的菜送给顾客;(在本章不作讨论)。一条指令执行完后,理想厨房立即自动进行下一个完全类似的、新 的“取指令阅读分析指令执行指令”的工作。下面我们通过一个实例来讲述理想厨房系统的工作机制。这是本章的一个重点,因为计算机的工作原理,与之极其相似。0.2理想厨房系统的一个炒菜实例在本节中我们通过炒制一道青菜的例子,来说明理想厨房系统的工作全过程。首先,把青菜放在冰箱地址为5 的格子中,冰箱地址为6 号的格子,预留给炒好的菜使用。菜谱的所有加工步骤(又称为指令)从冰箱地址0 号格开始依次按照顺序存放,编写炒青菜的菜谱如下:地 址0的格子中地 址1的格
22、子中地址2的格子中取地址5(中的物品)到RO碟;将R0(倒入炒锅中)炒好后装到R1碟;存R1碟(中的物品)到地址6中;可见,此菜谱一共有3 个加工步骤。开始时理想厨房系统状态如下图0.3(注意:冰箱格子以及理想厨房碟子中存放的物品都用了斜体字)理想厨房 自动冰箱碟名碟中物品地址 冰箱格子中物品图0.3R0材料传送带0取她址5到RO碟R1 厨具1将R。炒好后装到R1碟;R2 厨师2存R 1碟到地址6中;地址传送带304PC 0 厨房管理员5青菜IR控制传送带6取7菜谱和原料安放完毕后,启动理想厨房系统,开始自动化的工作。1)厨房管理员根据PC碟子中的数字“炉,知道要到地址为。的格子中取第一条指令
23、(即加工步躲)。于是,厨房管理员向控制传送带上发出一个“取”信号,然后马上将PC碟中的数字 V 复制后放到地址传送带上。这两个信号都会到达冰箱。冰箱收到这两个信号后(知道理想厨房想要得到第0 格中的物品,于是自动冰箱)将。号格的 内 容“取地址5到破 复 制 一 份,将其放到材料传送带上,送往理想厨房。理想厨房收到后,将这条指令放到IR碟中。然后,厨房管理员将PC碟中的原来值增加1,以便为取下一条指令做好准备。取指令工作完成后,理想厨房系统处于如下图。.4 状态:碟名碟中物品理想厨房R0R1炊具R2厨师PC1厨房管理员IR取地址5到RO碟材料传送带地址传送带控制传送带图0.4地址 冰箱格子中物
24、品自动冰箱01234567取地址5至1!R 0碟将RO炒好后装到R 1碟;存R 1碟到地址6中;青菜指令执行阶段:厨房管理员读到指令存放碟(即 IR 碟)子中去取物品,并且要放到R0碟中。因此,然后马上将5 这个数字放到地址传送带上。中的加工步骤后,知道要到冰箱地址为5 的格管理员向控制传送带上送出一个“取”信号,冰箱知道理想厨房要取5 格中的物品,于是冰箱将地址为5 的格子中的物品 喜菜 取出来,放到材料传送带上。材料传送带上的物品“青果”,传到理想厨房后,按照指令的要求(通过理想厨房内部的传送带)送到了 R。碟中。第一条指令执行完后,理想厨房系统处于如下图0.5所示的状态:理想厨房碟名碟中
25、物品自动冰箱地址 冰箱格子中物品2)接下来,开始下一条指令的取指令阶段。完全类似于前一条指令,在取指令阶段完成后,理想厨房系统处于如下图0.6 状态:R 0青菜R1 炊具R2 厨师PC 7 厨房管理员IR取地址5 到 R O 碟材料传送带地址传送带5控制传送带取01234567取她址5 到 R O 碟将 R。炒好后装到R 1 碟;存 R 1 碟到地址6中;青菜图0.5指令执行阶段:管理员阅读并分析指令存放碟中的指令后,命令厨师将R 0 碟中的物品倒入锅中炒好后装到 R 1 碟。第二条指令执行完后,理想厨房系统处于如下图0.7 状态:理想厨房 自动冰箱理想厨房自动冰箱碟名 碟中物品地址冰箱格子中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计问题以及求解方法 语言程序设计 问题 以及 求解 方法
限制150内