CC++ & Algorithm

用日常语言描述算法:就像讲故事一样

中等12
语言版本:C++Python
概述:自然语言描述就是用我们平时说的话(比如中文)把算法的每一步写清楚,但要注意不能有歧义。

把算法“讲”出来:用日常语言描述步骤

你有没有给别人指过路?比如朋友问:“你家怎么走?”你可能会说:“出小区大门左转,走到第一个红绿灯再左转,一直走到蓝色房子那栋。”你刚才就在用自然语言描述一个“路线算法”。自然语言描述算法,就是用我们平时说话、写文章的语言(比如中文),把解决一个问题的步骤按照先后顺序写出来。它不需要懂编程,任何人都能看懂。

但是,自然语言有个小毛病——可能不精确。比如你说“放一点盐”,到底是多少?计算机可不会猜。所以用自然语言描述算法时,我们要尽量把每一条步骤说清楚,每个动作都要明确,不能有歧义。

下面我们就来详细看看,怎样像讲故事一样把算法说清楚。


1. 什么是自然语言描述?举个身边的例子

想象你要计算今天一共花了多少零花钱。你买了文具花了8元,零食花了5元,还剩下20元。你想把消费过程描述给同桌听,可以这样说:

  1. 今天我带了30元零花钱。
  2. 买文具花掉8元,剩余22元。
  3. 买零食花掉5元,剩余17元。
  4. 告诉我还剩多少钱。

这段描述里,每一步都按顺序来,没有跳步,也没有模棱两可的话。这就叫做用自然语言描述了一个“计算剩余零花钱”的算法。

另外,你肯定玩过“猜数字”游戏:一个人心里想一个1~100之间的数,另一个人猜,猜的人每次说“大了”或“小了”。其实这就是一个算法的自然语言描述——每次猜中间的数,然后根据提示缩小范围。不信你试试:“我想的数字是50,大了,那就猜25,小了,那就猜37……”这个逻辑就是二分查找算法。


2. 为什么要用自然语言描述算法?

好处多多:

  • 容易理解:任何同学(哪怕没学过编程)都能看懂,还能按步骤做。
  • 理清思路:先想好“做什么”,再想“怎么写代码”,不容易漏掉步骤。
  • 团队沟通:写代码前,和同学、老师讨论时,用自然语言讲一遍,大家都能提出建议。

但也要注意缺点:

  • 可能有歧义:比如“拿一本书”没有说是哪一本,“走几步”没有说走多少步。
  • 不够精确:计算机需要非常明确的指令,比如“如果分数大于等于90,输出‘优秀’”,而不是“成绩好就优秀”。

所以,写自然语言描述时,我们要像写菜谱一样,每一条都具体、清楚。


3. 怎样写好自然语言描述?三个要点+例子

要点一:步骤要按顺序,不能颠倒

比如给冰箱贴纸条:“先打开冰箱门,再放入饮料,最后关好门。”如果顺序写反了,“先放入饮料,再打开冰箱门”就成了笑话。

例子:用自然语言描述“判断考试成绩等级”

  • 输入一个分数 score。
  • 如果 score >= 90,输出“优秀”。
  • 如果 score >= 80 且 < 90,输出“良好”。
  • 如果 score >= 60 且 < 80,输出“及格”。
  • 如果 score < 60,输出“不及格”。
  • 结束。

注意这里写的是“如果……如果……”,顺序很重要,不能先写“不及格”再写“优秀”,否则会出错。

要点二:每个动作要明确,不能有歧义

不要说“放一点点盐”,要说“放一勺盐”。不要说“走一会儿”,要说“走200米”或“走到第二个路口右转”。

例子:用自然语言描述“排队取餐”

  • 排到窗口前,拿出饭卡。
  • 把饭卡放在读卡器上。
  • 听完“滴”一声后拿走饭卡。
  • 对阿姨说“我要一份鸡腿饭”。
  • 接过餐盘,说“谢谢”。
  • 离开窗口。

每一步都很具体,不会让人不知道下一步该干嘛。

要点三:遇到判断和重复要写清楚

自然语言里常用“如果……就……否则……”来表示判断,用“重复做……直到……”来表示循环

例子:用自然语言描述“从1加到100”(计算总和)

  1. 设置一个变量 total = 0(用来存放总和)。
  2. 设置一个变量 i = 1(从1开始)。
  3. 重复下面步骤,直到 i > 100:
    • 把 total 加上 i,结果存回 total。
    • 把 i 加 1。
  4. 输出 total。
  5. 结束。

这里用了“重复……直到……”,就像体育老师喊“大家跑圈,直到铃响”。


4. 从自然语言到C++代码:两段完整过渡

例1:判断奇偶数(保留原有内容)

自然语言描述

  1. 输入一个整数 n。
  2. 检查 n 除以 2 的余数(用数学运算“n % 2”表示取余数)。
  3. 如果余数等于 0,那么输出“偶数”;否则输出“奇数”。
  4. 结束。

对应的C++代码:

#include <iostream>
using namespace std;

