计算机导论-5、6

第五讲 由机器语言到高级语言:程序的编写与编译

501-本章概述

高级语言的基本要素

image.png
image.png

  • 计算机语言:高级语言-汇编语言-机器语言
  • 编译器
  • 不同的高级语言之间只是规则的不同

函数是一小段程序片段

  • 函数就是一小段程序的片段
  • 函数将一些列语句统一起来管理,对外提供代表,就是函数名
  • 这是简化程序构造的一种手段,也体现了程序是构造出来的

502-由机器语言到高级语言

  • 算法:解决问题的步骤
  • 程序:计算机能够理解与执行的解决问题的步骤

image.png

  • 计算机语言是人和计算都能够理解的语言
  • 计算机语言-机器语言
    • 指令系统:CPU用二进制和编码提供的可以解释并执行的命令的集合
    • 机器语言:用二进制和编码方式提供的指令系统所编写程序的语言被称为机器语言
  • 计算机语言-汇编语言
    • 用符号编写程序=>翻译=>机器语言程序
    • 汇编语言:是用助记符号编写程序的语言
    • 汇编语言源程序:是用汇编语言编写的程序
    • 汇编程序:
      • 是将汇编语言源程序翻译成机器语言程序的程序
      • 处理汇编语言的编译器
    • 汇编语言存在的问题:
      • 编写程序要考虑机器内部结构,要对机器内部结构有很深入的了解
      • 同时要了解机器的指令系统
      • 这些对人来说都是非常困难的
  • 计算机语言-高级语言
    • 高级语言的诞生就是因为不同的CPU需要使用不同规则的汇编语言进行开发,所以进行汇编语言开发就需要对CPU的内部结构有所了解,而且不同的CPU还需要重新进行研究
    • 因此,要编写汇编语言就需要学习和掌握对应CPU的指令系统,这就导致开发工作只能由专业人员进行操作,不利于计算机的发展和壮大
    • 还有,就是为了实现软件和硬件的分离,才诞生了高级语言
    • 高级语言的概念:
      • 高级语言:类似自然语言的语句编写程序的语言
      • 高级语言源程序:用高级语言编写出的程序
      • 编译程序:是将高级语言源程序翻译成机器语言程序的程序

高级语言,那还有低级语言?

  • 高级与否是指,机器的相关性,相关性低的称为高级语言;猜测是映射人是高等动物吧
  • 高级语言:机器无关性,一条高级语言语句往往可由若干条机器语言语句实现且不具有对应性
  • 汇编语言:机器相关性,汇编语言语句和机器语言语句有对应性

计算机的理想与现实

  • 横向看,黑色箭头:是我们思想上的思路,理想上应该是这样的
  • 纵向迂回看,红色箭头:是我们实际上的思路,实际上执行起来就需要通过层层处理

计算机处理实际问题的思维和现实区别.png

  • 有一点:理想世界与现实世界的一种碰撞,而且还是经历了几百年的碰撞
  • 可以理解,人类经过几百年,终将把白日梦实现了

503-高级语言(程序)的基本构成要素

  • 保留字
  • 常量、变量、表达式
  • 表达式:
    • 算术表达式
    • 比较表达式
    • 逻辑表达式
    • 赋值语句
  • 顺序结构
  • 分支结构
  • 循环结构

image.png

504-用高级语言构造程序

  • 程序是构造出来的,而不是编写出来的
  • 函数:
    • 数学中的函数只是一个符号表达
    • 计算机程序中的函数则是一段可以执行的程序
  • 递归:自身调用自身
  • 迭代:新值替换旧值,从而推导出结果

为什么说程序是构造的,而不是编写的

  • 我们把一些基本的操作编写成函数(基础性函数),这叫分工管理
  • 然后,通过协作的方式,把不同的函数进行整理组合,从而达到要实现的目标
  • 所以程序是多个函数构造而成
  • 函数:
    • 函数的定义:形式参数,使用指定实际参数
    • 函数的调用
    • 运用函数构造
    • 程序构造方法
      • 自顶向下:Top-Down
      • 自底向上:Button-Up
  • 传统程序构造及表达方法
    • 由粗到细:先规定大框架在进行基础性函数编写
    • 由细到粗:先进行基础性函数编写,在进行上一层次得函数编写和确认

递归和迭代程序分析图

  • 递归是先带入后执行
  • 迭代是边带入边执行

递归.png
迭代.png

