基本算法概念导论

4.1 什么是算法?

在技术术语中,是一个严格定义的有限语句序列(通常称为指令或命令),为任何可接受的输入值(如果有任何输入)提供解决问题或特定类别的问题。换句话说,算法是解决给定问题的分步程序。术语意味着算法必须达到终点,并且不能永远运行。

你可以在现实生活中到处找到算法,而不仅仅是计算机科学。例如,准备烤面包或一杯茶的过程可以表示为算法。为了实现您的目标,必须遵循某些步骤。按特定顺序排列。

4.2 泡杯茶的算法

以下是泡杯茶的算法。

  1. 把茶包放在杯子里。
  1. 给水壶加满水。
  1. 把水壶里的水煮沸。
  1. 把一些开水倒进杯子里。
  1. 将牛奶加入杯子中。
  1. 在杯子里加糖。
  1. 搅拌茶。
  1. 喝茶。

如您所见,必须遵循某些步骤。这些步骤按特定顺序排列,即使某些步骤可以重新排列。例如,可以逆转步骤 5 和 6。你可以先加糖,然后加牛奶。

请记住,某些步骤的顺序可能会更改,但您不能将它们移离应位于的位置。例如,您无法将第 3 步("将水壶中的水煮沸")移动到算法的末尾,因为您最终将喝一杯冰茶(而不是温暖的冰茶),这与您最初的目标完全不同!

4.3 算法的属性

算法必须满足以下属性:

:算法必须具有指定集的输入值。

:算法必须从指定的输入值中生成输出值。输出值是解决问题的办法。

:对于任何输入,算法必须在有限数量的步骤后终止。

:算法的所有步骤都必须精确定义。

:必须能够正确、有限地执行算法的每一步。这就是说,它的步骤必须足够基本,例如,有人使用铅笔和纸可以进行准确,并在有限的时间。每一步都明确(或精确定义)是不够的,但它也必须是可行的。

4.4 关于算法的好。但什么是计算机程序呢?

(或脚本)只不过是一种算法,它以计算机能够理解的语言编写,如PHP、Python、C++或Java。

计算机程序(或脚本)实际上不能杯茶或做饭,尽管算法可以引导你通过步骤自己做。但是,程序和脚本可以(例如)用于计算一组数字的平均值,或查找其中的最大值。人工智能程序甚至可以下棋或解决逻辑难题。

4.5 三方!

算法中总是有三个方参与:编写算法的一方、执行算法的一方和使用或享受算法的一方。

例如,让我们采取一种准备饭菜的算法。有人写算法(食谱的作者),有人执行它(可能是你的母亲,谁准备从食谱的步骤后,膳食),有人使用它(可能是你,谁喜欢这顿饭)。

现在考虑一个真正的计算机程序。例如,让我们来看看视频游戏。有人用计算机语言(程序员)、某人或某物执行算法(通常是笔记本电脑或计算机)编写算法,其他人使用算法或玩它(用户)。

但是要小心,因为有时术语"程序员"和"用户"可能会令人困惑。当你一个计算机程序,在那段时间你是"程序员",但当你自己的程序,你是"用户"。

4.6 创建算法所涉及的三个主要阶段

算法应包括三个阶段:、和。此顺序是特定的,不能更改。

考虑一个计算机程序,它可以找到三个数字的平均值。首先,程序必须提示(要求)用户输入数字(数据输入阶段)。接下来,脚本必须计算数字的平均值(数据处理阶段)。最后,程序必须在计算机屏幕上显示结果(结果输出阶段)。

让我们更详细地了解这些阶段。

第一阶段–数据输入

  1. 提示用户输入数字。
  1. 提示用户输入第二个号码。
  1. 提示用户输入第三个号码。

第二阶段–数据处理

  1. 计算三个数字的总和。
  1. 将总和除以 3。

第三阶段– 结果输出

  1. 在屏幕上显示结果。

在一些罕见的情况下,输入阶段可能不存在,计算机程序可能只包括两个阶段。例如,考虑编写计算机程序来计算以下总和。

1 + 2 + 3 + 4 + 5

在此示例中,用户必须输入任何值,因为计算机程序确切地知道该怎么做。它必须计算数字 1 到 5 的总和,然后在用户屏幕上显示 15 值。此处显示了两个所需的阶段(数据处理和结果输出)。

第一阶段–数据输入

无事可做

第二阶段 - 数据处理

  1. 计算1 +2 +3+4+5的总和。

第三阶段– 结果输出

  1. 在屏幕上显示结果。

但是,如果您想让用户决定该金额的上限,该怎么办?如果您想让用户决定是将数字 1 到 5 相和还是数字 1 到 20 相等,该怎么办?在这种情况下,程序必须包括程序开头的输入阶段,以便用户进入该上限。用户进入该上限后,计算机可以计算结果。此处显示了所需的三个阶段。

