首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

1.0 程序与编程语言

1.0 程序与编程语言

1.0.1 计算机是什么计算机是一种根据指令对数据处理的通用计算设备。每台计算机都有一个称为“中央处理单元(CPU)”的单一的微处理器芯片执行对数据处理的指令,不同的计算机其指令集是不一样的。计算机指令计算机接受一系列指令作为输入,逐个处理它们,并且通常显示某种输出以显示它已完成的操作。这类似于人们日常生活通过一系列操作不步骤完成一个任务的方式,比如一个人通过如下一系列步骤完成“做饭”的任务:

从容器(米桶)取出米,放入洗米盆

用自来水对洗米盆的米进行冲洗

如果(电饭锅没洗净)

清空洗净电饭锅

打开电饭锅盖,将米和水放入电饭锅

插上电源,按下开关

饭好后,拔下电源(任务结束)然而,虽然人们可以理解自然语言(如英语)中的复杂指令,但计算机只能理解可用计算机语言表达的非常简单的机器指令集中的指令。不管多么复杂的计算,在计算机内都是被分解成许多简单的逐条执行的机器指令,告诉计算机如何执行复杂任务的指令列表称为程序。以下是一些简单的计算机指令示例:

算术:加,减,乘或除数。

比较:比较两个数字,看哪个更大,或者它们是否相等。这些通常被称为逻辑操作

分支:跳转到程序中的另一条指令,并从那里继续。

计算机的组成部分计算机包含四种主要类型的组件:

输入:允许计算机从用户接收信息的任何内容。这包括键盘,鼠标,扫描仪和麦克风。

处理:处理信息的计算机组件。计算机的主要处理部件是中央处理单元或CPU,但在现代计算机中也可能有其他处理单元。例如,许多图形卡都带有图形处理单元或GPU,它们一度只用于处理图形,但今天也可用于通用程序。

内存:存储信息的组件。这包括主存储器(我们俗称为“存储器”)和二级存储器(我们知道的存储设备,例如硬盘驱动器,CD或闪存盘)。它是存储运行程序的指令和数据的地方。

输出:计算机用于向用户显示信息的任何内容。这包括显示器,扬声器和打印机。

可以用自动售票机来理解计算机(尽管自动售票机严格地说不是计算机):

输入:投币口和选择按钮是自动售票机的输入设备。

处理:当您进行选择时,自动售票机会执行以下几个步骤:验证是否有满足条件的票、验证身份信息、检查和验证是否收到足够的资金、修改数据库、计算差额。执行所有这些步骤的机器部分可以被认为是处理器。

输出:自动售票机显示结果、打印票。

记忆:为了执行处理步骤,自动售票机需要跟踪诸如票的库存、价格和可用变化等信息。这些信息必须存储在某个地方。

中央处理单元(CPU)CPU是计算机中最重要的部分,是计算机的大脑,负责计算、处理数据、控制其他设备等。它有几个重要的子组件:

算术/逻辑单元(ALU)执行算术和比较操作。

控制单元确定下一个要执行的指令。

寄存器形成一个高速存储区以获得临时结果。

不同种类的CPU可以理解不同的指令集。不同种类的CPU可以理解不同的指令集,例如,Intel IA-32和x86-64,IBM PowerPC或ARM。存储(Memory)计算机将信息(程序、数据)存储在其存储器中,有两种类型的存储器:主存储器(也称为内存)和辅助存储器(也称为外存)。主存储器直接连接到CPU(或其他处理单元),通常称为RAM(随机存取存储器)。计算机关闭时(即易失性),大多数主存储器都会丢失其内容。可以将主存储器想象成一个长序列的存储器单元:每个单元都可以通过其存储器地址寻址。对于第一个单元格,这些地址从零开始,并且每个后续单元格的地址比它之前的地址多一个。每个单元格只能保存一个数字,但CPU可以随时用新数字替换内容。内容可以被检索而不被从单元擦除。辅助存储器比主存储器便宜,因此可以以更大的尺寸提供。虽然它慢得多,但它是非易失性的 - 也就是说,即使在计算机关闭后其内容也会保留。这种类型的存储器的示例包括硬盘和闪存盘。计算机的操作系统提供到辅助存储器的高级接口。这些接口允许信息以文件的形式保存在辅助存储器,并且文件组织成目录的层次结构中。接口和层次结构通常被称为文件系统。例如,windows系统运行使用资源管理器等工具访问这些目录和文件。1.0.2 计算机编程算法(Algorithms)算法是完成某个任务或解决某个问题的一系列步骤。比如一道菜(满汉全席)的食谱说明、一个产品的操作过程说明、祖冲之计算圆周率的方法等。程序和编程程序就是算法在计算机中的表示和实现。编程就是如何用计算机的指令来表示算法,即将算法转换成计算机可以执行的程序。二进制因为计算机硬件是由很多晶体管组成的,而晶体管只有“开”和“关”两种状态,因此一个晶体管只能表示2个数字0和1,通过很多个这种表示0或1的晶体管可以表示更复杂的数字比如整数或字符等,因此,数据在计算机硬件都是以二进制(0和1)形式表示的。假如有8个开关器件,则可以表示8位二进制数字,即可表示有

