CC++ & Algorithm

自然语言描述算法

中等2
语言版本:C++Python
概述:用我们平时说话的方式把解决问题的步骤写下来,这就是自然语言描述算法,它是编写程序前的第一步。

用大白话想清楚步骤:自然语言描述算法

什么是自然语言描述算法?

小朋友,你有没有试过给妈妈描述“怎样做西红柿炒鸡蛋”?你会说:“先洗西红柿,再切块,打两个鸡蛋搅匀,然后倒油炒鸡蛋,最后放西红柿一起炒。”像这样用我们平常说话的方式,把做一件事的步骤一步一步说清楚,这就是自然语言描述算法

电脑和我们不一样,它听不懂“随便”、“大概”这些词。我们需要把步骤写得更详细、更明确,但一开始完全可以用自然语言来想清楚思路。自然语言描述算法,就是用咱们平时说话的方式,把解决问题的步骤写下来。它就像是写程序前的“草稿纸”,能帮你理清思路,少走弯路。


为什么要在写代码前先“说”一遍?

很多同学打开电脑就直接敲代码,结果经常写到一半卡住,或者发现逻辑有漏洞。用自然语言先描述一下,有这些好处:

  • 思路更清晰:把大问题拆成小步骤,一步一步想清楚。
  • 好检查:步骤写出来,你自己或者同学都能帮你看看有没有遗漏或错误。
  • 好翻译:自然语言和代码其实很像,只是把中文换成 Python 语法而已。先想明白每步做什么,再写代码就像“填空”一样简单。

比如下面的例子,先想好步骤,再写代码,就看得很明白。


举个简单的例子:判断一个数是不是偶数

假设我们要写一个程序,判断一个数字是偶数还是奇数。写代码之前,先用自然语言想一想步骤:

  1. 得到一个数字。
  2. 用这个数字除以2。
  3. 如果余数是0,那么它就是偶数;
  4. 否则它是奇数。

是不是很简单?接下来就可以把这几句话翻译成Python代码,就像这样:

# 用自然语言描述算法后,再来写代码
number = int(input("请输入一个数字:"))   # 第一步:得到数字
if number % 2 == 0:                     # 第二步和第三步:除以2,检查余数
    print("这是一个偶数")
else:
    print("这是一个奇数")

你看,代码里的逻辑和刚才的自然语言描述完全对应。先想清楚“怎么做”,再动手敲键盘,写程序就会又快又不容易出错。


如何写好自然语言描述?三个小提醒

写自然语言描述时,要注意这几点,不然可能还是写不清楚:

1. 步骤要具体,不能模糊

  • 错的:“找个最大的数。” —— 怎么找?没说清楚。
  • 对的:“从第一个糖果开始,暂时把它当作最大的;然后依次看每个糖果,如果它比当前最大的还大,就更新最大为这个糖果;最后得到的那个就是最大的。”

2. 不要跳步,一个动作一句话

比如“做作业”不能只说一句“做作业”,而要拆开:

  • 拿出作业本
  • 打开到第10页
  • 做完第1题
  • 检查答案
  • 继续做第2题……

3. 注意顺序

有时候步骤顺序反了,结果就错了。比如西红柿炒鸡蛋,如果先炒鸡蛋再洗西红柿,那鸡蛋就糊了。算法也一样,顺序很重要。


生活中的例子:用自然语言描述“买文具”

小明的妈妈给了他10元零花钱,让他去文具店买一支笔(2元)和一个本子(3元)。如果钱够,就把东西买回来;如果不够,就只买笔,剩下的钱带回家。用自然语言描述这个算法:

  1. 记下妈妈给的钱:10元。
  2. 看笔的价格:2元。
  3. 看本子的价格:3元。
  4. 计算总共需要多少钱:2 + 3 = 5元。
  5. 如果10元 >= 5元,就买笔和本子,剩下 10 - 5 = 5元带回家。
  6. 否则(钱不够),只买笔,剩下 10 - 2 = 8元带回家。