第一阶段–数据输入

  1. 提示用户输入数字。

第二阶段–数据处理

  1. 计算总和1+2+...(最多包括用户输入的上限)。

第三阶段– 结果输出

  1. 在屏幕上显示结果。

例如,如果用户输入数字 6 作为上限,计算机会发现 1 + 2 + 3 + 4 + 5 + 6 的结果。

4.7 流程图

是一种图形化的方法,通常在纸上显示算法。它是算法执行流程的视觉表示。换句话说,它在视觉上表示执行流程如何从一个语句进行到下一个语句,直到算法结束。流程图使用的基本符号显示在。

流程图符号

描述

:表示算法的开始或结束。开始符号有一个出口,末端符号有一个入口。

头:显示执行流程。来自一个符号的箭头,以另一个符号结尾,显示控制传递到箭头指向的符号。箭总是被绘制为直线上下或侧向(从来没有在一个角度)。

:表示一个过程或数学(公式)计算。进程符号有一个入口和一个出口。

:表示数据输入或结果输出。在大多数情况下,数据来自键盘,结果显示在屏幕上。数据输入/输出符号有一个入口和一个出口。

:指示决策的点。基于给定条件(可能是真或假),算法将遵循右路或左路。决策符号有一个入口和两个(并且始终只有两个)出口。

:将流程图的延续显示到另一页上。当流程图变得太大而无法贴合到一张纸上时,它们用于连接多个页面上的段。传出的页外连接器符号有一个入口,传入的页面外连接器符号有一个出口。

描述对在其他地方(如在单独的流程图中)正式定义的子程序的调用。预定义的过程符号有一个入口和一个出口。

流程图符号及其功能

流程图示例见该算法提示用户输入三个数字,然后计算其平均值并将其显示在计算机屏幕上。

计算和显示三个数字平均值的算法的流程图

流程图始终以"开始/结束"符号开始和结束!

练习 4.7-1 查找三个数字的平均值

设计计算三个数字平均值的算法。每当平均值低于 10 时,必须显示一条消息"失败!否则,如果平均值为 10 或以上,则必须显示"通过!"

溶液

在此问题中,必须显示两个不同的消息,但每次执行算法时只能显示一条消息:消息的措辞取决于平均值。此处介绍了算法的流程图。

为了节省纸张,您可以提示用户使用单个斜并行图输入所有三个数字。

决策符号始终有一个入口和两个出口路径!

当然,你很快就要开始创建自己的算法了。这一具体练习非常简单,本章以例外形式提出,只是为了演示目的。在开始创建自己的算法甚至PHP脚本之前,您需要了解更多信息。耐心点!再过几章,大好时机就会到来!

4.8 什么是"保留词"?

在计算机语言中,(或)是具有严格预定义含义的单词,保留用于特殊用途,不能用于任何其他目的。例如,在流程图中、、取和单词具有预先定义的含义。它们分别用于表示开始、结束、数据输入和结果输出。

保留词语也存在于所有高级计算机语言中。在PHP中,有许多保留的词,如,,,和它们的含义是预先定义的,因此这些单词不能用于任何其他目的。

保留词语存在于所有高级计算机语言中。但是,每种语言都有自己的保留词。例如,PHP中的保留词"在Python中写成

4.9 语句和命令的区别是什么?

互联网上就声明和命令之间是否存在任何区别进行了大讨论。有些人喜欢使用"语句"一词,而另一些人则喜欢使用"命令"一词。对于新手程序员来说,没有区别:两者都是电脑的指令!

4.10 什么是结构化编程?

是一种采用模块化和结构化设计的软件开发方法。大型程序被分解为较小的模块,每个模块使用结构化代码,这意味着语句以特定的方式组织,从而最大限度地减少错误和误解。顾名思义,结构化编程是以结构化编程语言完成的,PHP就是其中一种语言。

结构化编程概念于1966年由科拉多·贝姆和朱塞佩·雅科皮尼正式确定。他们使用序列、决策和迭代演示了理论计算机程序设计。

4.11 三种基本控制结构

结构化编程有三个基本控制结构。

:这指的是逐行执行,其中语句按顺序执行,顺序与程序中显示的顺序相同,无需跳过其中任何一个。它也被称为。

:根据条件是真还是假,决策控制结构可以跳过执行整个陈述块,甚至执行一个对账单块而不是另一个陈述块。它也被称为。

:这是一个控制结构,允许多次执行一个对账单块,直到满足指定条件。它也被称为或。

世界各地的每个计算机程序都是仅以这三种控制结构编写的!

如果您不太了解这三种控制结构的更深层含义,不要担心,因为即将开始的章节将非常彻底地分析它们。耐心是一种美德。你现在要做的就是等待!

