编程基础 (Programming Fundamentals) — A-Level Computer Science 学习指南
适合谁:A-Level Computer Science 参加 A-Level Computer Science 的考生。
覆盖内容:变量类型与运算符、分支循环控制结构、过程函数参数与作用域、一维/二维数组、字符串操作五大编程基础核心考点。
前置知识:基础编程概念;Python / Java / VB 任一种。
关于练习题:下文「练习题」一节的所有题目均为我们按 A-Level Computer Science 风格编写的原创题目 (original problems),仅用于教学。它们不是 Cambridge International 真题的复制,措辞、数值或语境可能不同。请把它们当作练手用;评分细则请对照 Cambridge 官方 mark scheme。
1. 什么是编程基础?
编程基础是A-Level Computer Science计算机科学的核心入门模块,对应考纲9618_4知识点,是后续算法设计、数据结构、面向对象编程等模块的底层支撑,主要考察你将现实问题的逻辑拆解、转化为可执行代码的能力。该模块知识点在Paper 2、Paper 4的编程题中占比约25%,同时会融入所有代码相关的考题中,是拿到A/A*必须完全掌握的基础内容。
2. 变量、数据类型与运算符 (Variables, types, operators)
变量 (variable) 是存储可变数据的内存占位符,每个变量都有对应的数据类型 (data type),A-Level考纲要求掌握的基础类型包括:整数型 (integer)、浮点型 (float)、布尔型 (Boolean)、字符串 (string)。 运算符分为三类:
- 算术运算符:
+、-、*、/、%(取余)、**(幂运算) - 比较运算符:
==(等于)、!=(不等于)、>、<、>=、<= - 逻辑运算符:
and(与)、or(或)、not(非)
范例:计算圆的面积,公式为
PI = 3.14159 # 常量 (constant),值不可修改
radius: float = 5.2 # 浮点型变量存储半径
area: float = PI * radius ** 2
print(round(area, 2)) # 输出84.95
考点提醒:输入函数默认返回字符串类型,考官常考类型转换,比如接收数字输入时必须加int()或float()转换,否则会出现运算报错。
3. 控制结构:分支与循环 (Control structures — if/else, loops)
控制结构用于改变代码的执行顺序,分为两类:
- 分支结构 (selection structure):通过
if/elif/else判断条件,选择执行不同代码块,适合多条件判断场景(比如成绩等级划分)。 - 循环结构 (iteration structure):
for循环适合固定次数的迭代(比如遍历长度已知的数组),while循环适合次数不确定的迭代(比如直到输入合法值才停止)。
范例:判断输入的成绩对应的等级
score = int(input("Enter score: "))
if score >= 90:
print("A*")
elif score >= 80:
print("A")
elif score >= 70:
print("B")
else:
print("Below B")
考点提醒:while循环必须设置可到达的终止条件,否则会出现死循环,是考试中常见的丢分点。
4. 过程与函数:参数与作用域 (Procedures and functions — parameters and scope)
函数 (function) 是封装了特定功能的可复用代码块,有返回值;无返回值的函数称为过程 (procedure)。函数定义时的参数叫形参 (parameter),调用时传入的具体值叫实参 (argument)。 作用域 (scope) 指变量的有效范围:
- 全局作用域 (global scope):定义在函数外的变量,全代码有效
- 局部作用域 (local scope):定义在函数内的变量,仅函数内有效
范例:定义计算两个数乘积的函数
def multiply(a: int, b: int) -> int: # a、b是形参
return a * b
result = multiply(3, 5) # 3、5是实参,result=15
考点提醒:考官常考按值传递 (pass by value) 和按引用传递 (pass by reference) 的区别:基础类型(int、str等)按值传递,函数内修改不会影响外部变量;数组、对象按引用传递,函数内修改会同步到外部变量。
5. 一维与二维数组 (Arrays (1D and 2D))
数组 (array) 是存储同类型数据的有序集合,元素通过索引访问:
- 一维数组 (1D array):适合存储单列数据,比如5个学生的考试成绩
scores = [78, 85, 92, 67, 89],访问第三个元素用scores[2](Python索引从0开始)。 - 二维数组 (2D array):可看作矩阵,适合存储表格类数据,比如3个学生的3门课成绩
class_scores = [[75, 82, 90], [68, 79, 85], [92, 88, 76]],访问第2行第3列的元素用class_scores[1][2]。
考点提醒:注意编程语言的索引规则,Python默认从0开始,VB可设置从1开始,千万不要越界访问(比如长度为5的数组访问索引5),否则会触发运行时错误。
6. 字符串操作 (String manipulation)
字符串 (string) 是字符的有序序列,A-Level考纲要求掌握的常用操作包括:
- 长度计算:
len(s)返回字符串的字符数 - 索引与切片:
s[0]取第一个字符,s[a:b]取从索引a到b-1的子串 - 拼接:用
+连接两个字符串 - 类型判断:
isdigit()判断是否是数字,isalpha()判断是否是字母 - 大小写转换:
lower()转小写,upper()转大写
范例:提取字符串中的考试代码
s = "A-Level Computer Science"
exam_code = s[4:8] # 结果为"A-Level Computer Science"
考点提醒:Python中字符串是不可变类型,直接修改某一位字符会报错,需要生成新的字符串完成修改。
7. 常见陷阱 (Common Pitfalls)
- 错误做法:直接将输入的字符串参与算术运算,比如
a = input("输入数字:")后执行a + 5。原因:忘记输入函数默认返回字符串类型,未做类型转换。正确做法:接收数值输入时加int()或float()转换,比如a = int(input("输入数字:"))。 - 错误做法:
while循环中忘记更新计数变量,导致死循环。原因:忽略了循环终止条件的触发逻辑。正确做法:循环体末尾必须加计数变量更新语句,比如i += 1。 - 错误做法:函数内修改全局变量未加
global声明,导致全局变量实际未修改。原因:混淆局部和全局作用域的优先级,函数内直接给同名变量赋值会创建新的局部变量。正确做法:修改全局变量前加global 变量名声明。 - 错误做法:二维数组访问时行列顺序写反,比如要访问第2行第3列写成
arr[2][1]。原因:记错数组索引先行后列的规则,以及索引从0开始的设定。正确做法:arr[行索引][列索引],第2行对应索引1,第3列对应索引2,应写为arr[1][2]。
8. 练习题 (A-Level Computer Science 风格)
第1题
题干:编写Python代码,输入一个正整数n,用while循环计算1到n所有偶数的和并输出。
解答:
n = int(input("Enter a positive integer: "))
i = 1
sum_even = 0
while i <= n:
if i % 2 == 0:
sum_even += i
i += 1
print(sum_even)
评分点:输入类型转换1分,变量初始化1分,循环条件正确1分,偶数判断1分,循环变量更新1分,输出正确1分。
第2题
题干:二维数组marks = [[75, 82, 90], [68, 79, 85], [92, 88, 76]]存储3个学生的3门课成绩,编写代码计算每个学生的平均成绩,输出格式为学生X的平均成绩为Y,保留1位小数。
解答:
marks = [[75, 82, 90], [68, 79, 85], [92, 88, 76]]
for idx, student in enumerate(marks):
avg = sum(student) / 3
print(f"学生{idx+1}的平均成绩为{avg:.1f}")
输出结果:
学生1的平均成绩为82.3
学生2的平均成绩为77.3
学生3的平均成绩为85.3
第3题
题干:输入一个字符串,统计其中数字字符的个数并输出,比如输入CIE96182024输出6。
解答:
s = input("Enter a string: ")
count = 0
for c in s:
if c.isdigit():
count += 1
print(count)
9. 速查表 (Quick Reference Cheatsheet)
| 知识点分类 | 核心规则 |
|---|---|
| 变量与类型 | 常用类型:int、float、bool、str;输入默认是str,算术运算前必须转数值类型 |
| 控制结构 | if分支按优先级从高到低判断;for用于固定次数迭代,while用于不定次数迭代;循环必须有可到达的终止条件 |
| 函数与作用域 | 形参是定义时的参数,实参是调用时传入的值;局部变量优先级高于全局变量,修改全局变量需加global声明 |
| 数组 | 1D数组访问:arr[索引],2D数组访问:arr[行索引][列索引];Python索引从0开始,注意不要越界 |
| 字符串操作 | 常用方法:len()求长度、+拼接、[a:b]切片、isdigit()判断数字、lower()转小写 |
10. 接下来怎么学
本模块是A-Level Computer Science后续算法设计、数据结构(链表、栈、队列)、面向对象编程、文件操作等模块的基础,你只有完全掌握本模块的语法规则和逻辑拆解方法,才能顺利应对复杂的编程大题。编程题在Paper 2和Paper 4中占比超过40%,建议你学完本指南后多刷历年真题的编程题,熟悉考纲的评分规则,减少不必要的丢分。 如果你在练习过程中遇到代码报错、逻辑梳理不清的问题,随时到小欧提问,我们会为你提供针对性的解题指导和错题分析。
本指南内容对齐 CIE 剑桥国际 AS & A Level 计算机科学 9618 考纲。OwlsAi 与 Cambridge Assessment International Education 无附属关系。