揭开电脑与编程的核心奥秘(何勤)88.doc_第1页
揭开电脑与编程的核心奥秘(何勤)88.doc_第2页
揭开电脑与编程的核心奥秘(何勤)88.doc_第3页
揭开电脑与编程的核心奥秘(何勤)88.doc_第4页
揭开电脑与编程的核心奥秘(何勤)88.doc_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

衔接各门主干课程详细讲解编程思想揭开编程核心奥秘提高现代科学素养 编程高手修炼捷径 何勤 著序目前,人们要真正学会编程,几乎都要花费五年以上的时间悬梁刺股、卧薪尝胆。真正原因何在?其实只需到真正会编程的人身上就能找到根本原因。经过认真仔细分析,我发现:根本原因在于:每个真正会编程者,都必须具备计算机科学的大局观。也就是说,每个真正会编程者都必须懂得和掌握:1、C语言的基本语法(主要是各种命令型语言的公共部分,其他语言目前还无法取代); 2、整体把握计算机到底是如何工作的;3、整体把握操作系统是如何在硬件的密切配合下,管理调度计算机的所有软硬件资源,为多道应用程序运行提供服务的。 4、编译程序大体上是如何对源程序进行编译工作的。5、大量的阅读和调试经典的、基本的、由易到难的各种类型的C语言程序(至少100题以上)。消化和积累各种基本问题的编程思路,并能用逐步求精的伪代码构造常见问题的算法;以上五项是必须具备的大局观方面的基本素质。此外,如果想成为程序员,还应当学习和掌握:汇编语言程序设计、算法与数据结构、数据库原理及数据库编程、计算机网络及网络编程、面向对象编程技术等课程知识。 由此可见,这条成才之路确实非常漫长和艰苦!尤其是第2到第5项知识的掌握,更是一个极为痛苦的心路历程上的万里长征!因为读者不仅要认真学习这些知识,而且还要做大量的提炼精华、融会贯通的艰巨功课。这是由于各门课程之间的内容衔接这项无比艰巨的工作,通常必须由学生亲自去做,目前没有任何一本书在这方面做得比较好。为了大大减轻这个成才过程中的痛苦,明显缩短真正学会编程的周期。笔者花费了十余年时间广泛收集、筛选素材,并且进行了长时间地、艰苦地探索。终于很幸运地找到了一个绝好的比喻理想厨房系统,恰好可以把以上五大方面的知识在一个比较初级的层次上,比较完美地串联起来。构成一幅计算机科学中(与真正学会编程有关的)最重要的、最精华的基本知识的“联络图”。为初学者在短时间内把握计算机科学的大局观,开辟了一条相对比较轻松的捷径。而且,这也为后续更高级编程技术课程的学习奠定了良好的知识基础。本书虽然比较系统地讲解了C语言语法,但是,读者别指望从这本书中找到高深语法细节问题的详细讲解。因为笔者认为:过早学习太多高深语法知识,是很多学生学不会编程的罪魁祸首!这将导致很多学生觉得程序设计课相当枯燥乏味。浪费了读者本可以用来学习生动有趣的编程思路和技巧的,有限和宝贵的精力。大脑里存下了一大堆细节的语法规则,反而束缚了最需灵活自由的编程思路的积累、展开和翱翔。编程语言的高级语法知识的掌握,比大量编程思路的领会和积累要容易得多!学生在学会编程过程中最需要得到的是编程思路上的引导和启发。 然而,本书中的大多数例题却是值得你认真钻研的,因为其中蕴含了大量比较经典的基本编程思想和编程技巧。本书不可能系统讲解各种编程思路(这是算法、数据结构这两门课的任务),然而,本书却教给了读者一种极为有效的举一反三的编程方法,这种方法强调从特殊到一般,来探索问题的编程思路和编程技巧。在循环和数组这两章的很多例题中,展现了如何利用这种方法来做各类编程题。本书也很重视培养读者用逐步求精的伪代码来构思算法的能力。读者要注意,学习钻研本书一定要配套做100200道各种类型的由易到难的编程题。这个亲自动手编写和调试程序的实践性修炼环节,是任何编程书籍和老师都无法替代的。读者还要特别注意:千万不要被某些教科书误导,从而陷入钻研一门高级语言语法细节知识的痴迷和狂热之中,误以为学好一门语言的高深语法,就可以轻松步入编程高手的行列。这就象一位想学会写作文的学生热衷于冷僻汉字和高深语法,而置更为重要的通过学习课文来学习、积累写作思路和技巧(包括体验生活、了解历史、地理、风土人情)于不顾那么可笑!必须将编程思路的领会和积累放在编程学习中的首要位置。以理想厨房为“纲”,以程序如何运行、构思、编写为“目”,把计算机科学中为了真正学会编程必须掌握的、几乎所有的、基础的、精华的知识有机的串联起来。在本书中仅仅做了这样一件事。读者不要以为真正学会编程只是计算机专业学生的事。任何一位当代社会的理工类大学生,都必须具备一定的编程能力,能够在未来的科技工作中把计算机做为自己的得力助手和亲密伙伴,否则你就不是当代社会的合格科技人材。 凡例本书中凡是在名词后出现了符号()的,表示这个名词的解释将在本章以下部分讲解。本书中所有指出的向后的参考都不必立刻去看。而是提醒读者此问题深入的讨论在后面,此处不宜进行。本书中所有“深入一步”、每章末的“提高部分”、和打了星号“*”章节的内容,在初学时都可以不看。第一章 计算机的基本工作原理(初)1.1理想厨房系统 1.2理想厨房系统的一个炒菜实例1.3理想厨房系统与计算机系统术语对照表1.4计算机与计算机系统:1.4.1计算机的硬件1.4.2计算机的软件1.5二进制及相关知识简介1.5.1 二进制数的概念 二进制转化成十进制 十进制转化成二进制1.6数和码的区别 1.6.1十进制的数和码 1.6.2 二进制的数和码1.7二进制的ASCII码 1.8基本存储单元的概念 1.8.1位 1.8.2字节 1.8.3字1.8.4基本存储单元 1.9计算机中的指令和机器语言程序 1.9.1计算机中的指令 1.9.2机器语言程序 1.10程序实例讲解(片断) 1.11计算机(系统)的基本特点 1.12理想厨房系统与计算机系统之间的重要区别 1.13模拟信号与数字信号的重要区别 1.14本章小结第二章 C语言的基本概念(基础篇)2.1C语言特点概述2.1.1C语言特点简介 2.2 预备知识 2.2.1结构化处理流程 2.2.2 子程序、子程序的调用、主调程序 2.2.3 “链接”的技术内幕子程序的“调用”与“返回” 2.3 C语言程序的宏观构成成分 2.3.1C语言源程序的宏观构成成分:函数定义 2.3.2函数定义=函数首部+函数体 2.3.3函数体的基本构成成分:定义序列+语句序列 2.3.4C语言源程序次要构成成分:编译预处理命令、注释和声明 2.3.5C语言源程序(文件)的宏观规范结构 2.4 C语言的基本语法 2.4.1正文部分 2.4.2 C语言的字符集 2.4.3标识符 2.4.4关键字 2.4.5C语言源程序中的分隔符 2.4.6 C语言中的常量 2.5 变量 2.5.1 定义变量 2.5.2变量类型 2.5.3 变量的内存位置无关性 2.5.4变量的初始化 2.6 运算符 2.7表达式 2.7.1算术表达式2.8 赋值表达式和赋值语句2.9 数据的输出:初识格式化输出库函数 printf()2.10 数据的输入: 初识格式化输入库函数scanf()2.11 本章小结第三章 C语言的基本概念(提高篇)3.1数据类型 3.2 类型转换3.2.1 表达式中的类型转换3.2.2 赋值语句中的类型转换3.3 运算符的优先级和结合性3.4 自增运算符 + 与自减运算符 3.5复合赋值运算符3.6多重赋值语句3.7 表达式的副作用3.8 单个字符的输入输出 3.8.1 putchar() 3.8.2 getchar()3.8.3 getche()3.9 格式化输出库函数进阶 printf()3.10 格式化输入库函数进阶 scanf() 3.11 本章小结 第四章 选择结构程序设计4.1两种if语句4.2布尔表达式之一:关系表达式4.3空语句和复合语句4.4 if语句的嵌套4.5布尔表达式之二:逻辑表达式4.6多重选择 switch语句4.7 提高部分(条件表达式等)4.8 本章小结第五章 循环结构程序设计5.1 while循环语句:5.2 dowhile循环语句5.3 for循环语句5.4 退出循环continue和break语句5.5 多重循环语句5.6提高部分(逗号表达式等) 5.7 本章小结第六章 数值数组6.1引论6.2一维数组6.3多维数组 6.4 数组的应用6.5 提高部分6.6本章小结第七章 函数7.1引言7.2函数概述 7.2.1 函数的定义和调用 7.2.2实际参数与形式参数 7.2.3 return 语句7.3函数声明(函数原型) 7.4 变量的作用域和存储类别 7.5 函数的嵌套与递归7.6提高部分7.7 本章小结第八章 指针8.1引言8.2指针变量的定义和初始化8.3取地址运算符和间接寻址运算符8.4指针赋值8.5 指针作为实际参数8.6指针作为返回值 8.7 指针和数组8.8提高部分(动态申请内存等)8.9 本章小结第九章 字符串9.1字符串常量(字符串字面量)9.2字符串变量9.3字符串的输入和输出 9.3.1 字符串输出 printf( ) 和puts 9.3.2 字符串输入scanf()和gets() 9.3.3 逐个字符输入字符串9.4 存取字符串中的字符9.5 字符串库函数的简介和应用9.6字符串数组9.7提高部分9.8 本章小结第十章 结构、联合和枚举10.1结构类型和结构变量10.2结构数组10.3联合10.4枚举10.5提高部分(链表简介)10.6 本章小结第十一章 C语言其它内容简介11.1编译预处理 11.2命令行参数11.3位运算 11.4文件输入输出11.5提高部分11.6 本章小结第十二章 计算机与操作系统基本工作原理12.1 最简单的模型计算机12.2 用机器语言编程举例12.3 计算机的输入输出简介12.4 中断和操作系统简介12.5提高部分12.6 本章小结附录A附录B 部分习题答案第一章 计算机的基本工作原理(初)一种有着神奇的“魔力”和“智能”的人造设备,正在迅速地、彻底地、默默无闻或者令人震惊地改变和丰富我们所生活的大千世界。这个看起来很不起眼的,在一些场合被称为“电脑”的电器设备,是如何具有如此神奇的“魔力”和“智能”的?本章将带你开始解开这个谜。11节介绍理想厨房系统,1.2节通过一个炒菜实例讲解理想厨房各部件是如何密切配合工作的。1.3是一张理想厨房系统与计算机系统的对照表1.4到1.8介绍了二进制、计算机、机器指令和指令集、数和码。1.09对计算机的重要特点进行了概括性的总结、1.11是计算机与理想厨房的一些重要区别。其中1.2、1.3、1.4、1.9和1.11是本章重点。电子数字计算机从发明到现在,不过大约70年的时间。然而计算机的发明、改进和普及,却彻底地变革了人类社会。计算机本身也变得越来越复杂、快速、小巧、种类繁多。但大多数计算机都遵循冯.诺伊曼体系结构。这为我们理解大多数计算机的基本工作原理提供了方便。本节是全书的重要基础。通过本节,为你真正揭开计算机究竟如何工作的神秘面纱。(但是要直到12.4、12.5节,才能彻底揭开计算机硬件如何在操作系统这个系统软件的调度管理下,并行运行多道程序的内在奥秘。)纠正你对计算机的一些错误认识和看法。并为第2、12、13章的学习打下牢固的知识基础。本节不需要任何的预备知识,只要你能把本节认真仔细地学习两遍,你就能够真正懂得看似极为神秘莫测、奥妙无穷,到目前为止人类有史以来最伟大、最神奇而又最为复杂的发明计算机(又称为“电脑”。这个伟大发明,汇集了几代人中很多杰出人士的聪明才智和研究成果)是如何工作的基本原理。为达此目的,笔者付出了极大的努力,找到了一种比较好的比喻方法理想厨房系统,由此开始我们的真正理解计算机工作原理的,激动人心的探索旅程。1.1理想厨房系统:理想厨房系统,是一个通过顺序执行菜谱中的各个加工步骤,把原材料加工成菜肴的系统。它由硬件(理想厨房、自动冰箱和三条传送带)和软件(菜谱)组成。1) 硬件部分:理想厨房系统,主要由以下三个硬件部件(即实物部件)构成理想厨房、自动冰箱和三条传送带。自动冰箱:由非常多的大小一样的格子组成。负责临时保存菜谱、原材料和菜肴。是不是很奇怪?菜谱竟然要和原材料一道,统一存放在冰箱中!三条传送带:负责理想厨房与自动冰箱之间的通信及物品(菜谱中的加工步骤、原料和菜肴)传送。理想厨房:负责根据从菜谱中取到的加工步骤,进行炒菜以及进行相关的控制工作。2) 软件部分:菜谱是理想厨房系统中一个无重量、无体积、不会损坏、可经常更换的,但又极为重要的软件部件(即信息流部件)。菜谱由一个个加工步骤顺序组成。注意:术语“理想厨房系统”与“理想厨房”是有区别的,理想厨房只是理想厨房系统中的一个组成部分。理想厨房系统的构成简图如图1.1所示:理想厨房 自动冰箱 碟名 碟中物品 格子编号 格子(存放加工步骤或原料)R0R1 厨具R2 厨师PC 厨房管理员IR 材料传送带地址传送带控制传送带 01234567 图1.1理想厨房系统的构成简图(但图中没给出具体的软件)理想厨房中各种碟子的作用R0、R1、R2碟是一些通用临时存放碟,用来临时存放从冰箱取来的原材料或加工了的半成品或成品。PC碟:存放一个大于或等于0的整数值,这个值表示:下一个要执行的加工步骤存放在自动冰箱的哪一格中。IR碟:用来存放刚刚从冰箱中取过来的一个立刻要执行的加工步骤。 理想厨房执行菜谱的一个加工步骤,其流程完全是周期性的。 厨房管理员首先要根据PC碟中的值(这个值表示:菜谱中将要执行的下一个加工步骤,位于冰箱的哪一格中),通过三套传送带的协调工作,到自动冰箱的指定格中去取菜谱中的一个加工步骤。取到理想厨房并把它放到IR碟中后,PC碟中的值将会加上1,为取下一个加工步骤做好准备。然后,厨房管理员阅读并分析IR碟中刚取到的加工步骤;根据此加工步骤的指示,去做以下七类工作中的一种: 1通过三套传送带,命令自动冰箱把指定地址格子中的(炒菜加工步骤马上要用到的)原材料(通过材料传送带)传送到理想厨房中来即取物品;2命令厨师按照指令(即加工步骤)的要求,对原材料作一个基本加工操作(做“炒”,“蒸”,“煮”等基本操作步骤中的一个炒菜动作)即加工原材料。 3通过向三套传送带向自动冰箱发命令,把某个碟子中的成品(或半成品)送回到冰箱指定的格子中存放即存物品; 4在厨房的各个碟子或炊具之间传送原料或半成品在厨房内部进行物品传送 ;5根据某个状态碟中的具体条件(比如:加工步骤的预定时间到了、温度够了),不按正常顺序取出并且执行下一条指令,而是根据此指令中给出的(冰箱格子的相对或绝对)地址,跳转到那一格中去取下一条指令即进行(有条件的)跳转。6命令传菜生端菜给顾客;即输出。7命令配菜员为某菜配原材料;即输入。 一个加工步骤执行完后,理想厨房立即自动进行下一个完全类似的、新的 取加工步骤执行加工步骤的周期。 为了解说简洁,以下我们经常将一个加工步骤称为一条指令,因为一个加工步骤就是一条指导理想厨房如何工作的命令。理想厨房一次只能执行一条指令。一条指令的执行周期,可分为取指子周期和执行子周期这两个阶。下面我们通过一个实例来讲述理想厨房系统的工作机制。这是本章的一个重点。1.2理想厨房系统的一个炒菜实例:现在,我们通过炒制一道香菇炒菜心的例子来说明理想厨房系统的工作过程。 首先,把香菇放在冰箱地址为5的格子中,把菜心放在冰箱地址为6的格子中,冰箱地址为7号的格子,预留给炒好的菜使用。首先,把香菇放在冰箱地址为5的格子中,把菜心放在冰箱地址为6的格子中,冰箱地址为7号的格子,预留给炒好的菜使用。 菜谱的所有加工步骤(又称为指令)从冰箱地址0号格开始依次按照顺序存放,编写香菇炒菜心的菜谱如下:地址0的格子中: 取地址5(中的物品)到R0碟;地址1的格子中: 取地址6(中的物品)到R1碟;地址2的格子中: 将R0碟和R1碟倒入炒锅中炒好倒回R0碟;地址3的格子中: 送R0碟(中的物品)到地址7中; 可见,一共有4个加工步骤。开始时理想厨房系统状态如下图1.3(注意:冰箱格子以及理想厨房碟子中存放的物品都用了斜体字)理想厨房 自动冰箱 碟名 碟中物品 地址 冰箱格子中物品R0R1 厨具R2 厨师PC 0 厨房管理员IR 材料传送带地址传送带0控制传送带 取01234567取地址5到R0碟取地址6到R1碟;将R0和R1炒好倒入R2碟;送R2碟到地址7中;香菇菜心 图1.3菜谱设置完毕后,理想厨房系统开始自动化的工作。1),厨房管理员根据PC碟子中的数字“0”,知道要到冰箱地址为0的格子中取第一条指令(即加工步骤)。于是,厨房管理员向控制传送带上送出一个“取”信号,然后马上将PC碟中的数字“0”复制后放到地址传送带上。这两个信号都会到达自动冰箱。自动冰箱收到这两个信号后,将0号格的内容复印件“取地址5到R0碟”放到材料传送带上,送往理想厨房。理想厨房收到后,将这条指令放到IR碟中。然后,厨房管理员将PC碟中的原来值增加1,以便为取下一条指令做好准备。取指令周期完成后,理想厨房系统处于如下图1.4状态: 理想厨房 自动冰箱 碟名 碟中物品 地址 冰箱格子中物品R0R1 厨具R2 厨师PC 1 厨房管理员IR 取地址5到R0碟 材料传送带地址传送带控制传送带01234567取地址5到R0碟取地址6到R1碟;将R0和R1炒好倒入R2碟;送R2碟到地址7中;香菇菜心 图1.4 厨房管理员读到指令存放碟(即IR碟)中的加工步骤后,知道要到冰箱地址号为5的格子中去取原材料,并且取来后要放到R0碟中。因此,管理员向控制传送带上送出一个“取”信号,然后马上将5这个数放到地址传送带上。 冰箱收到“取”信号后,知道理想厨房要取物品。然后,冰箱从地址传送带得到了5,于是冰箱将地址为5的格子中的物品“香菇”取出来,放到材料传送带上。 材料传送带上的物品“香菇”,传到理想厨房后,按照指令的要求(通过厨房内部的传送带)送到了R0碟中。第一条指令执行完后,理想厨房系统处于如下图1.5所示的状态:理想厨房 自动冰箱 碟名 碟中物品 地址 冰箱格子中物品R0 香菇R1 厨具R2 厨师PC 1 厨房管理员IR 取地址5到R0碟 材料传送带 地址传送带 5控制传送带 取01234567取地址5到R0碟取地址6到R1碟;将R0和R1炒好倒入R2碟;送R2碟到地址7中;香菇菜心图1.52)接下来,开始执行下一条指令的取指周期,类似于前一条指令,在取指周期完成后,理想厨房系统处于如下图1.6状态:理想厨房 自动冰箱 碟名 碟中物品 地址 冰箱格子中物品R0 香菇R1 厨具R2 厨师PC 2 厨房管理员IR 取地址6到R1碟; 材料传送带地址传送带 1控制传送带 取01234567取地址5到R0碟取地址6到R1碟;将R0和R1炒好倒入R2碟;送R2碟到地址7中;香菇菜心图1.6管理员分析指令存放碟中的加工步骤(指令)后,知道要到冰箱地址为6的格子中去取原材料,并且放到R1碟中。因此,管理员向控制传送带上发一个“取”信号,然后马上将6这个数放到地址传送带上。 冰箱收到“取”信号后,知道理想厨房要取东西,然后,冰箱从地址传送带得到了6,于是冰箱将地址为6的格子中的物品“菜心”取出,放到材料传送带上。 材料传送带上的物品“菜心”,传到理想厨房后,按照指令的要求通过厨房内部的传送带被自动送到R1碟中。第二条指令执行完后理想厨房系统处于如下图1.7状态: 理想厨房 自动冰箱碟名 碟中物品 地址 冰箱格子中物品R0 香菇R1 菜心 厨具R2 厨师PC 2 厨房管理员IR 取地址6到R1碟; 材料传送带地址传送带 6控制传送带 取01234567取地址5到R0碟取地址6到R1碟;将R0和R1炒好倒入R2碟;送R2碟到地址7中;香菇菜心图1.73)在第3条指令的取指周期完成后,理想厨房系统处于如下图1.8状态:理想厨房 自动冰箱碟名 碟中物品 地址 冰箱格子中物品R0 香菇R1 菜心 厨具R2 厨师PC 3 厨房管理员IR将R0和R1炒好倒入R2碟;材料传送带地址传送带 2控制传送带01234567取地址5到R0碟取地址6到R1碟;将R0和R1炒好倒入R2碟;送R2碟到地址7中;香菇菜心 图 1.8 厨房管理员看到IR碟中的内容后,命令厨师将R0碟和R1碟中的原材料倒入锅中炒好后,倒入R2碟中。完成后如图1.9理想厨房 自动冰箱碟名 碟中物品 地址 冰箱格子中物品R0香菇R1菜心 厨具R2香菇菜心 厨师PC 3 厨房管理员IR将R0和R1炒好倒入R2碟;材料传送带地址传送带控制传送带01234567取地址5到R0碟取地址6到R1碟;将R0和R1炒好倒入R2碟;送R2碟到地址7中;香菇菜心 图1.94)第4条指令在取指令周期完成后,理想厨房系统,处于如下图1.10状态:理想厨房 自动冰箱碟名 碟中物品 地址 冰箱格子中物品R0香菇R1菜心 厨具R2香菇菜心 厨师PC 4 厨房管理员IR送R2碟到地址7中;材料传送带地址传送带控制传送带01234567取地址5到R0碟取地址6到R1碟;将R0和R1炒好倒入R2碟;送R2碟到地址7中;香菇菜心 图1.10下面开始执行“送R2碟到地址7中”这条指令。厨房管理员分析指令存放碟中的加工步骤后,知道要将R2碟中的物品,送到冰箱地址为7的格子中去存放。于是,管理员向控制传送带上发一个“存”信号,然后马上将7这个数放到地址传送带上,最后将R2碟中的物品“香菇菜心”放到材料传送带上,送往冰箱。 冰箱收到“存”信号后,知道理想厨房要存放物品,然后,冰箱从地址传送带得到了7,于是自动冰箱(的机械手)在材料传送带旁,等待从理想厨房R2碟传来物品“香菇菜心”,一旦到达,自动冰箱就将其取下,并将其存放到地址号为7的格子中。完成后系统状态如图1.11:理想厨房 自动冰箱碟名 碟中物品 地址 冰箱格子中物品R0香菇R1菜心 厨具R2香菇菜心 厨师PC 4 厨房管理员IR送R2碟到地址7中;材料传送带地址传送带控制传送带01234567取地址5中到R0碟取地址6中到R1碟;将R0和R1炒好倒入R2碟;送R2碟到地址7中;香菇菜心香菇菜心 图1.11至此,香菇菜心这道菜终于大功告成了。 现在,我们通过一些问题,对学到的重点知识作一个小结:问题1.理想厨房将要执行的炒某道菜的所有指令是以何种形式,存放在何处的?答:理想厨房将要执行的加工某道菜的全部指令(即加工步骤),必须按照加工的先后顺序,由小地址号到大地址号连续地存放在自动冰箱的多个格子中。如果正在执行的指令,所在的地址是n的话;下一条要执行的指令,一定是在地址为n1的冰箱的格子中除非刚刚执行的是一条跳转指令。 问题2.理想厨房如何才能从自动冰箱取到一条指令?取到指令后存放到何处?答:厨房管理员首先要把PC碟中的数据(假设是8)复制一个放到地址传送带上,送往自动冰箱;与此几乎同时,要在控制传送带上发送一个“取”信号(可用1表示“取”),送往自动冰箱。然后,厨房管理员还要把PC碟中的数据加上1(PC碟中的数据现在变成了9),以便为取下一条指令作准备。 自动冰箱根据从控制传送带上得到的“取”信号,知道理想厨房要取东西;根据从地址传送带上得到的地址信号:8,自动冰箱知道理想厨房要取的东西在第8格中。于是自动冰箱将第8格的物品取出,放到材料传送带上。厨房管理员收到自动冰箱从材料传送带上传来的指令后,把它放在IR碟中。由以上过程可知,哪怕是要完成取一条指令这样的一件小事,对于理想厨房系统来说也是非常麻烦的。厨房管理员、PC碟、地址传送带、控制传送带、自动冰箱、材料传送带、IR碟,缺一不可。而且相互之间要密切配合,协调工作才能完成此事。厨房管理员在其中起着核心的控制作用。与取指令类似,理想厨房在执行一条指令时,经常也是如此的麻烦(比如从冰箱取原材料指令或送菜肴到冰箱的指令)。问题3.如果没有保存在冰箱中的菜谱,理想厨房的厨师是否能够炒出一道菜来?答:决对不会!厨师只会在厨房管理员的命令下,每次仅仅做 “炒”、 “煎”、“蒸”、“烤”、“炸”和“煮”等一些固定数量的基本操作中的一个基本操作。这个厨师的大脑中,没有任何一道菜的全部加工过程。他也学不会新的基本炒菜动作。他只会一次次地、忠实地、快速地按照厨房管理员的命令,每次只做一个单一步骤的加工操作。而厨房管理员向厨师发出的加工命令,也都是来自于他所取到的菜谱中的指令没有保存在冰箱中的菜谱,理想厨房系统中的管理员和厨师根本加工不出任何菜肴来。理想厨房系统的“智能”来自于菜谱的编写者。正是由于人们编出来的各种菜谱可让理想厨房执行,才使得原本白痴般的、能力极为有限的理想厨房系统在炒菜方面显得几乎无所不能!问题4 编写特殊菜谱很困难吗?答:确实很难编写。要想理想厨房系统做出任何一道菜肴,都要编写出它能自动执行的特殊菜谱,这种菜谱要非常精确、无二义性。在这种菜谱中,要用冰箱地址号来取代原料的名称(这将导致菜谱很难看懂)。还要知道,厨师究竟会做哪几种基本炒菜动作、厨房管理员懂得哪几个加工命令。此外,原料所放的位置不同,菜谱也就有所不同,与给普通人看的菜谱有很大的不同。问题5 你能简要叙述一下,厨房管理员的工作步骤吗?答:厨房管理员的工作完全是周期性的,即他永远在做:取指令分析指令,发出控制命令要求各部件执行指令这一种周期性的动作。只要一启动,理想厨房系统永远在按照这个周期性的动作,一条一条的顺序的取指令并执行指令(如果遇到跳转指令,则跳转到指定地址去,继续取下一条指令),不停地快速运行着,直到停机或发生严重故障为止。理想厨房系统的工作原理,到此已经全部介绍完毕。学完理想厨房系统的基本工作原理后,从整体上把握计算机的基本工作原理,就变成为一个比较轻松的名词替换的小游戏了。1.3理想厨房系统与计算机系统术语对照表理想厨房的工作原理,与计算机的工作原理是极为类似的。下面首先给出两个系统之间的术语对照表,见表1.1。表1.1术语对照表理想厨房系统电子数字计算机(简称计算机) 1.硬件设备自动冰箱(包含多个大小相等的格子)内存(又称为主存,包含很多大小相等的基本存储单元) (冰箱中的)一个格子(内存中的)一个基本存储单元材料传送带数据总线地址传送带地址总线控制信号传送带控制总线理想厨房(包含以下设备)CPU(或称微处理器,包含以下部件)厨师及炒菜设备算术逻辑单元ALU(又称为运算器)厨房管理员控制单元(又称为控制器)通用临时存放碟通用寄存器指令地址存放碟PC指令地址寄存器(又称为程序计数器PC)指令存放碟IR指令寄存器(又称为IR寄存器) 状态存放碟状态寄存器专用加工容器专用寄存器采购员及配菜员输入设备(键盘、鼠标、网卡、U盘等)传菜生输出设备(显示器、打印机、网卡、U盘等)自动仓库外存(硬盘、U盘,但同时也属于输入输出设备) 2.软硬件之间的接口(编写菜谱或程序的基本要素)冰箱格子的地址(即编号)内存中基本存储单元的地址(即编号)厨师可做的各种炒菜的基本动作(蒸、炒、炸、煮等)运算器可进行的各种基本运算(算术运算、逻辑运算等)碟子的名称寄存器的编码或代号 理想厨房可以执行的所有各种加工动作(指令)该类型计算机的指令集3.软件特殊菜谱(机器语言形式的) 程序加工步骤(机器)指令原材料数据 炒好的菜信息(或称为结果)精确的普通菜谱高级语言程序(又称为源程序或源代码) 简要的普通菜谱伪代码4. 系统的使用者编写特殊菜谱者用机器语言编程的程序员 编写精确的普通菜谱者用高级程序设计语言编程的程序员理想厨房系统的大堂经理和顾客计算机的用户在计算机上运行一个程序时,上表中列出的计算机的各个部件会协同工作,完成任务(参见1.6节)。如果没有对理想厨房工作原理的详细讲解,由于出现了太多新的专业术语和名词,人们决对很难在短时间内,全面把握和理解这个计算机系统的工作原理的(对于任何一个初学者,这都是一件极其困难的事)。1.4预备知识:二进制及相关知识简介: 人类有十个手指,所以偏爱十进制记数法,可在人造数据处理设备中使用十进制记数法通常是愚蠢的选择。虽然理论上可以使用任何进制(比如十进制)为基础来制造计算机,但现代计算机都是采用二进制的数字电子信号(制造电子计算机为何采用数字信号而不用模拟信号,不用其他进制而采用二进制,请参见本书附录D )进行工作的机器。也就是说,在计算机的内部,只能以二进制的形式来存放、传输需要运行的指令和需要加工的数据的。 为了从底层彻底把握计算机的基本工作原理,读者必须事先对二进制有所了解。以下简要介绍相关知识。1.4.1 二进制数的概念 首先,来看一张部分十进制数与二进制数的数值对照表: 十进制数 所对应的二进制数 所对应的十六进制数0 0 01 1 12 10 23 11 34 100 45 101 56 110 67 111 78 1000 89 1001 910 1010 A11 1011 B12 1100 C13 1101 D14 1110 E15 1111 F16 10000 10表 1.2 部分十进制数与二进制数(和十六进制数)的数值对照表一般情况下,用n位二进制可表示的最大正整数值是2n-1。比如:4位二进制可表示的最大正整数是24-1=15(即1111)2 。可见,二进制只能用两个数字“0”和“1”来进行计数(或表示各种不同状态)。二进制加法运算的重要规则是: 1+1=10 ,即两个1相加产生向高位的进位。左边是高位数,右边是低位数(此外,其它加法规则还有:1+0=1、0+1=0、0+0=0)。我们用一对圆括号括住一个数值,并在圆括号外面加一个数字下标,来表示一个数是几进制数:比如(1011)10是一个十进制数;而(1011)2是一个二进制数。142将二进制整数转化成十进制整数一个十进制的数,其数值可用以下展开式来表示:比如3785(3785)10=3103+7102+8101+5100 (1)我们把(1)式中10的几次方称为权重,权重左边的乘数称为系数。(1)式中共有4个系数,从左到右依次是:“3”“7”“8”“5”。可见,在数值数据中,越左边的数字(系数)权重越大。权重中的底数与该进制是一样的,在这里是10。类似的,一个二进制数,其数值也可用以下展开式来表示:比如二进制数1011(1011)2= 123+022+121 +120 (2)此二进制数的值,等于十进制的18+04+12+11=8+2+1=(11)10 (3) 由此可以得到:二进制整数转化成十进制整数的一般方法:只要将该二进制整数(即1011)展开后的(2)式中的每一位的系数值,乘以这一位的转化成十进制数后的权重(即2的几次方),然后再将逐个乘积项的数值相加起来即可。深入一步:这种方法,其实适合将一个任意进制数转变成十进制数。比如有8进制数(305)8,就可展开为: (305)8=382+081+580 = 364+08+51=(197)10143 将十进制整数转化成二进制数:1. 将十进制数转换成二进制数的短除法:短除法把要转换的十进制整数不断的除以2然后取余数,商为0的时候结束。然后把余数倒着写出来。例如: 把84转换成二进制数 0242 221 210 25 22 21 20 84 0 1 0 1 0 1即: (84)10= (1010100)2注意:短除法实际上适用于将一个十进制整数转换为一个任意n(n2)进制的整数,只需将除数由2替换为n即可(参见例题 )。可选练习1、查阅参考书(比如任何一本计算机导论或大学计算机基础),看看一个十进制的纯小数是如何转化为二进制的纯小数的。1.5预备知识:数和码的含义和区别什么是数? 数是表示事物的量的基本数学概念。什么是码?“码”是“编码”的简称。用预先规定的方法将文字、数字或其他对象编成数码,或将信息、数据转换成规定的电脉冲信号。编码是信息从一种形式或格式转换为另一种形式的过程。解码,是编码的逆过程。151十进制的数和码:我们通过一个例子来说明十进制数字系统中数和码的区别如果3785用于表示数,则越高位(即越左边的位)的数字越重要(因为权重越大,在十进制数3785中,“3”的权重是103,而“5”的权重是100)。 而3785用于表示非数值的码,则每一位都同样重要。码值仅相差一位,所表示的文字(或代表的事物)可以有巨大的区别(比如:3785表示汉字“前”,而3786表示汉字“后”)。 十进制的数字串“3785”由“3”、“7”、“8”、“5”组成。它既可以表示一个数值为三千七百八十五的十进制数,也可以表示一个码为3785的汉字(或者表示任何别的什么10000个同类事物中的编码为3785的一个特定事物)。 152 位串、二进制的数和码 与十进制一样,二进制数和二进制码也有类似的区别。只不过在二进制中,只能用0和1组成的一个二进制数字串来构成任何大小的数值或者表示具有任何含义的码。位:单个二进制数字(不是0就是1,再没有别的可能数字)我们称之为“位”(bit)。如果用一个位来表示整数值,只能表示0和1这两个值中之一。大于1的整数值用一个“位”表示不了。如果用单个“位”来表示码,则只能用来对(同属一种类型的)两种不同事物进行编码。比如:用0表示“假”, 用1表示“真”;或者用 0 表示动物“狗”,用 1 表示动物“猫”;等等。位串及其长度:任意多个二进制数字顺序排列在一起(比如:11011011100),我们称之为位串。位串中数字的个数我们称为位串的长度。位串左边的位我们习惯称作为高位,位串右边的位我们习惯称作为低位(即使位串不用作表示数值)。比如二进制位串 “110101010” 的长度是9,最高位是1,最低位是0。 高位 低位 如果用长度为2的一个位串来表示整数值,则能够表示00(即0)、01(即1)、10、11这4个整数值中的某一个。如果用长度为2的位串来进行编码,由于有4(即22)个码值可以用,则能够用来对属于同一类型的4个不同的事物进行编码。比如 酸、甜、苦、辣,牛、马、羊、猪,加、减、乘、除等等。编码和解码的一个实例 通过编码,可以用00表示“东”、01表示“南”、 10表示“西”、 11表示“北” ,这就构成了一张表示方位的编码解码表(注),见表1.2 。(注):用数学的术语来讲,这实质上是一张两个集合00、01、10、11和东、南、西、北的所有元素之间的一对一映射表。二进制码集合中的元素00 东01 南10 西11 北表1.2 表示方位的编码解码表通过对方向“西南”进行编码,就可以用一些码值构成的二进制位串“1001”来间接地存储和传输这些方向值。因为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论