个不同的数值。1个晶体管元器件称为1比特(Bit)或1位,8个元器件称为1字节(Byte),那么16个元器件就是2Byte,…

8×1024个元器件就可以表示1024Byte,即1KB

8×1024×1024个元器件就可以表示1024KB,即1MB

8×1024×1024个元器件就可以表示1024MB,即1GB

机器语言(machine language)计算机中的指令和数据都是用0,1串表示的。机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指令集合。例如,下面是将17和20相加的机器指令(采用Intel 8086机器语言,Intel Pentium机器语言的子集):第一行告诉计算机将17复制到AL寄存器:前四个字符(1011)告诉计算机将信息复制到寄存器中,接下来的四个字符(0000)告诉计算机使用名为AL的寄存器,最后一个八位数字(0001 0001,即二进制17)指定要复制的数字。用机器语言编写程序非常困难,也很难被人们阅读和理解。在20世纪40年代,第一台电脑的程序员必须这样做,通过纸上打孔来表示0和1来编写机器语言的程序,因为没有其他选择!汇编语言(assembly language)为了简化编程过程,引入了汇编语言。每个汇编指令对应一个机器语言指令,但人们更容易理解,如8086汇编语言中的等效加法程序所示:

MOV AL, 17D

ADD AL, 20D

MOV [SUM], AL用汇编语言编写的程序不能直接被计算机理解,因此需要翻译步骤。这是使用汇编程序完成的,汇编程序的工作是从汇编语言转换为机器语言。高级语言(High-level languages)虽然汇编语言对机器语言有很大的改进,但它仍然很神秘,而且它的级别太低,所以最简单的任务需要很多指令。开发了高级语言,使编程变得更加容易。在高级语言中,指令可以对应于多种机器语言指令,这使得程序更易于读取和写入。这是上面代码的Python等价物:

sum = 17 + 201.0.3 编译器、解释器和Python语言用高级语言编写的程序在计算机执行之前也必须翻译成机器语言。一些编程语言立即翻译整个程序并将结果存储在另一个文件中,然后执行。有些语言逐行翻译和执行程序。我们分别称这些语言为编译语言和解释语言。 Python是一种解释型语言。一种编译语言带有一个编译器,它是一个将源文件编译为可执行二进制文件的程序。解释型语言附带一个解释器,用于解释源文件并执行它们。解释的效率可能比编译效率低,因此解释型语言的速度很慢。

编译器:是将整个源代码程序一次性全部转换为机器指令代码的工具。转化后的机器语言代码就可以直接在计算机上运行。

解释器:是“一行一行地”逐条地将源程序语句转化成机器指令并执行。从第一条语句开始,转换一条语句后就执行,然后再转换下一条语句。

解释器逐条语句转换执行,可以使得初学者很容易知道程序的错误位置。而编译器对整个源程序进行一次性的转换有一个优点就是能否对代码进行整体的优化,从而提高程序的性能。速度要求高或需要直接操纵硬件的程序通常使用C语言编写。C是一种编译语言,编译器将C语言程序编译为机器指令时,会对程序做很多细粒度的控制和优化,可以提高程序的运行速度,但编译需要耗费时间并且容易出错,而且整个程序写完编译好后才能开始执行程序,而Python作为一种解释性语言,每条语句被逐条解释执行,可以立即发现程序错误、看到程序运行结果,学习和编写这种解释性程序更容易。1.0.4 Python程序开发步骤和用任何编程语言编写程序一样,用Python编写程序同样要经历以下的步骤:

理解问题

提出算法

编写程序

测试

例如,要计算一组数值的平均值。可以按照上面的步骤进行

理解问题: 这些数值从哪里输入(键盘还是文件)?结果如何显示(屏幕打印输出还是保持到文件)?

提出算法: 用2个数值表示总和和数值的个数,然后将输入的这些数累加到总和上,最后除以数值的个数,得到平均值。人们经常以一种“伪代码”的方式描述算法的过程

-----------start-------------

总和 sum=0.

计数器为count=0.

重复:

读一个值,

如果读取值失败,结束 这个“重复”过程

否则:

将读取的值value加到sum。

计数器增加1.即

通过“总和”和“计算器”相除得到平均值

显示/打印平均值

-----------end------------

编写程序: 将算法用Python语言表示出来

测试: 输入不同的测试数据,看看结果是否正确。输入的数据可以包含非法的数据,看看程序是否能适当地应对,比如输入的是字符串而不是数值,程序是否会提示等。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180630G0DIN600?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券