伪代码(pseudocode)学习总结
背景: CSP 2020 入门级第一轮 🈶️相关伪代码的阅读。有些学生,反馈需要讲解一下。现伪代码(pseudocode)学习总结如下:
伪代码学习总结
1. 什么是伪代码
-
伪代码(Pseudocode) 是一种 算法描述语言。
-
它既不同于自然语言(太模糊),也不是某种具体编程语言(太依赖语法)。
-
使用伪代码的目的:
- 使被描述的算法可以容易地翻译成任何一种编程语言(如 Pascal, C, Java, Python 等);
- 要求 结构清晰、可读性好、简洁明了;
- 类似自然语言,强调逻辑而非语法。
2. 常见伪代码语法要点
-
赋值:
x ← 1(读作“x 赋值为 1”)
-
for 循环:
for i ← 0 to 10 do XXXXXfor后跟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 xxxxelseif必须合并写作一个单词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>& L) {
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 <iostream>
#include <vector>
using namespace std;
// 递归函数计算最小值
double XYZ(vector<double> A, int n) {
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<double> A = {3, 1, 4, 1, 5, 9, 2, 6};
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)}")

浙公网安备 33010602011771号