伪代码(pseudocode)学习总结

伪代码(pseudocode)学习总结

背景: 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& 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

#include

using namespace std;

// 递归函数计算最小值

double XYZ(vector 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 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)}")

相关数据

fi是哪个国家的简称成熟仔2019-05-20分享
beat365体育亚洲版登录

fi是哪个国家的简称成熟仔2019-05-20分享

⏳ 07-07 💖 19
前女友曝与陈冠希交往史:他同时有20个女友
365bet比分直播

前女友曝与陈冠希交往史:他同时有20个女友

⏳ 09-13 💖 557