程序开发环境

  • 程序:是算法得一种机器相容得表示,是利用计算机程序设计语言对算法描述得结果,是可以在计算机上执行得算法
  • 程序设计过程:编辑源程序 => 编译 => 链接 => 执行
  • 计算机语言程序设计环境:编辑、编译、连接、调试、运行一体化平台

505-计算机语言与编译器-一种抽象-自动化机制示例

  • 高级语言是与机器无关的语言,因此需要通过编译程序,把高级语言的源程序编译成汇编语言,汇编语言和机器语言是一对一关系,从而使得硬件能够执行
  • 高级语言转换成树形结构,然后转换成汇编语言的规则,汇编语言和机器语言具有一一对应,就可以实现运行
  • 编译器:是依靠保留字来识别程序所要表达的算法
  • 简单模式与汇编语句的映射:
    • 主要体验高级语言转换成树形结构,在和对应的汇编语言进行映射
    • image.png
  • 高级语言转换成汇编语言的过程:
    • 词法分析:语句词汇的识别,根据保留字,确定对应的模式化语句
    • 语法分析:语句模式的识别,通过图灵机或通过程序判断是否符合要求
    • 语句转换:
      • 基本语句模式与汇编语句的映射
      • 复杂语句模式的构造:根据基本语句进行拆分组合
      • 汇编语句的组装与次序调整
      • 常量与变量的替换
    • 详细学习指南:《形式语言与自动机》、《编译系统/编译原理》

506-计算机语言的发展

  • 用高级语言编写程序:符号化、语句化、结构化
  • 高级语言源程序=>编译化=>机器语言程序
  • 像堆积木一样构造程序:
    • 《面向对象的程序设计语言》与《可视化构造语言》
    • 拖拽形成指定程序,在计算机最初就已经实现了
  • 计算机语言发展:是以人越来越方便编程序为目的

计算机语言发展的基本思维

image.png

不仅要用语言,还要发明新语言

image.png

  • 计算机技术是伴随着计算机语言的不断发展而发展起来的
  • 发明语言,需要提供编译器,看来所有的硬件厂商都会给应用层的公司提供新的编译器

语言的发展

image.png

前端编译器的发展

  • 从这节可以了解到,webpack的发展和诞生,给了前端人员创造更加适合自己的前端开发语言的机会
  • 这也是为什么jQuery真正的退出历史舞台,因为人们可以自己动手去完成一个基于JS的,全新的语言
  • 并且可以把整个开发流程逐步的都实现自动化,大大的减少了人们完成业务的速度
  • 现在的我最大的体会就是:
    • 从前端看计算机很难
    • 从计算机原理看前端很简单

第六讲 程序与递归:组合-抽象-构造

601-本讲概述

  • 什么是程序

image.png

  • 机器执行的过程,都是递归的过程
  • 理解程序递归,是理解计算机中内部程序执行的前提,也是理解复杂算法的基础
  • 计算机语言的创造和创造人类种族语言是一样的,千变万化的语言表达形式,都是取决于最基本规则排列组合形成
    • 计算机:百余条指令系统
    • 英语:26字母组成
    • 中文:拼音,生母23个、韵母24个、整体认读音节16个组成

602-程序的作用和本质

  • 什么是程序?
    • 程序:由基本动作指令构造的,若干指令的一个组合或一个执行序列,用以实现复杂动作
  • 程序的本质是什么?
    • 是组合和抽象
    • 程序是通过组合和抽象=>构造出来的
  • 计算系统=基本动作+指令+程序执行机构
    • 基本动作:与、或、非、异或动作
    • 指令:对可执行基本动作的抽象,即控制基本动作执行的命令
    • 程序:基本动作指令的一个组合或执行序列,用以实现复杂的动作
    • 程序执行机构:负责解释程序即解释指令之间组合,并按次序调用指令即调用基本动作执行的机构
  • 抽象:
    • 将经常使用的、可由低层次系统实现的一些复杂动作,进行命名,以作为高层次系统的指令被使用
    • 最明显的实例就是:
      • 我们把“加减乘除”动作用逻辑部件进行封装,后续我们进行使用和操作的时候不在考虑逻辑部件如何组合排列、如何执行,我们只要考虑“加减乘除”动作如何组合执行即可
      • 在之后,我们把“加减乘除”动作进行封装,也不去考虑,一层层不断的进行抽象和封装
      • 这就像是盖高楼一样,一层一层,从最底层的逻辑门电路逐步到拖拉拽实现程序的建立
        • 可以理解这一层层都是进行函数的封装,每一层的封装之后都会起一个全新的函数名
      • 体现就是,如果要彻底的理解每一层,就需要逐层的去剖析和理解,而不是跃层理解,这样理解起来更容易,也更加容易理解
      • 跃层理解导致的问题就是,看似理解了实际却站不住脚,关键时刻总感觉差点意思

