GESP C++ 3 级 · 知识点

算法的概念与描述

GESP C++ 三级要求理解算法的基本概念与特征,能用自然语言、流程图和伪代码三种方式描述同一算法。考试重点不是背定义,而是判断一段描述是否严谨、是否真的能一步步执行完。

对应知识域:算法的概念与描述(自然语言、流程图、伪代码)相关真题 4 套

本页为本站原创整理,例题与解析均由本站编写,不取自任何题库原题;考试范围以 CCF 官方公布为准,本平台不是 GESP 官方平台。

考纲要求

  • 理解算法是解决一类问题的明确步骤序列,具有有穷性、确定性、可行性、零个或多个输入、至少一个输出等特征。
  • 能用自然语言按步骤描述算法,做到每一步都无歧义。
  • 能把同一算法翻译成流程图或伪代码,并保持步骤一一对应。
  • 理解对同一问题可以有不同的算法,需要从正确性、步骤数量和实现难度上比较。

典型题型

  • 判断一段步骤描述是否满足算法的特征。
  • 把自然语言描述翻译成伪代码。
  • 比较两种算法在给定输入下的执行步骤数。

常见错误

  • 把算法的有穷性理解成程序必须很快结束。有穷性指步骤数量有限,而不是时间很短。
  • 描述中出现「适当处理」这类含糊说法,违反确定性,别人无法照着执行。
  • 认为步骤越少算法越好,忽略正确性和可读性。
  • 把流程图的具体符号当成算法本身,算法是思路,流程图只是表达方式之一。

深入理解

算法有五个特征,缺一不可

  • 有穷性:执行有限步之后必须结束,不能无限循环。
  • 确定性:每一步的含义唯一,同样的输入只能得到同样的输出,不能出现「可能这样也可能那样」。
  • 可行性:每一步都能用现有操作完成,不能写「求出所有质数」这种没有具体步骤的话。
  • 输入:有零个或多个输入。
  • 输出:至少有一个输出,没有输出的过程不算算法。

判断题常拿「确定性」和「有穷性」做文章:写「随机取一个数」违反确定性,写「重复直到满足条件」若没给出终止条件则违反有穷性。算法不等于程序——算法是思路,程序是算法的某种语言实现,同一个算法可以写出多个程序。

三种描述方式各有用途

自然语言最容易写也最容易歧义,比如「把最大的数放到第一个位置」就有多种理解。流程图直观,分支和循环一眼可见,但复杂算法画出来会非常拥挤。伪代码介于两者之间,用接近编程语言的结构(if、for、赋值)但不受语法约束,是竞赛和教材里最常用的方式。

写伪代码时保持三条:同一个变量名前后一致、循环要写清初值和终止条件、输出写明确。不需要纠结分号或括号,考官看的是逻辑是否完整。

判断一段描述能不能算算法

给出一段文字让判断「这是不是算法」,按五个特征逐条核对即可。最常见的不合格情形是缺少终止条件,例如「不断读入数字,直到读到负数为止」——如果没说明读完所有数据后的处理,就不完整。另一种是把结果当成条件,例如「当数组已经有序时停止排序」,如果排序过程本身不保证会推进到有序,就可能永远停不下来。

自编例题

用伪代码描述求最大值

输入 n 个整数,输出其中的最大值。请用伪代码写出算法步骤。

读取 n 和第一个数 x,令 best = x
重复 n-1 次:
    读取下一个数 x
    如果 x > best,则令 best = x
输出 best

这个算法先假定第一个数是最大值,然后逐个比较,遇到更大的就更新。整个算法只遍历一次,步骤数量与 n 成正比。写伪代码时不必纠结具体语法,但要保证每一步都明确:读什么、比较什么、什么时候更新、最后输出什么。如果把同一思路画成流程图,重复部分用一个带回边的判断框表示。伪代码和流程图都是算法的表达,考试中按题目要求选择即可。

相关真题

这块内容在整条路线里的位置:GESP C++ 3 级备考路径。

READY TO START

开始练习

先做一套本级别测评,报告会指出哪些知识点需要重点补;再回到本页对照考纲要求逐条核对,把不确定的条目记下来集中练。

常见问题

算法和程序有什么区别?

算法是解决问题的步骤描述,与语言无关;程序是算法用某种编程语言实现后的产物,还要考虑语法和运行环境。

算法必须有输入吗?

不一定。算法可以有零个或多个输入,但至少要有一个输出,否则无法得到结果。

伪代码要写得多详细?

写到每一步都能被别人照着执行即可,不必写具体语法。关键是分支条件、循环边界和更新步骤不能含糊。

本级别其他知识点

官方依据