AP计算机科学考试复习建议
作者:郎咸蒙 来源:新东方国际教育北京学校 发布时间:2022-04-24
本文为大家梳理下AP计算机科学考试的重难点、易错点,常见问题以及AP计算机科学备考建议,然后系统的梳理下知识点。
虽然考试只剩下两周,但是只要大家认真复习,掌握这些重难点、易错点,规避常见问题,考 5 分的可能性还是很大的。希望同学们坚持到最后一刻,加油!
在系统梳理知识点前,先来整体介绍一下计算机A今年的考试信息:
· 正常考试时间:5月4日,星期三,下午12:50(当地时间)
· 其他考区补考时间(香港/韩国/新加坡):5月18日,星期三,上午8点(当地时间)
· 考试时长:3hrs,选择题与简答题分配如下图:
▼ 计算机科学A知识拓扑图总览
01 AP计算机科学考试知识重难点、易错点
计算机科学考试的重点无疑是面向对象相关的知识点,也就是类的撰写。选择题目有 1/3 的题目,简答题都是在考察类相关的知识;循环的嵌套以及数组、列表、二维数组的操作也是考察的重点。
随机数的使用、递归、继承、静态属性和方法、递归是比较难的点;同时,对于很多同学来说,把题干中给的情境翻译成类和方法往往也是比较困难的;参数的传递也是比较难同时也比较重要的点,部分简答题中要求不能修改参数的时候考察的就是参数的传递。
需要注意的是,简答题书写方法的时候,不要改变方法参数列表。列表的题目虽然经常考,但是套路比较固定,只要能够读懂题意,往往就可以做对。但是字符串的题目,涉及到字符串的匹配,学生由于练习比较少,考察起来就比较容易出错。
AP CSA 考的是编程基础知识,采用了 Java 编程语言,考试过程中主要考察面向对象的编程范式,也就是面向对象的编程方法。面向对象只是组织代码的一种方式,还有面向命令、面向过程、声明式编程等不同的范式。
02 AP计算机科学考试常见问题
英语
托福词汇不够
读不懂题,耐心读题
调试
调试代码是找出代码中的错误和问题,使得代码可以正常运行。其实写代码出错是非常正常的,重要的是代码出错时能够找出问题所在。所以程序员也经常调侃自己在“写 bug”。要想代码永远没有 bug,最好的办法就是不写代码。就像人经常会犯错,但是犯错之后知道怎么改正比较重要。
要能够掌握利用 IDE 调试的能力,大部分编辑器都给出了强大的调试能力,当我们遇到一些判断代码执行结果的选择题时,可以尝试在 IDE 中编写代码,并观察执行结果,然后利用 IDE 提供的调试功能单步执行代码,观察代码执行过程。
这里推荐 IDEA 编辑器,这也是当前业界主流的 Java 编辑器,Ecllispse 已经成为历史了。
03 AP计算机科学冲刺建议
刷题
刷题类似于泛读,适当的注重速度,选择题 3 分钟、简答题每小问 15 分钟没有思路的话,可以参考答案和解析。重点是查漏补缺。
考试之前,最好每天都能花时间写代码,保持手感。每天不用花太长时间,30 到 40 分钟足以。
部分学校的老师把 CB 题库的题目都打印出来给学生练习(比如八十中学),如果这些题目都“真的”掌握了,那么考试一般是不会有问题的。
巴朗练习题难度较大,请同学们务必注意。
精练
对于 FRQ,很容易存在眼高手低的问题,所以在老师讲解或者看了答案之后,务必要再次重新做一遍,不要看答案,反复,直到自己彻底理解。对于每道题目,要搞清楚这道题考察的知识点是什么,对应的知识点我有没有彻底掌握?其他年份有没有考察这个知识点,是怎么考察的?只有这样才会把题目的作用发挥到最大。
编程是非常灵活的符号语言,所以不要背代码,但是整理一些自己常用的代码片段是非常有必要的:比如 ArrayList 删除元素的时候,容易跳过,所以要你许删除;比如大题中固定会出现的一个“容器”类中有一个列表 ArrayList 管理其他物体类。
书写
书写是容易被忽视的部分。书写决定了你卷面的整洁程度。所以考前这三周里,大家务必注意自己的书写。
比如上述手写代码结构清晰,同时与简答题示例代码的格式一致,手写体好看且近似于等宽字体,看起来非常舒服和流程;同时字体本身也给人一种非常洒脱的感觉。这位同学是使用 ipad 手写的代码,用 ipad 手写代码的好处是便于修改和整理。
再比如这个字体,是非常娟秀的字体,部分涂改但不影响整体的美观程度。如果我是考官,我心里是倾向于给高分的。因为再客观的评分标准也是由人来执行的。
在教学过程中,上面的代码已然算是不错的了,还有更加潦草的代码。如果因为书写的缘故丢分,那么就太遗憾了,恳请同学们注意自己的书写。
编写完整的类
对于 FRQ,尽管只是要求写部分代码,但是我们一般情况下是要求写出完整的代码的,并且要测试题干中给出的示例,确保代码没有问题。只有这样才能够真正的理解代码。
读题
计算机科学考试的代码往往并不复杂,这个考试的目的也不是考察复杂的算法,而是考察你对代码最基本的理解,对一些边缘数据的理解。
所以大家考试的时候,建议答题之前至少把整个题目认真的读一遍,因为有时候后面题目的案例对前面的题目也是有启发作用的,尤其不要放过代码中的注释。
很多同学读题的时候,不能从文本中提取出有效的信息。CSA 的题干中,没有废话,所以一定要精读,不要放过每句话。
对于大部分同学,如果做到了以上几点,冲 4 分还是很有希望的;对于基础比较好的同学,则 5 分把握比较大。
04 AP计算机科学考试知识点梳理
接下来是重量级干货,所有你需要掌握的知识点全在这里了。CSA知识点比较多而细,所以篇幅可能会有些长,请一定耐心好好逐一过完,收藏起来,刷题中遇到不熟悉的知识点,随时回来查看复习。
数据类型
数据类型这里重点是理解整数和小数之间的类型转换。
基本类型的数据是按照值传递的;引用类型传递的是地址。
数据类型的转换虽然不难,但是往往隐藏在简答题中,比如 APLine 题、Hailstone 题、 StepTracker 题都隐含的考察类整数到小数的转换,一不留神就容易出错。
这里的自定义类型其实就是类的定义,类的定义是一块比较大的内容放到后面讲。
表达式和语句
表达式由操作符和操作数(值)组成,也可以只包含操作数。包含操作符和操作数的表达式是复合表达式。一个表达式会被求值,所以一个表达式可以作为另外一个表达式的操作数。有返回值的方法调用可以看作是方法调用表达式,因为会返回值,所以对于方法的调用也可以是表达式的组成部分。表达式或者操作数都可以作为一个方法的参数。
2 + 3;// 复合表达式
Math.random(); // 有返回值的函数调用
2 + Math.abs(2); // 函数调用作为 + 的操作数
2 + (2 * 3) // (2 * 3)是加法的操作数
// 运算符和操作符是一个意思
上图是考试中常见的运算符,其中 / 是整数除法,所以 5/2 的结果是 2;注意强制类型的转换的优先级比括号低,比乘除法高,所以 (int)Math.random()*100不能得到 0 到 100 点随机整数,结果始终是 0 。
注意一个比较容易犯错的点整数和字符串的运算:
public static void main(String[] args)
{
System.out.println(1 + 1 + "2"); // 22
System.out.println("1" + 1 + 2); // 112
}
第一行结果是 "22" ,因为两个整数先进行加法运算,然后在跟字符串一起运算;而后面是字符串 "1" 和整数运算,整数被转换为字符串,得到 "11" 然后进行后续的计算。
| 等效表达式
等效表达式是考察的重点和难点,比较容易出错。要求学生对于德摩根定律和逻辑运算的特性非常熟悉才能做对,一般在选择题中考察。
同时,注意对增强运算符的考察:
语句
由分号结尾的是语句。
方法
方法的考察除了考察代码追踪能力之外,还会结合方法的参数考察按值传递参数和按引用传递参数。
重载的含义是方法具有相同的方法名,但是参数的数量或者类型不同。考察形式一般是类中方法的重载以及字符串 substring 方法、ArrayList 的 add 方法的重载。
控制结构
任何程序都能用顺序、选择和循环三种形式来表达。
选择结构
选择结构主要考察两个 if 语句的并列;if-else 语句以及等效的并列的 if 语句;方法中 if 语句与 return 语句的组合等。
循环结构
for 循环的嵌套是考察的重点,选择题中主要考察预测代码输出结果;主观题中二维数组相关的题目同时也在考察学生对于嵌套循环的掌握。
for-each 循环,或者说增强 for 循环也是考察的重点。需要注意的是 for 循环中的变量已经是数组的元素了,所以不能作为索引。
上图中的题目考察二维数组的嵌套。
while 循环会考察循环成立的条件以及循环的输出。对于循环的题目要明确循环的初始值、步长和终值,是包含终点还是不包含,明确这些才不容易出错。
类的编写和使用
| 类的基本概念
选择题中主要考察继承和多态原则,需要学生对于动态绑定这一难点有比较透彻的掌握。继承相关的知识点比较抽象,需要同学们在复习中重点关注。
上面的题目中考察了类的继承、子类调用父类的方法、子类替换父类、动态绑定等知识点。
上题中考察的编译错误,如果把 message 从 A 类中拿走,A 类中不存在 message 方法,则不能调用。
选择题中,一般考察类定义、类的实例化以及方法的调用等;涉及到继承等知识点也多在选择题中考察;简答题中只有 2019 年涉及到了编写子类方法等题目,所以要理解 super 方法。简答题的第 2 题一般会考察编写完整的类;趋势的题目会要求补全方法。
简答题除了第 2 题中,一般不会要求完全独立的编写类。其他方法一般会给出方法的注释和方法头,这是非常有用的信息,对于简答题要充分观察给出的代码示例,配合描述推测类的实现方式。
| 静态方法
静态方法往往比较难以理解:因为静态方法不属于对象,而是属于类。在创建实例之前,静态属性已经存在了。实例化对象时,静态属性的方法不会重置。
| 继承
一般情况下,继承以选择题的形式考察。关于继承,需要明确以下几点:
构造方法不能继承
private 属性不能继承
private 方法不能继承
public 方法和属性可以继承
子类可以通过 super 方法父类的构造方法
子类可以通过 super 方法父类的 public 方法
类不能调用自己没有定义的方法
所以子类不能调用父类没有的方法
数组和列表
数组和 ArrayList 相关的题目容易出现索引越界的问题,所以在分析代码、编写代码时要注意索引取值范围。主观题中,如果要动态增删元素,那么需要使用 ArrayList 。
列表 set 方法返回的是被修改的值;remove 方法返回的是被修改的值。理解了这一点,才能够做对上述题目。
在单独考察数组的时候,题目往往有一定的难度,并且比较容易出错。上图是 2011 年主观题第 1 题,这道题目的难度比较大。
二维数组
二维数组在选择题和主观题中都会出现,数组的行数和列数是比较容易出错的点;选择题中会考察二维数组的遍历,考察 for 循环嵌套以及增强 for 循环等,有时候也会于函数的调用相结合。
递归
函数自己调用自己称之为递归。一般在选择题中考察递归,递归是在方法内部调用自己的方法。需要注意的是递归必须要有结束条件,也就是 base case 和递归条件。
遇到递归的题目,一定要找出递归有哪些 base case 和 recursion case。递归分为两种:先执行后递归和先递归后执行。一种特殊情况是,先递归后执行,但是有 else 语句。
字符串
字符串在循环、递归的考察中占有比较大的比重;简答题中也会出现字符串处理的题目,这些需要注意的。
字符串的比较是一个比较迷惑的点,在考试中,大家记住比较两个字符串是否相等统一用 equals方法就好了。
2016 年主观题第 4 题是近年来关于数组的题目难度比较大的题目,需要同学重点练习。
同年,主观题第 2 题 b 问也是难度比较大的关于字符串的题目。这两道都涉及到了字符串匹配算法,需要同学们注意。
如果有课程需求的同学,欢迎在页面下方留下您的信息预约专业教师了解CSA考前冲刺班和一对一课程!
新东方版权所有,转载请注明:新东方国际教育北京学校
(责任编辑:admin)