使用流程图练习 4.11-1 理解控制结构

使用流程图,举例说明每种类型的控制结构。

溶液

序列控制结构示例

决策控制结构示例

循环控制结构示例

4.12 您的第一个 PHP 脚本

将流程图转换为计算机语言(如 PHP)会导致 PHP 脚本。PHP 脚本只不过是一个文本文件,包括 PHP 语句。PHP脚本甚至可以写在您的文本编辑器应用程序!但请记住,使用视觉工作室代码编写 PHP 脚本是一个更好的解决方案,因为它包含的所有功能可以使您的生活更轻松。

PHP 源代码通过默认.php文件扩展保存在硬盘上。

PHP 脚本始终以分别和的划界器开头和结尾,如图所示。

<

// PHP代码转到此处

?>

下面是一个非常简单的算法,在屏幕上显示三条消息。

此算法也可以以 PHP 脚本编写如下。

<

" ";

";

";

?>

请注意,PHP 要求使用分号终止所有语句。

4.13 语法错误、逻辑错误和运行时间错误之间的区别是什么?

当程序员以高级语言编写代码时,可能会发生三种类型的错误:语法错误、逻辑错误和运行时间错误。

是一个错误,如拼写错误的关键字、缺失的标点符号字符或缺少的关闭括号。编译器或口译员检测到语法错误。如果您尝试执行包含语法错误的代码,您将在屏幕上收到错误消息,代码将无法执行。您必须纠正任何错误,然后尝试再次执行程序(或脚本)。

某些 IDE(如视觉工作室代码)在键入时检测到这些错误,并以波浪红线强调错误陈述。

是阻止您的代码执行您期望执行的操作的错误。由于逻辑错误,您根本没有得到任何警告。您的代码编译和运行,但结果不是预期的结果。逻辑错误很难检测。您必须彻底审查您的代码,以找出您的错误所在。例如,考虑提示用户输入三个数字的 PHP 脚本,然后计算并显示其平均值。但是,在此脚本中,程序员犯了一个排版错误("typo");他或她的一个陈述将三个数字的总和除以 5,而不是按应的 3 除以。当然,PHP 脚本执行正常,没有任何错误消息,提示用户输入三个数字并显示结果,但显然不正确!程序员必须找到并纠正错误编写的 PHP 语句,而不是计算机或口译员!毕竟电脑没那么聪明!

是在执行程序(或脚本)过程中发生的错误。运行时错误可能导致程序或脚本突然结束,甚至导致系统关闭。此类错误是最难检测的错误。在执行程序(或脚本)之前,无法确定此错误是否会发生。你可以怀疑,它可能会发生,虽然!例如,内存用完或除法为零会导致运行时错误。

逻辑错误可能是运行时错误的原因!

逻辑错误和运行时间错误通常称为"bug",通常在软件发布之前发现。当软件发布给公众后发现错误时,程序员通常会发布补丁或小更新来修复错误。

4.14 评论您的代码

当你写一个小而简单的程序(或脚本),任何人都可以理解它是如何工作的,只是通过逐行阅读它。然而,长程序和脚本是很难理解的,有时甚至由同一个人谁写他们。

是额外的信息,可以包含在程序(或脚本),使其更容易阅读和理解。您可以添加解释和其他信息,包括:

编写程序/脚本的人

创建程序/脚本或上次修改时

程序/脚本做什么

程序/脚本的工作原理

评论是为人类读者准备的。编译员和口译员会忽略您可能添加到程序或脚本的任何评论。

但是,您不应过度评论。无需解释代码的每一行。仅在难以遵循代码的特定部分时添加注释。

在 PHP 中,您可以使用以下方法之一添加注释:

双斜线

尖锐的符号#。。。。。。

斜线–星号,星号+斜线分界线