int main() {
    int n;                // 定义一个整数 n 存放输入
    cin >> n;             // 步骤1:输入一个整数

    if (n % 2 == 0) {     // 步骤2:检查余数是否等于0
        cout << "偶数" << endl;  // 步骤3:是偶数
    } else {
        cout << "奇数" << endl;  // 步骤3:否则是奇数
    }
    return 0;             // 步骤4:程序结束
}

你看,自然语言里的每一句话,几乎都能直接翻译成代码中的一行或几行。

例2:判断考试成绩等级(新补充)

自然语言描述(上面已经写好了):

  • 输入分数 score。
  • 如果 score >= 90,输出“优秀”。
  • 否则如果 score >= 80,输出“良好”。
  • 否则如果 score >= 60,输出“及格”。
  • 否则输出“不及格”。
  • 结束。

对应C++代码:

#include <iostream>
using namespace std;

int main() {
    int score;            // 定义整数变量 score 存放考试分数
    cin >> score;         // 输入分数

    if (score >= 90) {                    // 优秀
        cout << "优秀" << endl;
    } else if (score >= 80) {             // 良好
        cout << "良好" << endl;
    } else if (score >= 60) {             // 及格
        cout << "及格" << endl;
    } else {                              // 不及格
        cout << "不及格" << endl;
    }
    return 0;
}

是不是很简单?先用自然语言把“如果……否则如果……”理清楚,再写代码就顺畅多了。


5. 新手最容易犯的几种错误

  • 步骤顺序写反了
    比如描述“洗衣服”:先放衣服,再加水,最后放洗衣液,还是先放洗衣液再放衣服?如果描述不对,实际做起来就会搞错。

  • 缺少明确的停止条件
    比如“一直往前走”——走到什么时候?走几步?还是走到路口?应该写“走到第一个十字路口停下”。

  • 用口语里模糊的词语
    比如“比较大的数”、“有点多”——计算机听不懂。要改成“大于100”、“等于5个”。

  • 跳步或漏步
    比如描述“从冰箱拿水果”:只写“打开冰箱,拿出一个苹果”,忘了写关门。应该加上“关上冰箱门”。

例子:一个错误的自然语言描述

  1. 输入一个数字。
  2. 如果这个数字大于0,输出“正数”。
  3. 否则输出“负数”。
  4. 结束。

错在哪儿?如果数字等于0,它既不是正数也不是负数,但我们的描述里没有考虑等于0的情况。正确做法:增加“否则如果等于0,输出‘零’”。这就是遗漏情况的错误。


6. 完整可运行示例:简单加法计算器

我们用自然语言描述“两个数相加并输出结果”:

自然语言描述

  1. 输入两个整数 a 和 b。
  2. 计算 a + b 的值,存到变量 sum 中。
  3. 输出 sum。
  4. 结束。

C++代码:

#include <iostream>
using namespace std;

int main() {
    int a, b;             // 定义两个整数变量 a 和 b
    cin >> a >> b;        // 输入两个整数
    int sum = a + b;      // 计算 a + b 并存入 sum
    cout << sum << endl;  // 输出结果
    return 0;             // 结束
}

复制到编译器里,输入 3 5,就能看到输出 8。是不是很像你看完菜谱、再做菜一样?


7. 接下来你可以学什么?

  • 流程图:用图形把算法画出来,比文字更直观。
  • 伪代码:介于自然语言和编程语言之间,更像“半中文半程序”的描述。
  • 编程基础知识:学完自然语言描述,就去学 C++ 的变量、输入输出、判断和循环,你会发现写代码就像翻译自然语言一样简单。

记住:先学会“讲故事”(自然语言描述),再学会“演戏”(写代码)。你讲得清楚,代码就会写得正确。试试把今天老师讲的数学题步骤用自然语言写下来,再转成代码,你一定会越来越厉害!

例题精讲

1单选题

关于用自然语言描述算法,下列说法正确的是?

A自然语言描述可以随意使用模糊词汇,因为这样更贴近日常交流
B自然语言描述中的每一步都应该明确无歧义,不能有含糊其辞的表述
C自然语言描述必须使用英语,才能保证算法的通用性
D自然语言描述不需要考虑步骤顺序,只要把意思说明白即可
2单选题

以下哪个是自然语言描述算法时应该避免的做法?

A使用“然后”“接着”等连接词来表明步骤顺序
B使用“大概”“差不多”等含糊词语来描述操作
C按照正确的逻辑顺序一步步书写
D将每个步骤都用日常语言清晰表达
3判断题

自然语言描述算法时,使用“重复执行几次”这样的表述,必须明确重复的具体次数,否则会产生歧义。

4判断题

自然语言描述算法时,描述“如果x大于0,则输出x,否则输出-x”存在歧义,因为“否则”可能既指代x小于0的情况,又指代x等于0的情况。

5填空题
下面是一个用自然语言描述的“计算两个数的最大值”算法的步骤,请在横线处填上合适的词语使描述完整。
步骤1:输入两个数a和b。
步骤2:___,那么最大值是a;否则,最大值是b。
步骤3:输出最大值。