欢迎来到奇葩栖息地!欢迎加入Discord服务器:XfrfHCzfbW欢迎加入QQ频道:r01m9y3iz6请先至特殊:参数设置验证邮箱后再进行编辑。特殊:参数设置挑选自己想要使用的小工具!不会编辑?请至这里学习Wikitext语法。

算法的基本结构:修订间差异

来自奇葩栖息地
添加3,779字节 、​ 2021年7月2日 (星期五)
// Edit via InPageEdit
(建立内容为“算法有三大基本结构:'''顺序结构''','''分支结构'''与'''循环结构'''。 === 顺序结构 === 文件:Sequence Structure.PNG|200px|thumb|r…”的新页面)
 
(// Edit via InPageEdit)
 
(未显示2个用户的7个中间版本)
第1行:
{{TeX}}
 
算法有三大基本结构:'''顺序结构''','''分支结构'''与'''循环结构'''。
 
=== 顺序结构 ===
 
[[文件:Sequence Structure.PNGpng|200px|thumb|right|顺序结构]]
 
顺序结构是一种最简单,最基本的控制结构。我们做一件事情,通常都是按部就班,一步一步来。程序做事也是这么个思路,一个用于特定问题的算法往往有明显的固定流程,计算机从前往后,依次执行所有的操作步骤,不遗漏,不重复。
 
来看一个例子:读入两个整数a和b,输出a+b的值。
 
这是一个典型的顺序结构应用。题目怎么说,程序就怎么做。
 
我们就不分析算法了,看程序理解吧。
 
<syntaxhighlight lang="cpp" line>
#include <cstdio>
int a, b;
int main()
{
scanf("%d%d", &a, &b);
int c = a + b;
printf("%d\n", c);
return 0;
}
</syntaxhighlight>
 
暂时不去探究每行代码的具体含义,我们只需要知道这个代码首先读入了a和b,然后命名了一个变量c并将其赋值为a与b的和,然后输出c,就完成了这一任务。
 
与此相类似,给出半径计算圆的周长和面积,输入两个数交换他们的值然后输出,都是最基本的顺序结构应用。
 
=== 分支结构 ===
 
[[文件:Case Structure.png|200px|thumb|right|分支结构]]
 
我们生活中难免遇到选择。计算机生活中也难免遇到选择。选择有简单的{{Heimu|比如淮安中考数学选择题第一题}},也有难的{{Heimu|比如选择这里要举什么事例}}。
 
人类的选择有时要从感性、理性、人际、市场、期望、实用程度等方面综合评判,计算机的选择则明了得多,只要给出条件它便能自动选择最合适的一条路{{Heimu|当然也可以用随机来让计算机变得多愁善感}}。
 
还是看一个简单的例子:读入两个整数a和b,输出a和b中的较大值。
 
这里的条件很明晰:即判断“a是否大于b”,若判断为“是(true)”则输出a,若判断为“否(false)”则输出b。
 
<syntaxhighlight lang="cpp" line>
#include <cstdio>
int a, b;
int main()
{
scanf("%d%d", &a, &b);
if (a > b)
printf("%d\n", a);
else
printf("%d\n", b);
printf("%d\n", c);
return 0;
}
</syntaxhighlight>
 
可以看到,这个程序中使用了if else语句,这是C++中最基本的分支语句。
 
类似的,计算机也能处理按成绩打等第、绝对值的计算等问题。
 
=== 循环结构 ===
 
[[文件:Cycle structure.png|200px|thumb|right|循环结构]]
 
大部分人类讨厌循环,因为他们觉得很枯燥。但计算机不会觉得枯燥,<s>因为普通计算机1秒能处理几千万次循环</s>。
 
计算机做的大部分任务需要重复多次,这时就要用到循环结构。
 
依然举个例子:计算1+2+3+...+100(或者说得高大上点,<math>\sum_{i=1}^{100} i</math>)。
 
{{Heimu|因为你没有高斯聪明,所以你不被允许使用公式。{{Note|引用自[https://www.luogu.com.cn/problem/P5722 洛谷P5722]题目描述。|name=a}}}}
 
这就需要我们从1一直循环到100来计算这一和式的结果。
 
<syntaxhighlight lang="cpp" line>
#include <cstdio>
int main()
{
int sum = 0;
for (int i = 1; i <= 100; ++i)
sum += i;
printf("%d\n", sum);
return 0;
}
</syntaxhighlight>
 
这个程序中则使用了for语句,也称“直到”型循环,用来表示有固定上下界的循环。(更复杂的程序中for语句的边界也可能随时改变)
 
但是如果不知道明确的上下界呢?
 
比如这个例子:求出<math>2^x\ge 100</math>这个不等式中x的最小整数值。
 
这样我们就要用到while语句,也称“当”型循环,工作原理是给出一个条件,根据条件的真假来判断是否结束循环。
 
<syntaxhighlight lang="cpp" line>
#include <cstdio>
int main()
{
int sum = 1, ans = 0;
while (sum < 100)
sum *= 2, ans++;
printf("%d\n", ans);
return 0;
}
</syntaxhighlight>
 
当“sum < 100”成立的时候,程序就不断增大指数,直到该条件不成立,也即<math>2^x\ge 100</math>时结束循环,这样即可得到x的最小整数值。
 
=== 注释 ===
 
{{Notelist}}
 
{{Study}}
 
[[分类:信息学]]
2,007

个编辑