算法与编程 (Algorithms and Programming) — AP CS Principles CSP 学习指南
适合谁:AP CS Principles 参加 AP Computer Science Principles 的考生。
覆盖内容:覆盖变量与类型、数学与布尔表达式、算法与程序流、迭代/条件语句/列表、过程抽象五大核心子主题。
前置知识:无需前置 CS 知识。
关于练习题:下文「练习题」一节的所有题目均为我们按 AP CS Principles 风格编写的原创题目 (original problems),仅用于教学。它们不是 College Board 真题的复制,措辞、数值或语境可能不同。请把它们当作练手用;评分细则请对照 College Board 官方 mark scheme。
1. 什么是算法与编程?
算法 (algorithm) 是解决特定问题的有限、有序、可执行的步骤集合,编程 (programming) 则是用计算机可理解的规则(伪代码或编程语言)实现算法的过程。本模块在AP CS Principles考纲中占比20%-30%,同时覆盖选择题和占总分30%的创作任务 (Create Performance Task),是整个科目的核心基础。
2. 变量与类型 (Variables and types)
变量 (variable) 是存储数据的命名容器,你可以把它理解为一个带标签的盒子,用来存放运算过程中需要的数值、文本等信息。每个变量对应的数据类型 (data type) 决定了数据的存储方式和可执行的运算,AP CSP要求掌握4种基础类型:
- 整数 (integer):不带小数的正负整数,例如
92、-3 - 浮点数 (float):带小数的数值,例如
87.5、-0.3 - 字符串 (string):由字符组成的文本,需要用引号包裹,例如
"Zhang San" - 布尔值 (Boolean):只有两个取值
True(真)和False(假)
AP CSP统一使用←作为赋值符号,示例:你要存储学生的考试信息,可以写:
student_name ← "Li Ming"
math_score ← 89.5
is_pass ← True
考点提示:考试不要求你掌握特定编程语言的语法,只需要识别伪代码的赋值逻辑即可。
3. 数学与布尔表达式 (Mathematical and Boolean expressions)
数学表达式由数值、变量和算术运算符组成,返回数值结果。AP CSP要求掌握的运算符优先级从高到低为:括号 > 乘法*、除法/、模运算 (modulo)MOD > 加法+、减法-。其中模运算MOD用来计算两个数相除的余数,例如7 MOD 2 = 1,常用来判断奇偶性、整除性。
布尔表达式由变量、比较运算符和逻辑运算符组成,返回True或False:
- 比较运算符:等于
=、不等于≠、大于>、小于<、大于等于≥、小于等于≤ - 逻辑运算符优先级从高到低:
NOT(非,取反) >AND(与,所有条件为真才返回真) >OR(或,任意条件为真就返回真)
示例:判断学生是否满足评优条件的布尔表达式为:math_score ≥ 90 AND is_attendance_full = True,只有两个条件同时满足时才返回True。
4. 算法与程序流 (Algorithms and program flow)
所有算法都可以拆解为三种基础程序流结构:
- 顺序结构:代码按书写顺序从上到下依次执行,是最基础的结构
- 选择结构:根据布尔表达式的结果,选择执行不同的代码分支,对应
IF/ELSE语句 - 循环结构:重复执行某一段代码,直到满足终止条件为止
示例:求两个数中较大值的算法步骤为:
- 输入两个数值
a、b - 若
a > b则输出a,否则输出b - 算法结束
考点提示:合格的算法必须满足有限性要求,必须能在有限步骤内结束,不能出现死循环。
5. 迭代、条件语句与列表 (Iteration, conditionals, lists)
迭代 (iteration) 就是循环结构的另一种称呼,条件语句 (conditional) 就是实现选择结构的IF/ELSE语句,列表 (list) 是存储多个有序数据的容器,你可以把它理解为一排带编号的盒子,每个盒子可以放任意类型的数据。
AP CSP伪代码中列表的索引从1开始(注意不要和Python等语言的0开头索引混淆),遍历列表常用FOR EACH循环,示例:统计班级中数学及格的人数:
pass_count ← 0
math_scores ← [85, 59, 92, 70, 48, 96]
FOR EACH score IN math_scores:
IF score ≥ 60:
pass_count ← pass_count + 1
DISPLAY pass_count
运行后输出结果为4,即共有4名同学及格。
6. 过程抽象 (Procedural abstraction)
过程 (procedure,也叫函数function) 是将实现特定功能的代码封装起来的命名代码块,你可以在需要的地方重复调用它。过程抽象 (procedural abstraction) 是指调用过程时,你只需要知道它的输入参数和输出结果,不需要了解它的内部实现逻辑。
示例:定义一个计算平方值的过程:
PROCEDURE square(x):
RETURN x * x
调用square(5)就会返回25,你不需要知道内部是乘法实现还是加法累加实现,只要输入数值就能得到平方结果。
考点提示:过程抽象的优势是减少重复代码、提高复用性、降低调试难度,是选择题的高频考点。
7. 常见陷阱 (Common Pitfalls)
- 错误做法:把赋值符号
←和等于判断符号=搞混,写x = 5作为赋值语句。原因:受Python等常见编程语言的语法习惯影响。正确做法:AP CSP伪代码中赋值必须用←,只有判断两个值是否相等时才用=。 - 错误做法:列表索引从0开始计算,例如取列表
[10,20,30]的第一个元素写scores[0]。原因:日常学习Python等语言的惯性思维。正确做法:AP官方伪代码的列表索引从1开始,第一个元素是scores[1]。 - 错误做法:逻辑运算优先级搞反,例如
a > 5 OR b < 3 AND c = True,误以为先算OR再算AND。原因:忽略运算符优先级规则。正确做法:逻辑运算优先级为NOT > AND > OR,不确定时可以加括号明确运算顺序。 - 错误做法:循环中忘记更新计数器导致死循环,例如写
REPEAT UNTIL i > 10但循环体内没有i ← i + 1的更新语句。原因:写代码时遗漏循环要素。正确做法:写循环前确认三个要素:计数器初始值、终止条件、计数器更新步长。
8. 练习题 (AP CSP 风格)
题目1
下列伪代码运行后输出的结果是?
a ← 12
b ← 5
c ← a MOD b
d ← a / b
DISPLAY c + d
解答:步骤1:a MOD b计算12除以5的余数,结果为2,因此c=2;步骤2:a / b计算12除以5的商,结果为;步骤3:两者相加得到,即最终输出为4.4。
题目2
下列伪代码的功能是统计列表中奇数的个数,请问空缺处应填入的表达式是?
count ← 0
nums ← [3,6,7,12,15,18,19]
FOR EACH num IN nums:
IF __________:
count ← count + 1
DISPLAY count
解答:奇数的判断规则是除以2的余数为1,对应伪代码表达式为num MOD 2 = 1,填入后运行得到结果为4,符合预期。
题目3
下列关于过程抽象的说法,错误的是? A) 过程抽象可以减少重复代码,提高复用性 B) 调用过程时必须知道过程内部的实现细节 C) 过程可以接收多个输入参数,也可以返回结果 D) 拆分复杂问题为多个小过程可以降低调试难度 解答:答案为B。过程抽象的核心优势就是封装内部实现逻辑,调用者只需要知道输入输出规则即可,不需要了解内部代码细节,因此B选项错误。
9. 速查表 (Quick Reference Cheatsheet)
| 知识点 | 核心规则 |
|---|---|
| 变量赋值 | 伪代码用变量 ← 值,等于号=仅用于相等判断 |
| 算术运算符 | 优先级:括号 > *、/、MOD > +、-,MOD返回两数相除余数 |
| 逻辑运算符 | 优先级:NOT > AND > OR,返回True/False |
| 列表索引 | AP伪代码中列表第一个元素索引为1 |
| 循环结构 | FOR EACH用于遍历列表,REPEAT UNTIL满足条件时停止 |
| 过程抽象 | 封装功能、复用代码,调用无需知道内部实现 |
10. 接下来怎么学
本模块是AP CSP的核心基础,后续的大数据分析、网络安全、编程创作任务(Create Performance Task)都需要用到本章的变量操作、循环逻辑、过程抽象等知识,掌握好本章内容可以为后续占比30%的创作任务打下坚实基础,大幅降低创作任务的完成难度。
如果你在刷题过程中遇到任何算法与编程相关的疑问,都可以随时到小欧主页提问,我们会提供针对性的解答和备考建议。