9618 Paper 2 · Lesson 02

数据、变量与表达式

这一课先不写循环,也不接触数组。我们要建立写任何算法都需要的第一层能力:把现实信息放进变量,用正确的类型和运算符进行计算,再输出结果。

1. 数据为什么要放进“变量”

程序运行时,需要暂时记住用户输入的数字、名字、成绩等信息。内存里存放这些信息的位置,就是 variable(变量)

可以把变量想成一个贴了名字的盒子:

Score = 17

盒子的名字:Score
盒子里的内容:17

程序以后只要写 Score,就是在使用这个盒子里面的 17。盒子里的内容可以改变,所以叫“变量”。

Data 数据

程序处理的值,例如 42"Li"TRUE

Identifier 标识符

程序员给变量起的名字,例如 ScoreStudentName

Variable 变量

由标识符命名、可以保存一个值的存储位置。

给变量起名字时,要让名字说明用途。StudentCountX1 更容易理解。

2. 类型:盒子能装什么

不同数据需要用不同方式处理。类型告诉程序:这个变量可以保存什么,以及能对它做什么运算。

类型 保存什么 例子
INTEGER整数0-71024
REAL带小数的数3.14-0.5
CHAR一个字符'A''7'
STRING零个或多个字符"""Li"
BOOLEAN两个逻辑状态之一TRUEFALSE
DATE日期27/10/2023

选择类型时看数据的含义,而不是只看它像不像数字。

正确的判断

学生人数是 INTEGER;平均分是 REAL;名字是 STRING;名字的首字母是 CHAR;是否及格是 BOOLEAN;出生日期是 DATE

容易出错的例子

电话号码虽然全是数字,但通常使用 STRING,因为它不参与算术,并且需要保留开头的 0。

3. 声明变量:先告诉程序“我要用这个盒子”

Pseudocode 使用 DECLARE 说明一个标识符的类型。声明就是给盒子贴标签。

DECLARE Age : INTEGER
DECLARE Price : REAL
DECLARE Initial : CHAR
DECLARE Name : STRING
DECLARE Finished : BOOLEAN
DECLARE DateOfBirth : DATE

同类型的变量可以写在一起:

DECLARE Length, Width : INTEGER

常量 Constant

如果某个值始终不变,可以声明为常量。常量的值在程序运行中不改变。

CONSTANT MaxStudents = 30
CONSTANT PI = 3.14159

实际拼写按考试当前版本的 Pseudocode Guide 和题目 insert 为准。

4. 初始化与赋值

Initialisation 是给变量一个起始值;assignment 是把右边表达式的值存入左边的变量。

Count <- 0
Total <- 0.0
Finished <- FALSE
Score <- 17
NextScore <- Score + 1

箭头 <- 表示“把右边算出来,存进左边”。它不是等号。

最常见的错误

Age = 18 不是赋值。在 9618 pseudocode 中,= 是比较:它在判断 Age 是否等于 18,结果是 TRUE 或 FALSE。

5. 运算符

算术运算符

运算符含义结果类型
+数值
-数值
*数值
/REAL
DIV整数除法INTEGER
MOD余数INTEGER
10 / 4     // 2.5
10 DIV 4   // 2
10 MOD 4   // 2

比较运算符

=     <>     >     <     >=     <=

比较运算符的结果是 BOOLEAN。例如 Price > 10 得到 TRUE 或 FALSE。

逻辑运算符

AND     OR     NOT

逻辑运算符的操作数和结果都应该是 BOOLEAN。

字符串运算符

& 用来连接 CHAR 或 STRING。

Initial & ". " & Surname
"A" & "B"      // 结果是 "AB"

6. 运算符优先级

一个表达式里有多个运算符时,按下面的顺序计算。最高优先级的先算,同级一般从左到右。

优先级运算符
最高*/DIVMOD
次高+-&
比较=<>><>=<=
NOTNOT
ANDAND
OROR
最低<- 赋值
3 + 4 * 2       // 先算 4 * 2,结果是 11
(3 + 4) * 2     // 括号先算,结果是 14

7. 表达式与类型检查

表达式是把值、变量、函数和运算符组合起来,求出单一结果。

Price * Quantity
LENGTH(Name) - 1
Marks >= 40
FirstName & " " & LastName

读表达式时,先判断每一部分的结果类型。

类型不匹配就是错误

"Hello" + 3 试图把 STRING 和数值相加。应该使用 &,或者先把 3 转成 STRING。

8. 常用的内置函数

考试卷通常会提供函数表。学生需要会读函数名、参数和返回类型,而不是死记每个拼写。

函数作用
LENGTH()返回字符串的长度
MID() / SUBSTRING()取出字符串的一部分
INT()取实数的整数部分
ROUND()四舍五入
STR_TO_NUM()把数字字符串转成数值
NUM_TO_STR()把数值转成字符串
STR_TO_NUM("37") + 5      // 先把 "37" 变成 37,再加 5,得到 42
"37" + 5                   // 错误:不能把字符串和数值直接相加

9. 输入与输出

INPUT 从用户读取一个值,并保存到变量;OUTPUT 显示结果。

INPUT Name
INPUT Age
OUTPUT "Name: ", Name
OUTPUT "Average mark = ", Average

如果需要把多个部分组合成一个字符串,用 &

OUTPUT "Welcome " & Name & "."

10. 完整例子:总分与平均分

问题:输入两个整数成绩,输出总分和平均分。

DECLARE Mark1, Mark2, Total : INTEGER
DECLARE Average : REAL

INPUT Mark1
INPUT Mark2
Total <- Mark1 + Mark2
Average <- Total / 2
OUTPUT "Total = ", Total
OUTPUT "Average = ", Average

这里 Total 是 INTEGER,Average 是 REAL,因为除法可能产生小数。

11. 完整例子:姓名与及格状态

DECLARE FirstName, LastName, FullName : STRING
DECLARE Mark : INTEGER
DECLARE Passed : BOOLEAN

INPUT FirstName
INPUT LastName
INPUT Mark
FullName <- FirstName & " " & LastName
Passed <- Mark >= 40
OUTPUT FullName
OUTPUT Passed

Mark >= 40 是 BOOLEAN 表达式,所以可以赋给 BOOLEAN 变量 Passed

12. 自测

先自己写答案,再点开解释核对。

做 40 道选择题练习

题目 1

为下面的信息选择最合适的数据类型:学生人数、平均分、名字首字母、全名、是否登录、出生日期。

查看答案
INTEGER、REAL、CHAR、STRING、BOOLEAN、DATE。

题目 2

计算:8 + 2 * 3(8 + 2) * 317 MOD 517 DIV 5

查看答案
14、30、2、3。

题目 3

下面的语句有什么问题?
Score = 10
Message <- "Result" + 4
Finished <- Age AND 30

查看答案
第一句是比较,应写 Score <- 10。第二句把字符串和数值相加,应使用 & 或类型转换。第三句中 30 不是 BOOLEAN,不能用于 AND。

题目 4

写 pseudocode:输入两个 INTEGER,输出它们的和。请包含声明、输入、计算和输出。

查看答案
DECLARE Num1, Num2, Total : INTEGER
INPUT Num1
INPUT Num2
Total <- Num1 + Num2
OUTPUT Total

13. 本课检查表

返回 P2 入门目录