4.1 什么是算法?
在技术术语中,是一个严格定义的有限语句序列(通常称为指令或命令),为任何可接受的输入值(如果有任何输入)提供解决问题或特定类别的问题。换句话说,算法是解决给定问题的分步程序。术语意味着算法必须达到终点,并且不能永远运行。
你可以在现实生活中到处找到算法,而不仅仅是计算机科学。例如,准备烤面包或一杯茶的过程可以表示为算法。为了实现您的目标,必须遵循某些步骤。按特定顺序排列。
4.2 泡杯茶的算法
以下是泡杯茶的算法。
- 把茶包放在杯子里。
- 给水壶加满水。
- 把水壶里的水煮沸。
- 把一些开水倒进杯子里。
- 将牛奶加入杯子中。
- 在杯子里加糖。
- 搅拌茶。
- 喝茶。
如您所见,必须遵循某些步骤。这些步骤按特定顺序排列,即使某些步骤可以重新排列。例如,可以逆转步骤 5 和 6。你可以先加糖,然后加牛奶。
请记住,某些步骤的顺序可能会更改,但您不能将它们移离应位于的位置。例如,您无法将第 3 步("将水壶中的水煮沸")移动到算法的末尾,因为您最终将喝一杯冰茶(而不是温暖的冰茶),这与您最初的目标完全不同!
4.3 算法的属性
算法必须满足以下属性:
► | :算法必须具有指定集的输入值。 |
► | :算法必须从指定的输入值中生成输出值。输出值是解决问题的办法。 |
► | :对于任何输入,算法必须在有限数量的步骤后终止。 |
► | :算法的所有步骤都必须精确定义。 |
► | :必须能够正确、有限地执行算法的每一步。这就是说,它的步骤必须足够基本,例如,有人使用铅笔和纸可以进行准确,并在有限的时间。每一步都明确(或精确定义)是不够的,但它也必须是可行的。 |
4.4 关于算法的好。但什么是计算机程序呢?
(或脚本)只不过是一种算法,它以计算机能够理解的语言编写,如PHP、Python、C++或Java。
计算机程序(或脚本)实际上不能杯茶或做饭,尽管算法可以引导你通过步骤自己做。但是,程序和脚本可以(例如)用于计算一组数字的平均值,或查找其中的最大值。人工智能程序甚至可以下棋或解决逻辑难题。
4.5 三方!
算法中总是有三个方参与:编写算法的一方、执行算法的一方和使用或享受算法的一方。
例如,让我们采取一种准备饭菜的算法。有人写算法(食谱的作者),有人执行它(可能是你的母亲,谁准备从食谱的步骤后,膳食),有人使用它(可能是你,谁喜欢这顿饭)。
现在考虑一个真正的计算机程序。例如,让我们来看看视频游戏。有人用计算机语言(程序员)、某人或某物执行算法(通常是笔记本电脑或计算机)编写算法,其他人使用算法或玩它(用户)。
但是要小心,因为有时术语"程序员"和"用户"可能会令人困惑。当你一个计算机程序,在那段时间你是"程序员",但当你自己的程序,你是"用户"。
4.6 创建算法所涉及的三个主要阶段
算法应包括三个阶段:、和。此顺序是特定的,不能更改。
考虑一个计算机程序,它可以找到三个数字的平均值。首先,程序必须提示(要求)用户输入数字(数据输入阶段)。接下来,脚本必须计算数字的平均值(数据处理阶段)。最后,程序必须在计算机屏幕上显示结果(结果输出阶段)。
让我们更详细地了解这些阶段。
第一阶段–数据输入
- 提示用户输入数字。
- 提示用户输入第二个号码。
- 提示用户输入第三个号码。
第二阶段–数据处理
- 计算三个数字的总和。
- 将总和除以 3。
第三阶段– 结果输出
- 在屏幕上显示结果。
在一些罕见的情况下,输入阶段可能不存在,计算机程序可能只包括两个阶段。例如,考虑编写计算机程序来计算以下总和。
1 + 2 + 3 + 4 + 5
在此示例中,用户必须输入任何值,因为计算机程序确切地知道该怎么做。它必须计算数字 1 到 5 的总和,然后在用户屏幕上显示 15 值。此处显示了两个所需的阶段(数据处理和结果输出)。
第一阶段–数据输入
无事可做
第二阶段 - 数据处理
- 计算1 +2 +3+4+5的总和。
第三阶段– 结果输出
- 在屏幕上显示结果。
但是,如果您想让用户决定该金额的上限,该怎么办?如果您想让用户决定是将数字 1 到 5 相和还是数字 1 到 20 相等,该怎么办?在这种情况下,程序必须包括程序开头的输入阶段,以便用户进入该上限。用户进入该上限后,计算机可以计算结果。此处显示了所需的三个阶段。
第一阶段–数据输入
- 提示用户输入数字。
第二阶段–数据处理
- 计算总和1+2+...(最多包括用户输入的上限)。
第三阶段– 结果输出
- 在屏幕上显示结果。
例如,如果用户输入数字 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 中,您可以使用以下方法之一添加注释:
► | 双斜线 |
► | 尖锐的符号#。。。。。。 |
► | 斜线–星号,星号+斜线分界线 |
以下脚本演示了如何使用所有类型的评论。通常双斜线 ) 和锐利符号 (# ) 用于评论单行,而斜线星号、星号斜线分界线
<?
/*
由布拉斯·阿里斯蒂德斯创作
创建日期: 2003年12月25日
修改日期: 04/03/2008
描述:此脚本在屏幕上显示某些消息
*/
"
//在屏幕上显示第二条消息
" ";
/*在屏幕上显示第三条消息*/ ";
#这是一个评论回声"结束":
?>
如前文脚本中所示,您可以在语句上方或末尾添加注释,但不能在声明前面添加注释。看看最后一个声明,它应该显示消息"结束"。此语句从未执行,因为它被视为评论的一部分。
如果您在声明前使用分界线添加注释/*...*/,则声明仍执行。在前一个例子中,希腊语"Γεια σας"信息,即使写在一些评论旁边,仍然执行。但是,最好不要遵循这种写作风格,因为它会使您的代码难以读取。
当程序运行时,程序的用户看不到注释。
4.15 用户友好型程序和脚本
什么是程序/脚本?这是一个用户认为朋友,而不是敌人,一个很容易为新手用户。
如果你想写用户友好的程序/脚本,你必须把自己放在用户的立场。用户希望计算机以最小的努力完成工作。隐藏的菜单、不清楚的标签和方向以及误导性的错误消息都会使程序/脚本用户不友好!
最能定义用户友好型设计的法律是"":""。这项法律也通常被称为
4.16 评论问题:真/假
对以下每个陈述选择。
- 准备饭的过程实际上是一种算法。
- 算法仅用于计算机科学。
- 算法可以永远运行。
- 在算法中,您可以在任何您希望的位置中重新定位一步。
- 算法必须为至少一组输入值生成正确的输出值。
- 电脑可以下棋。
- 算法总是可以成为计算机程序(或脚本)。
- 编程是创建计算机程序的过程。
- 计算机程序中始终有三方参与:程序员、计算机和用户。
- 程序员和用户有时可以是同一个人。
- 计算机程序/脚本可以输出任何结果。
- 流程图是计算机程序。
- 流程图由一组几何形状组成。
- 流程图是一种用于表示算法的方法。
- 要表示算法,您可以在不使用任何开始/结束符号的情况下设计流程图。
- 您可以在不使用任何进程符号的情况下设计流程图。
- 您可以在不使用任何数据输入/输出符号的情况下设计流程图。
- 流程图必须始终包含至少一个决策符号。
- 在流程图中,决策符号可以有一个、两个或三个退出路径,具体取决于给定的问题。
- 保留词都是那些具有严格预定义含义的词。
- 结构化编程包括结构化设计。
- PHP 是一种结构化的计算机语言。
- 结构化编程的基本原则是,它只包括四个基本控制结构。
- 一个声明,写了十次,被认为是一个循环控制结构。
- 决策控制结构是指逐行执行。
- 拼写错误的关键字被视为逻辑错误。
- PHP 脚本即使包含逻辑错误也可以执行。
- 如果您在 PHP 语句末尾留下感叹号,则它被视为语法错误。
- 如果您在 PHP 语句的末尾留下感叹号,则无法阻止执行整个 PHP 脚本。
- 结构化编程的优点之一是在编写计算机程序时不会出错。
- 编译过程中会捕获逻辑错误。
- 在编译过程中捕获了运行时间错误。
- 语法错误是最难检测的错误。
- 计算三角形区域但输出错误结果的程序/脚本包含逻辑错误。
- 当程序/脚本不包含输出语句时,它包含语法错误。
- 程序/脚本必须始终包含注释。
- 如果将注释添加到程序/脚本中,计算机可以更容易地理解它。
- 您不能在声明上方添加评论。
- 程序/脚本的用户看不到注释。
- 如果新手用户可以轻松使用,则程序/脚本称为用户友好型。
- 首字母缩略词 POLA 代表"最少娱乐原则"。
4.17 评论问题:多重选择
为以下每个语句选择正确答案。
- 算法是一个严格定义的有限语句序列,提供解决方案
- 一个问题
- 特定类别的问题。
c. | 以上两个 |
- 以下哪一项算法必须满足的属性?
- 有效性
- 拟合性
c. | 定性 |
d. | 输入 |
- 计算机程序是
- 算法。
- 一系列指令。
c. | 以上两个 |
d. | 以上均无 |
- 当有人准备一顿饭时,他或她是
- "程序员"
- "用户"
c. | 以上均无 |
- 以下哪一个属于创建算法所涉及的三个主要阶段?
- 数据保护
- data input
c. | results output |
d. | data processing |
- A flowchart can be
- 呈现在一张纸上。
- 直接输入计算机。
c. | 以上两个 |
- 流程图中的矩形表示
- 输入/输出操作。
- 处理操作。
c. | 一个决定。 |
d. | 以上均无 |
- 以下哪一个是/是控制结构?
- 决定
- 序列
c. | 循环 |
d. | 以上都是控制结构。 |
- 以下 PHP 语句中哪一个包含语法错误?
- 回声"你好波塞冬"
- 回声"是我!我是一个包含语法错误!!!":
c. | 回声"你好雅典娜": |
d. | 以上均无 |
- 以下哪个语句实际执行?
- 回声"你好阿波罗":
- /*呼应"你好阿特米斯";*/
c. | 这将执行//回声"你好阿雷": |
d. | /*这将执行*/回声"你好阿芙罗狄蒂": |
- 以上均无