然后就可以写成代码:

money = 10            # 妈妈给的钱
pen_price = 2         # 笔的价格
book_price = 3        # 本子的价格
total = pen_price + book_price   # 计算总价

if money >= total:                     # 钱够
    print("买了笔和本子")
    remain = money - total              # 计算剩余
    print("还剩", remain, "元")
else:                                  # 钱不够
    print("只买一支笔")
    remain = money - pen_price
    print("还剩", remain, "元")

你能看出,每一步自然语言描述都对应着代码里的一个动作。


常见错误:新手容易犯的“坑”

  • 描述太简略:比如“找最大数”只说“比较大小”。应该详细说清楚“怎么比较”。
  • 忘了初始化:比如找最大数,需要先假设第一个是最大,不然拿谁去比?
  • 把条件写反:比如“如果分数≥60,则不及格”——这就错了。
  • 顺序弄错:比如先打印结果再计算,结果就会是错的。

避免这些错误的方法:写完自然语言描述后,自己扮演“电脑”一步步跟着走一遍,看能不能得到正确结果。


完整示例:找出一盒糖果里最大的那一颗

原文章最后问了一个问题:“你能用自然语言描述‘怎样找到一盒糖果里最大的那一颗’吗?”现在我们来完整做一遍。

自然语言描述:

  1. 打开糖果盒子,拿出第一颗糖,把它当作“当前最大”。
  2. 然后依次看剩下的每一颗糖:
    • 如果这颗糖比“当前最大”还大,就把“当前最大”换成这颗糖。
  3. 当所有糖都看完,“当前最大”就是最大的那颗。
  4. 告诉结果:这颗糖是最大的。

用 Python 代码实现:

# 假设糖果的大小用数字表示:数字越大糖果越大
candies = [5, 9, 3, 7, 2]   # 一盒糖果,每个数字代表一颗糖的大小

max_size = candies[0]          # 第一步:把第一颗糖设为最大
for candy in candies:          # 第二步:依次看每颗糖
    if candy > max_size:       # 如果这颗糖比当前最大还大
        max_size = candy       # 更新最大为这颗糖

print("最大的糖果大小是:", max_size)   # 结果:9

你看,完全对应着自然语言描述的四步。试着自己也写一个吧!


小结:记住一个小窍门

写任何程序前,先拿出一张纸或者自己对自己说:“按顺序要做什么?”把你想到的每一步用大白话写下来。这就是自然语言描述算法。即使最后代码很长,思路也永远不会乱。


接下来可以学什么?

如果你已经掌握了用自然语言描述算法,就可以继续学习:

  • 流程图:用图形把步骤画出来,更直观。
  • 伪代码:介于自然语言和代码之间,更接近编程。
  • Python基础语法:怎么用ifforwhile实现这些步骤。

你现在已经迈出了编程最重要的一步——想清楚再动手。加油!

例题精讲

1单选题

下列哪一项是自然语言描述算法的最大优点?

A精确无歧义
B容易被非专业人员理解
C可以直接在计算机上运行
D语法严格,不易出错
2判断题

自然语言描述算法时,步骤必须严格按照计算机执行的顺序来写,否则算法无效。

3单选题

以下是用自然语言描述的一个算法片段:“第一步,输入两个数a和b;第二步,比较a和b的大小;第三步,将较大的数输出。”该算法缺少了哪一种基本结构?

A循环结构
B顺序结构
C分支结构
D递归结构
4判断题

自然语言描述算法时,可以使用“然后”“接着”“重复”等词语来连接步骤,这些词语有助于表达算法的控制流。

5填空题
请根据以下自然语言描述,补全Python程序中的空缺部分。
**自然语言描述**:
1. 输入一个正整数n;
2. 令变量sum从0开始;
3. 对于每个从1到n的整数i,执行:sum = sum + i;
4. 输出sum的值。

**Python代码**:
n = int(input("请输入n: "))
sum = 0
for i in range(1, ___):
    sum = sum + i
print(sum)