以下脚本演示了如何使用所有类型的评论。通常双斜线 ) 和锐利符号 (# ) 用于评论单行,而斜线星号、星号斜线分界线

<

/*

由布拉斯·阿里斯蒂德斯创作

创建日期: 20031225

修改日期: 04/03/2008

描述:此脚本在屏幕上显示某些消息

*/

"

//在屏幕上显示第二条消息

" ";

/*在屏幕上显示第三条消息*/ ";

#这是一个评论回声"结束"

?>

如前文脚本中所示,您可以在语句上方或末尾添加注释,但不能在声明前面添加注释。看看最后一个声明,它应该显示消息"结束"。此语句从未执行,因为它被视为评论的一部分。

如果您在声明前使用分界线添加注释/*...*/,则声明仍执行。在前一个例子中,希腊语"Γεια σας"信息,即使写在一些评论旁边,仍然执行。但是,最好不要遵循这种写作风格,因为它会使您的代码难以读取。

当程序运行时,程序的用户看不到注释。

4.15 用户友好型程序和脚本

什么是程序/脚本?这是一个用户认为朋友,而不是敌人,一个很容易为新手用户。

如果你想写用户友好的程序/脚本,你必须把自己放在用户的立场。用户希望计算机以最小的努力完成工作。隐藏的菜单、不清楚的标签和方向以及误导性的错误消息都会使程序/脚本用户不友好!

最能定义用户友好型设计的法律是"":""。这项法律也通常被称为

4.16 评论问题:真/假

对以下每个陈述选择。

  1. 准备饭的过程实际上是一种算法。
  1. 算法仅用于计算机科学。
  1. 算法可以永远运行。
  1. 在算法中,您可以在任何您希望的位置中重新定位一步。
  1. 算法必须为至少一组输入值生成正确的输出值。
  1. 电脑可以下棋。
  1. 算法总是可以成为计算机程序(或脚本)。
  1. 编程是创建计算机程序的过程。
  1. 计算机程序中始终有三方参与:程序员、计算机和用户。
  1. 程序员和用户有时可以是同一个人。
  1. 计算机程序/脚本可以输出任何结果。
  1. 流程图是计算机程序。
  1. 流程图由一组几何形状组成。
  1. 流程图是一种用于表示算法的方法。
  1. 要表示算法,您可以在不使用任何开始/结束符号的情况下设计流程图。
  1. 您可以在不使用任何进程符号的情况下设计流程图。
  1. 您可以在不使用任何数据输入/输出符号的情况下设计流程图。
  1. 流程图必须始终包含至少一个决策符号。
  1. 在流程图中,决策符号可以有一个、两个或三个退出路径,具体取决于给定的问题。
  1. 保留词都是那些具有严格预定义含义的词。
  1. 结构化编程包括结构化设计。
  1. PHP 是一种结构化的计算机语言。
  1. 结构化编程的基本原则是,它只包括四个基本控制结构。
  1. 一个声明,写了十次,被认为是一个循环控制结构。
  1. 决策控制结构是指逐行执行。
  1. 拼写错误的关键字被视为逻辑错误。
  1. PHP 脚本即使包含逻辑错误也可以执行。
  1. 如果您在 PHP 语句末尾留下感叹号,则它被视为语法错误。
  1. 如果您在 PHP 语句的末尾留下感叹号,则无法阻止执行整个 PHP 脚本。
  1. 结构化编程的优点之一是在编写计算机程序时不会出错。
  1. 编译过程中会捕获逻辑错误。
  1. 在编译过程中捕获了运行时间错误。
  1. 语法错误是最难检测的错误。
  1. 计算三角形区域但输出错误结果的程序/脚本包含逻辑错误。
  1. 当程序/脚本不包含输出语句时,它包含语法错误。
  1. 程序/脚本必须始终包含注释。
  1. 如果将注释添加到程序/脚本中,计算机可以更容易地理解它。
  1. 您不能在声明上方添加评论。
  1. 程序/脚本的用户看不到注释。
  1. 如果新手用户可以轻松使用,则程序/脚本称为用户友好型。
  1. 首字母缩略词 POLA 代表"最少娱乐原则"。

4.17 评论问题:多重选择

为以下每个语句选择正确答案。

  1. 算法是一个严格定义的有限语句序列,提供解决方案
  1. 一个问题
  1. 特定类别的问题。

c.

以上两个

  1. 以下哪一项算法必须满足的属性?
  1. 有效性
  1. 拟合性

c.

定性

d.

输入

  1. 计算机程序是
  1. 算法。
  1. 一系列指令。

c.

以上两个

d.

以上均无

  1. 当有人准备一顿饭时,他或她是
  1. "程序员"
  1. "用户"

c.

以上均无

  1. 以下哪一个属于创建算法所涉及的三个主要阶段?
  1. 数据保护
  1. data input

c.

results output

d.

data processing

  1. A flowchart can be
  1. 呈现在一张纸上。
  1. 直接输入计算机。

c.

以上两个

  1. 流程图中的矩形表示
  1. 输入/输出操作。
  1. 处理操作。

c.

一个决定。

d.

以上均无

  1. 以下哪一个是/是控制结构?
  1. 决定
  1. 序列

c.

循环

d.

以上都是控制结构。

  1. 以下 PHP 语句中哪一个包含语法错误?
  1. 回声"你好波塞冬"
  1. 回声"是我!我是一个包含语法错误!!!"

c.

回声"你好雅典娜"

d.

以上均无

  1. 以下哪个语句实际执行?
  1. 回声"你好阿波罗"
  1. /*呼应"你好阿特米斯";*/

c.

这将执行//回声"你好阿雷"

d.

/*这将执行*/回声"你好阿芙罗狄蒂"

  1. 以上均无

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值