背景: CSP 2020 入门级第一轮 🈶️相关伪代码的阅读。有些学生,反馈需要讲解一下。现伪代码(pseudocode)学习总结如下:
伪代码学习总结
1. 什么是伪代码
伪代码(Pseudocode) 是一种 算法描述语言。
它既不同于自然语言(太模糊),也不是某种具体编程语言(太依赖语法)。
使用伪代码的目的:
使被描述的算法可以容易地翻译成任何一种编程语言(如 Pascal, C, Java, Python 等);
要求 结构清晰、可读性好、简洁明了;
类似自然语言,强调逻辑而非语法。
2. 常见伪代码语法要点
赋值:
x ← 1
(读作“x 赋值为 1”)
for 循环:
for i ← 0 to 10 do
XXXXX
for 后跟 do
不写括号
循环体缩进
while 循环:
while time < 10 do
xxxxx
if 条件:
if i = 10 then
xxxx
else
xxxx
多分支 if:
if i = 10 then
xxxx
elseif i = 9 then
xxxx
yyyy
else
xxxx
elseif 必须合并写作一个单词
then 必须出现在 if 或 elseif 后面
else 对齐
缩进与对齐:
同一嵌套等级的语句要对齐。
do 后必须紧跟缩进部分。
变量声明:
通常不显式写出来,但要在注释中说明。
函数伪代码:
search(A, name) // 参数类型可以不给,但要在注释中说明
语句编号:
写完的伪代码,通常每行前要加上序号,便于引用。
3. 示例:冒泡排序伪代码
输入:数组 L,整数 n。输出:按非递减顺序排序的 L。
1. FLAG ← n // 标记最后一次交换位置
2. while FLAG > 1 do
3. k ← FLAG - 1
4. FLAG ← 1
5. for j ← 1 to k do
6. if L(j) > L(j+1) then
7. L(j) ↔ L(j+1) // 交换
8. FLAG ← j
4. 示例:翻译成实际语言
C++ 版本
void BubbleSort(vector
int n = L.size();
int FLAG = n;
while (FLAG > 1) {
int k = FLAG - 1;
FLAG = 1;
for (int j = 0; j < k; j++) {
if (L[j] > L[j+1]) {
swap(L[j], L[j+1]);
FLAG = j + 1;
}
}
}
}
Python 版本
def BubbleSort(L):
n = len(L)
FLAG = n
while FLAG > 1:
k = FLAG - 1
FLAG = 1
for j in range(k):
if L[j] > L[j+1]:
L[j], L[j+1] = L[j+1], L[j]
FLAG = j + 1
2020年实例与学习解读:
A 是 n 个实数的数组,考虑下面的递归算法:
XYZ (A[1..n])
1. if n=1 then return A[1]
2. else temp ← XYZ (A[1..n-1])
3. if temp < A[n]
4. then return temp
5. else return A[n]
请问算法 XYZ 的输出是什么?()。
A. A 数组的平均
B. A 数组的最小值
C. A 数组的中值
D. A 数组的最大值
好的,我们来详细讲解这个递归算法,并给出对应的C++和Python代码实现。
伪代码语法解释
伪代码中的关键语法:
A[1..n] 表示数组A从索引1到n(注意:伪代码通常从1开始索引)
← 表示赋值(相当于编程中的=)
if...then...else 是条件语句
XYZ (A[1..n-1]) 是递归调用
算法功能分析
该算法递归地计算数组的最小值:
基准情况:当数组只有一个元素时,该元素就是最小值
递归情况:先计算前n-1个元素的最小值,然后与第n个元素比较,返回较小的值
C++ 代码实现
#include
#include
using namespace std;
// 递归函数计算最小值
double XYZ(vector
if (n == 1) {
return A[0]; // C++数组从0开始索引
} else {
double temp = XYZ(A, n - 1);
if (temp < A[n - 1]) {
return temp;
} else {
return A[n - 1];
}
}
}
int main() {
vector
int n = A.size();
double result = XYZ(A, n);
cout << "数组的最小值是: " << result << endl;
return 0;
}
注意:由于C++数组从0开始索引,所以需要调整伪代码中的索引位置。
Python 代码实现
def XYZ(A, n):
"""
递归计算数组最小值
:param A: 数组
:param n: 数组长度
:return: 数组中的最小值
"""
if n == 1:
return A[0] # Python数组从0开始索引
else:
temp = XYZ(A, n - 1) # 递归计算前n-1个元素的最小值
if temp < A[n - 1]:
return temp
else:
return A[n - 1]
# 测试代码
if __name__ == "__main__":
A = [3, 1, 4, 1, 5, 9, 2, 6]
n = len(A)
result = XYZ(A, n)
print(f"数组的最小值是: {result}")
# 验证结果
print(f"Python内置min函数验证: {min(A)}")