从构造理解架构的重要性

  • 把基本功能抽象成通用零部件,通过不同的零部件组合,组合成更大的零部件
  • 要实现大型和超大型的体系,就需要通过零部件之间的构造而形成
  • 说通过组合形成体系未免儿戏,构造是具有整体架构的,是对整个体系负责
  • 这也是为什么架构那么重要的原因

603-运算式的组合-抽象与构造

  • 命名计算对象
  • 在构造中使用名字
  • 只有计算的时候才会用计算对象替换名字
  • 理解:
    • 直接用函数的概念来理解就容易的多了
    • 所有的抽象和构造,都是新函数的定义和使用
    • 两种计算过程:
      • 先带入,后求值
      • 代入阶段和求值阶段
      • 这种计算方法,对于形式语言和编译原理的学习很重要
      • 这种方法通常称为正则表达式

image.png

604-递归与迭代

  • 递归的典型视觉形式:自相似性事物的无限重复性构造
  • 理解:递归是先捕捉,在冒泡;先代入在计算

什么是递归

  • 递归是一种表达相似性对象及动作的无限性构造和执行的方法
  • 递归基础:定义、构造和计算的起点,直接给出
  • 递归步骤:由前n项或第n项定义第n+1项;由低阶f(k)且k<n,来构造高阶f(n+1)
  • 用递归定义:递归是一种关于抽象的表达方法---用递归定义无限的相似事物
  • 用递归构造:递归是一种算法或程序的构造技术---自身调用自身,高阶调用低阶,构造无限的计算步骤
  • 递归计算/执行:递归是一种典型的计算/执行过程---由后向前代入,直至代入到递归基础,再由递归基础向后计算直至计算出最终结果,即由前向后计算

递归和递推(迭代)

  • 定义是递归的,但执行可以是递归的也可是迭代的
  • 数学叫递推,计算学科叫迭代:由前向后依次计算
  • 递推/迭代:
    • 就是递归的捕获阶段就开始计算,是从前到后的依次计算;前提是知道前几项的值;
    • 如果不知道前几项的值,或者给出已知的值不足以推导出后续值,就需要用递归方式
  • 递归是有回归部分;迭代是从开始计算结果,没有回归过程
  • 双递归函数:函数本身是递归的,其中的变量也是递归的

605-运用递归与迭代

  • 无限的自相似性对象的定义
  • 递归算法与程序的构造
  • 阶乘递归:

image.png

  • 阶乘迭代:

image.png

  • 是使用迭代还是使用递归,主要是看具有哪些条件,如果能用迭代当然更好
  • 从例子中可以看出,迭代是从前依次向后运算,每次都能得到最终的结果
  • 而递归则是从后向前先推导出整个运算程序,然后再把最初的值从前到后依次带入
  • 也就是说,可以看出递归的后半部分就是在执行迭代,递归前面在做的事情就是推导出整个程序运算式

X604-原始递归函数-复合与递归

最基本的原始递归函数,也被称为本原函数有三个:

  • 初始函数:0元函数即常数无需计算;或者常数函数:对于每个自然数n和所有的k,有f(x,x,x,...,x)=n。
  • 后继函数:1元后继函数S,它接受一个参数并返回给出参数的后继函数。例如S(1)=2,···,S(x)=x+1,其中x为任意自然数
  • 投影函数:对于所有n>=1和每个1<=i<=n的i,n元投影函数P,它接受n个参数并返回他们中的第i个参数,即:P(x,x,x,...,x)=x

复合与递归

  • 复合:简单而言,复合是将一系列函数作为参数带入到另一个函数中,又被称为代入。复合是构造新函数的一种方法。复合是表达组合的一种方法
  • 原始递归:简单而言,定义新函数h,就是要定义h(0),h(1),h(2),...,h(n),...。h(0)直接给出。h(n+1)则由将h(n)和n代入g中来构造
  • 原始递归是递归地构造新函数的方法,尤其是无限的相似性函数的构造方法
posted @ 2021-03-31 08:40  怪诞咖啡  阅读(721)  评论(0编辑  收藏  举报