Mr.Mou @ ShiShi AP Center

AP CSP

AP CSP 是一门计算机科学导论课程,重点不是只学某一种编程语言,而是学习计算机科学的核心思想:如何设计程序、处理数据、理解互联网和计算系统,以及分析计算技术对社会的影响。


AP CSP 考试与课程任务

2026年考试日期5月21日;Create Task 最终提交时间 4月30日。

本课程最后需要完成什么?

AP CSP 最后主要有两件事:

1. 提交 Create Performance Task

Create Performance Task 是 AP CSP 考试的一部分。学生需要完成一个自己设计和实现的程序,并通过 AP Digital Portfolio 提交。

需要提交的内容包括:

注意:

2. 参加 End-of-Course AP Exam

正式 AP 考试包括两个部分:

Section 内容 数量 时间 占比
Section I Multiple-Choice Questions 70 题 120 分钟 70%
Section II Create Performance Task + Written Response Questions 2 题 / 4 个 prompts 60 分钟 written response 30%

Section II 的 written response 会基于你自己提交的 Create Performance Task。考试时会提供你的 Personalized Project Reference,你需要根据自己的程序回答问题。


Core Concepts / 核心知识点

下面的 Big Ideas、topic names 和 MCQ 权重按照 College Board CED 整理。中文翻译是辅助理解,考试中请以英文术语为准。


Written Response / FRQ 是什么?

新版 AP CSP 的 Written Response 不再提前写好提交,而是在正式考试中完成。

考试时,你会根据自己的 Create Performance Task 回答问题。你不能临场换项目,也不能写一个和自己代码无关的通用答案。

Section II 基本形式


FRQ 评分重点

College Board 的评分不是看你写得长不长,而是看你的回答是否准确对应自己的程序。

Course Project: Video

视频需要展示程序正在运行,并且能看出:

不要只交截图或故事板。视频必须展示程序实际运行。

Course Project: Program Requirements

你的程序代码中必须包含:

注意:


2025 Written Response Set 1 题型方向

下面按照 2025 Set 1 的题型结构整理。考试时题目可能变化,但核心考查方向类似:你要能解释自己的 output、selection、procedure、logic error 和 list。

Written Response 1: Program Design, Function, and Purpose

原题方向

  1. Identify an example output of your program. Explain how this output shows an aspect of your program’s functionality. 题目要求学生说明程序的一个输出,并解释这个输出如何体现程序的功能。

得分关键

你需要做到两件事:

  1. 明确指出一个合理的程序输出。
  2. 解释这个输出体现了程序的哪个功能。

答题方向

好的回答通常包含:

不要只写:

My program outputs the result.

这种回答太空。你必须说明这个 output 和 program functionality 之间的关系。


Written Response 2A: Algorithm Development

  1. Refer to your Personalized Project Reference when answering this question. A. Consider the first selection statement included in the Procedure section of your Personalized Project Reference. Identify the Boolean expression in this selection statement. Identify a specific value or set of values that will cause this expression to evaluate to true. Explain why the specified value(s) will cause the expression to evaluate to true. B. Consider the procedure included in part (i) of the Procedure section of your Personalized Project Reference. Suppose another programmer modifies the code within this procedure. Describe a modification the other programmer could make that would cause this procedure to have a logic error. Describe how the behavior of this procedure would change because of the error. C. Consider the list included in the List section of your Personalized Project Reference. Suppose another programmer adds several new elements to the end of the list. Explain how the code segment in part (ii) of the List section would need to be modified to account for the additional elements. If no changes to the code segment are necessary, explain why this is the case for your program.

原题方向

题目要求学生查看 Personalized Project Reference 中 Procedure 部分的第一个 selection statement,指出其中的 Boolean expression,并说明什么具体值会让这个 Boolean expression 为 true。

得分关键

你需要做到三件事:

  1. 找到第一个 selection statement。
  2. 指出 Boolean expression。
  3. 给出具体的值,并解释为什么这些值会让条件为 true。

答题方向

好的回答通常包含:

不要只写:

The condition is true when the user gives the correct input.

这太笼统。你需要写出具体值,并解释条件判断过程。


Written Response 2B: Errors and Testing

原题方向

题目要求学生描述另一个程序员如果修改 procedure,可能造成什么 logic error,并解释这个错误会如何改变 procedure 的行为。

得分关键

你需要做到两件事:

  1. 描述一个具体的代码修改。
  2. 说明这个修改会导致程序行为怎样出错。

答题方向

好的回答通常包含:

不要只写:

The program will not work.

这不够。你必须说明“怎么改错了”和“错了之后程序会怎样表现”。


Written Response 2C: Data and Procedural Abstraction

原题方向

题目要求学生查看 List 部分的 list。如果另一个程序员在 list 末尾增加几个新元素,学生需要解释相关代码是否需要修改;如果需要,说明怎么改;如果不需要,说明为什么不需要。

得分关键

你需要做到其中一种:

  1. 解释代码需要如何修改,才能处理新增的 list elements。
  2. 或者解释为什么原代码不需要修改,仍然可以处理新增元素。

答题方向

好的回答通常包含:

不要只写:

No changes are needed.

如果说不需要改,必须解释为什么。


FRQ 准备清单

在做 Create Task 时,不能只想着“程序能跑”。你要确保自己之后能解释它。

你的程序必须能解释这些问题

最重要的提醒

FRQ 不是背模板。FRQ 的核心是:

用自己的代码,解释自己的程序。

如果你的代码太简单、list 没有实际作用、procedure 只是装饰、selection 和 iteration 不影响结果,那么后面的 written response 会很难得分。


CB 官方样题

Assume that the list originalList contains integer values and that the list newList is initially empty. The following code segment is intended to copy all even numbers from originalList to newList so that the numbers in newList appear in the same relative order as in originalList.

Line 1: FOR EACH number IN originalList
Line 2: {
Line 3:   IF (number MOD 2 = 0)
Line 4:   {
Line 5:       INSERT (newList, 1, number)
Line 6:   }
Line 7: }

Which of the following changes, if any, can be made so that the code segment works as intended?

(A) Changing line 1 to FOR EACH number IN newList (B) Changing line 3 to IF (number MOD 2 = 1) (C) Changing line 5 to APPEND (newList, number) (D) No change is needed; the code segment is correct as is.

答案

C

解释

原代码使用 INSERT(newList, 1, number),每次都会把新的偶数插入到列表最前面,导致顺序被反过来。

如果要保持和 originalList 中一样的相对顺序,应该使用:

APPEND(newList, number)

这样每个新的偶数都会被加到 newList 的末尾。


复习资源

官方资源

2023 AP Exam On-Demand Review

以下资源是旧版 2023 复习视频,可以作为额外练习参考,但考试结构请以新版 College Board 说明为准。