计算机导论学习记录(二)

这个作业的目标 <学习内容的系列记录>
这个作业属于哪个课程 计算机导论
这个作业要求在哪里 https://www.bilibili.com/video/BV1EW411u7th/?spm_id_from=333.337.search-card.all.click&vd_source=2d58080e4c0c391c5f011713fd8b09b4

学习内容的系列记录(二)

一、知识要点(程序设计基础知识)

1、早期的编程方式

  • 在早期,计算机没有内存的概念,人们通过打工纸卡等手段将程序输入计算机。
  • 早期计算机的编程
    • 打孔纸卡/纸带:在纸上打孔,用读卡器读取数据进行编程。
    • 插线板:通过插拔线路的方式,改变器件之间的连接方式,进行编程。
    • 面板开关:通过拨动面板上的开关,进行编程。输入二进制操作码,按存储按钮,推进至下一个内存位,直至操作完内存,按运行键执行程序。
  • 程序和数据都存在一个地方,叫冯诺依曼结构。冯诺依曼计算机的标志是,一个处理器(有算术逻辑单元)+数据寄存器+指令寄存器+指令地址寄存器+内存

2、编程语言发展史

  • 二进制是计算机的母语,计算机只能理解二进制。这叫机器语言机器码。用自然语言对程序的高层次描述,称为伪代码。然后用操作码表把伪代码转成二进制机器码。

  • 汇编器读取用汇编语言写的程序,然后转成机器码。一条汇编指令对应一条机器指令。

  • A-0

    • 1950年,为释放超算潜力,葛丽丝·霍普博士,设计了一个高级编程语言,叫 Arithmetic Language Version 0,一行高级编程语言 可以转成几十条二进制指令。但由于当时人们认为,计算机只能做计算,而不能做程序,A-0 未被广泛使用。
    • 为了做到编程语言的复杂转换,霍普博士在1952年创造了第一个编译器,专门把高级语言转化为低级语言(比如汇编和机器码)。
  • 1957年,IBM1957发布了高级编程语言FORTRAN,平均来说,FORTRAN 写的程序,比等同的手写汇编代码短 20 倍,FORTRAN 编译器会把代码转成机器码。但它只能运行于一种电脑中。

  • 1959年,数据系统语言委员会开发了一门高级语言,简称COBOL。每个计算架构需要一个 COBOL 编译器,不管是什么电脑都可以运行相同的代码,得到相同结果。

  • 现代编程语言

    • 1990年,有LGOL, LISP 和 BASIC 等语言。
    • 70年代,有Pascal,C 和 Smalltalk。
    • 80年代,有C++,Objective-C 和 Perl。
    • 90年代,有Python,Ruby 和 Java。

3、编程原理-语句和函数

  • 首先要初始化变量:设置最开始的值。
  • 程序的不只要从上到下运行,还要用控制流语句
    • If语句(条件语句):如果X为真,那么执行Y。If语句走那条路,取决于表达式的真假。
    • while循环:当while条件为真,那么代码会重复执行。当满足条件时进入循环,进入循环后,当条件不满足时,跳出循环。
    • for循环:for循环不判断条件,判断次数,会循环特定次数。foe的特点是每次结束,for会加一。
    • 函数:为了隐藏复杂度,可以把代码打包成函数。其他程序想用函数,直接写函数名就可以了。
  • 最后,我们还需要把结果交给使用这个函数的代码,所以用return语句,旨在返回什么。

4、算法:解决问题的具体步骤

  • 算法的输入大小运行步骤之间的的关系叫做复杂度,表示运行速度的量级。专业名称大O表示法
  • 选择排序:在一列数组中,从第一个数字开始,每个数组位置都跑一边循环,找最小数,然后互换位置。复杂度为O(n2)
  • 归并排序:首先检查数组是否大于一,如果是,就把数组分成两半,最后每个数组大小为一。然后就可以归并了。从前两个数组开始,读值排序合并,重复这个过程,按序排列。然后比较两个数组第一个数,取最小数,重复这个过程,就排好了。复杂度为O(n×logN)
  • Dijkstra算法
  • 一开始复杂度为O(n²),后来复杂度为O(nlog n +I),在下图中,n表示节点数,I表示有几条线。

