整体难度分析:2025 AP CSA北美卷
2025年AP CSA北美卷整体难度还行,MCQ变化不大(比如polymorphism与loop tracing等),FRQ相比之前会简单一些。两者相比,MCQ会比FRQ稍微难一些。
FRQ题目解析
Question 1
第一道FRQ考查Method and Control structure,需要考生根据题目给出的应用场景设计基本的代码逻辑。本次的背景是关于遛狗(dog-walking),题目给出两个Class,分别是DogWalkCompany和DogWalker,提供一些遛狗的规则来让考生进行DogWalker的两个methods的实现。
第一问要求编写walkDogs 方法,返回遛狗人在指定小时实际遛的狗的数量,并更新遛狗公司的可用狗数量。要求调用 numAvailableDogs 和 updateDogs两个方法,过程中再加一个if判断就可以。
第二问需要编写dogWalkShift方法,主要是计算轮班工资,通过 for 循环从 startHour 到 endHour 遍历每个小时,通过题目中提供的报酬计算规则进行计算即可。
第一题总体来说题目文字量大,理解起来略复杂,但难度中等,主要考查的内容也就是calling methods、 if else判断和基本的for循环,其中难点在于厘清题意,深刻理解method的含义和调用过程。
Question 2
第二道FRQ考察如何编写一个完整的类SignedText,主要考察Class的结构,以及字符串的操作(String Manipulation),如 indexOf() 和 substring()等方法。
SignedText 的constructor从题目中可以直接获得,是具有两个String参数的构造器。getSignature()方法也比较简单,该方法需要使用if判断首个参数是否等于空字符串,注意使用equals()方法;若不为空,使用substring()方法截取首字母即可。
addSignature()方法是本题的难点,在给定的参数字符串中,需要调用indexOf()找到Signature的位置,判断将其放在前面还是后面,或者确定是否不需要更改。然后用substring()创建一个新的字符串,并把签名拼接到正确的位置。
第二题总体来说难度中等,题型跟往年完全一样,给一张展示代码段的表格,以此定义一个完整的Class。熟练掌握类结构、熟悉基础的字符串操作方法,很容易解题。
Question 3
第三题考查ArrayList,对于一个数组列表进行操作,提供了三个Class,题目背景信息略多,但理解起来难度不大。
第一问要求考生编写Round 类构造函数,实现初始化 competitorList,注意competitorList的元素都是Competitor的对象,只需要对String数组进行遍历,确认name、rank两个参数,再去构建对应object再add competitorList即可,整体偏简单。
第二问编写 buildMatches() 方法,根据特定规则将 competitorList中的选手两两配对,注意创建 Match对象并返回一个包含这些比赛对象的 ArrayList,考察了Reverse ArrayList算法的变形,使用if判断元素数量的奇偶性,使用循环配对元素:第一个元素与最后一个元素匹配,第二个元素与倒数第二个元素匹配,依此类推。
第三题总体来说难度中等,题目类型都与之前相似,通过“对象套娃”的形式考察ArrayList的遍历和methods的调用。
Question 4
第四题FRQ与往常一样,考的是二维数组,通过Puzzle Game测试二维数组的知识点,比较其中的元素和它们的sum并循环二维数组的行与列。
第一问比较简单,考查了二维数组的构建,需要考生编写constructor来初始化二维数组puzzle,通过行优先或列优先遍历,使用Math.random()随机数方法进行数据填充即可。
第二问是实现clearPair()方法,进行row-major遍历,对目标值当前row或者以后的rows进行查找是否有符合规则的元素,如果有这样的pair,进行clear。需要注意的是可能出现多对的,只clear第一对并直接返回true即可。
第四题和往常的出题方式一样,难度也是中等,都是考查的是2D Array,考点还是在二维数组的遍历和二维数组元素的操作。
MCQ题目解析
Unit 1: Primitive Types
和以前的考试一样,这部分的考试内容很少,主要是在考试的开始阶段计算一些整数运算或者整数和小数的组合运算。
Unit 2: Using Objects
Object的题目比往年多一点。有几道题考察了String类和Math类(例如Math.random()),另外也考了询问如何在Object上调用方法,是否使用类名调用它,或者输入错误的参数。
Unit 3: Boolean Expressions and if Statements
本次考试中此部分在MCQ出现的题量适中,有难度不大的布尔问题,尤其是询问某个expression会打印什么,考察boolean expressions和DeMorgan’s Law,以及truth table(真值表),比如哪个计算结果总是为真。
Unit 4: Iteration
这是考试中题量比较多的部分,与往年类似。考试中有很多循环跟踪和不同的增量(increment)。考试中有很多嵌套循环(nested loops),并检查循环中的哪个选项与题目中的代码相同,需要使用trace table去做分析。
Unit 5: Writing Classes
这部分内容不多,和以前的考题类似,其中 2 个问题基于 2 个类,然后替换缺失的条件。
Unit 6 & 7: Arrays & ArrayLists
Array的问题比ArrayList少。有几个ArrayList remove问题,注意avoid skipping elements;有一些将element 通过add/set等方法,看最终的ArrayList变成什么;还有用一行代码替换另外一行代码打印出结果的数组列表的问题。
Unit 8 : 2D Array
今年的考试中二维数组的问题比往年多,也花费时间。有很多针对二维数组的循环过程进行trace,比如初始化二维数组后对其赋值,然后询问打印了什么。还有对特定raw和column追踪,看会发生什么变化。
Unit 9: Inheritance & Polymorphism
此部分考察内容和难度都正常,其中super、父类子类的关系、多态考察较多。例如多态对象初始化过程中打印的内容,以及是否调用override的methods。继承是面向对象编程中的重要概念,允许一个类继承另一个类的属性和方法。考生需要理解继承的原理,并能够设计具有继承关系的类。
Unit 10 : Recursion
和往常一样,这部分大多考的是基本的递归,难度不大,注意区分base case和recursive call;较难的有sum of digits的algorithm。
本文作者
AP备考福利:2025FRQ真题
TD整理了CB目前在官网最新更新的2025年北美卷的AP FRQ真题免费分享给大家,有需要的同学可以扫下方二维码,添加TD客服马甲,给马甲发送暗号「2025frq」即可领取~其他科目真题将随官网更新陆续放入分享链接中,敬请关注~