学习指南

过程、函数与参数

计算机科学· 15 分钟阅读

1. 核心区别:过程与函数★★☆☆☆⏱ 4 min

模块化编程将大型复杂程序拆分为更小、可复用的代码块,即子程序。这使得代码更易于测试、调试,且可在程序的多个部分复用。CIE A-Level计算机科学中,子程序分为两种核心类型。

📘 定义

过程

仅执行操作,不向调用代码返回任何值的子程序。

📘 定义

函数

执行计算,并向调用代码返回恰好一个值的子程序。

📐 例题

编写伪代码:一个打印问候语的过程,和一个计算圆面积的函数。

  1. 1

    首先,声明过程(无返回值):

  2. 2
    PROCEDURE printGreeting(name: STRING)
        OUTPUT "Hello, " + name + "!"
    ENDPROCEDURE
    
  3. 3

    接下来,声明函数(指定返回类型并返回值):

  4. 4
    FUNCTION calculateArea(radius: REAL) RETURN REAL
        CONSTANT PI = 3.14159
        area = PI * radius * radius
        RETURN area
    ENDFUNCTION
    
  5. 5

    调用时,过程直接产生输出,而函数返回一个可存储的值:myArea = calculateArea(5) 会将结果存储在myArea中。

2. 形参与实参★★☆☆☆⏱ 3 min

参数是传入子程序的输入,让子程序可适配不同的值。CIE考试经常考察形参和实参的区别,这通常是1-2分的理论题。

📘 定义

形参(形式参数)

子程序定义中声明的占位变量,在子程序运行时存储输入值。

例:

FUNCTION calculateArea(radius: REAL)中,radius就是形参。

📘 定义

实参(实际参数)

调用子程序时传入的具体值或变量。

例:

myArea = calculateArea(5)中,5就是实参。

📐 例题

找出以下代码中的形参和实参:PROCEDURE addScore(studentID: INTEGER, newScore: INTEGER) ... addScore(currentStudent, 95)

  1. 1

    形参出现在子程序定义中:studentIDnewScore

  2. 2

    实参是调用子程序时传入的内容:currentStudent(存储实际ID的变量)和95(字面分数值)。

3. 参数传递:值传递与引用传递★★★☆☆⏱ 5 min

这是CIE 9618理论考试中最常考的知识点之一,几乎每套试卷1都会出现。核心区别在于:子程序内部对参数的修改如何影响原变量。

📘 定义

值传递

为子程序创建实参值的副本供其使用。对形参的修改不会影响调用代码中的原变量。

📘 定义

引用传递

传递原实参的引用(内存地址)。对形参的修改会改变调用代码中的原变量。

📐 例题

预测以下代码在两种传递方式下的输出:

DECLARE y : INTEGER
y = 10
PROCEDURE changeValue(x : INTEGER)
    x = x * 2
ENDPROCEDURE
CALL changeValue(y)
OUTPUT y
  1. 1

    如果是值传递:会创建y = 10的副本赋值给x。将x改为20只会修改副本,输出为10

  2. 2

    如果是引用传递:x指向和y相同的内存地址。将x改为20会更新原变量值,输出为20

4. 返回值与使用场景★★★☆☆⏱ 3 min

✓ 快速检测

测试你目前的掌握程度:

  1. 以下哪项是函数的定义特征?

    • 它永远不能接受参数

    • 它总是会向调用代码返回一个值

    • 它只能使用引用传递

    • 它不可复用

    显示答案
    1

    正确!函数的定义特征就是返回值,这一点和过程不同。

  2. 如果你在子程序内部修改一个值传递的参数,原变量会发生什么?

    • 原变量会被修改

    • 只有参数的副本会被修改

    • 程序会抛出错误

    • 实参改变,形参不变

    显示答案
    1

    正确!值传递传递的是副本,因此只有副本被改变。

📐 例题

编写交换两个整数的子程序,你需要使用哪种参数传递方式?

  1. 1

    我们需要修改原有的两个变量,因此应使用两个参数都按引用传递的过程(CIE伪代码中用REF标记):

  2. 2
    PROCEDURE swap(a: INTEGER REF, b: INTEGER REF)
        temp = a
        a = b
        b = temp
    ENDPROCEDURE
    
  3. 3

    如果使用值传递,原变量不会改变,因此交换无法生效。如果只需要返回一个值,则应使用函数。

5. 常见陷阱

错误做法:

将过程当作函数使用,把它的输出赋值给变量

原因:

过程不返回值,这种写法会导致语法/运行时错误,在实践考试中会失分

正确做法:

需要从子程序获取返回值时使用函数,仅执行无返回的操作时使用过程

错误做法:

预测输出时混淆值传递和引用传递

原因:

考试有意考察这个区别,这是代码跟踪题中最常见的失分点

正确做法:

记住:值传递只改变值(副本),引用传递改变原变量(引用)

错误做法:

考试答题时混淆形参和实参的角色定义

原因:

CIE评分标准要求正确区分参数类型才能给分

正确做法:

记住:形参 = 定义中(F = 形 = 定义),实参 = 调用时(A = 实 = 调用)

错误做法:

尝试从CIE伪代码的单个函数返回多个值

原因:

CIE A-Level伪代码中每个函数只允许一个返回值,这种写法不被接受

正确做法:

如果需要修改多个值,改用带引用传递参数的过程

6. 速查表

概念

核心特征

考试提示

过程

无返回值,执行操作

使用PROCEDURE关键字,不要赋值结果

函数

返回一个值,用于计算

必须包含RETURN语句

形参

子程序定义中的占位符

出现在子程序声明中

实参

调用时传入的值/变量

出现在调用子程序时

值传递

传递副本,原变量不变

不会对调用变量产生副作用

引用传递

传递地址,原变量可被修改

交换变量或多个修改时需要

真题中的出现

AI 根据考纲规律估算的考点位置,请对照官方真题核实准确性。仅作复习重点参考。

  • 2022 · 12

    参数传递类型比较

  • 2023 · 11

    过程与函数的区分

深入阅读

下一步

过程、函数和参数是所有模块化编程的基础,是CIE 9618试卷1(理论)和试卷2(实践)考核的核心内容。掌握参数传递对于理论题中的代码输出跟踪,以及实践考试中编写清晰可用的程序都至关重要。这些概念在你接下来学习的所有高级编程主题(从递归到面向对象编程)中都会不断使用。现在打下坚实的基础,会让后续更复杂主题的学习轻松很多。