5、数据结构

  • 下标:为了拿出数组中某个值,我们要指定一个下标,大多数编程语言里,数组下标都从 0 开始,用方括号 [ ] 代表访问数组。注意**:很容易混淆 "数组中第 5 个数" 和 "数组下标为 5 的数",数组下标为5的数是数组里面的第6个数。
  • 字符串:由字母、数字、标点符号等组成的数组。字符串在内存里以0结尾(二进制0)。
  • 矩阵:是数组的数组。如一个3×4矩阵就是一个长度为3的数组。
  • 结构体:把几个有关系的变量打包在一起的叫做结构体。
  • 节点:以指针为变量的结构体叫节点。
  • 指针:指针是一种特殊变量,指向一个内存地址,因此得名。
  • 链表:是一种灵活数据结构,能存很多个节点。灵活性是通过每个节点指向下一个节点实现的。
  • 队列: 就像邮局排队,谁先来就排前面,这叫先进先出
  • :栈是后进后出
  • :在节点中改成多个指针就能做成树。在树中,最高的节点叫做根节点(root),根节点下的所有节点都叫子节点(children),任何子节点的指数上层节点叫母节点(parent node),树结束的地方叫叶节点

6、阿兰 图灵

  • 可判定性问题:是否存在一种算法,输入正式逻辑语句 输出准确的是或否答案?
  • 美国数学家阿隆佐·丘奇,开发了一个叫Lambda算子的数学表达系统,证明可判定性问题不存在。
  • 图灵机:只要有足够的规则,状态和纸带,图灵机可以解决一切计算问题。和图灵机一样完备,叫做图灵完备
  • 停机问题证明图灵机不能解决所有问题。
  • 图灵测试:向人和机器同时发信息,收到的回答无法判断哪个是人,哪个是计算机,则计算机达到了智能程度。

7、软件工程

  • 对象:当任务庞大,函数太多,我们需要把函数打包成层级,把相关代码都放一起,打包成对象。对象可以包括其他对象,函数和变量。把函数打包成对象的思想叫做面向对象编程,面向对象的核心是隐藏复杂度,选择性的公布功能。

  • API:API帮助不同程序员合作,不用知道具体细节,只要知道怎么使用就行了·。当团队接收到子团队编写的对象时,需要文档和程序编程接口来帮助合作。API控制哪些函数和数据让外部访问,哪些仅供内部。

  • 集成开发环境(IDE):软件开发工具里集成了很多有用的功能,帮助写代码,整理,编译和测代码,因为集成了所有东西,所以叫IDE。DE帮你检查错误,并提供信息,帮你解决问题,这个过程叫调试(debug)

  • 文档与注释:文档一般放在一个叫做README的文件里,文档也可以直接写成注释,放在源代码里,注释是标记过的一段文字,编译代码时,注释会被忽略。注释的唯一作用是帮助开发者理解代码

  • 源代码管理(版本控制):大型软件公司会把会把代码放到一个中心服务器上,叫代码仓库,程序员可以把想修改的代码借出,修改后再提交回代码仓库。版本控制可以跟踪所有变化,如果发现bug,全部或部分代码,可以回滚到之前的稳定版。

  • 质量保证测试(QA):找bug

  • beta版:接近完成的软件,相当于游戏里的测试服。

2、学习心得

  • 从这期内容来看,对用计算机来如何做软件有了大致的认识,函数,语句,算法,数据结构等等。
  • 一个软件需要很多程序员互相配合才能完成。

posted on 2023-02-08 12:34  嗷呜ニャー~  阅读(104)  评论(0编辑  收藏  举报