1. 数据为什么要放进“变量”
程序运行时,需要暂时记住用户输入的数字、名字、成绩等信息。内存里存放这些信息的位置,就是 variable(变量)。
可以把变量想成一个贴了名字的盒子:
Score = 17 盒子的名字:Score 盒子里的内容:17
程序以后只要写 Score,就是在使用这个盒子里面的 17。盒子里的内容可以改变,所以叫“变量”。
Data 数据
程序处理的值,例如 42、"Li"、TRUE。
Identifier 标识符
程序员给变量起的名字,例如 Score、StudentName。
Variable 变量
由标识符命名、可以保存一个值的存储位置。
给变量起名字时,要让名字说明用途。StudentCount 比 X1 更容易理解。
2. 类型:盒子能装什么
不同数据需要用不同方式处理。类型告诉程序:这个变量可以保存什么,以及能对它做什么运算。
| 类型 | 保存什么 | 例子 |
|---|---|---|
INTEGER | 整数 | 0、-7、1024 |
REAL | 带小数的数 | 3.14、-0.5 |
CHAR | 一个字符 | 'A'、'7' |
STRING | 零个或多个字符 | ""、"Li" |
BOOLEAN | 两个逻辑状态之一 | TRUE、FALSE |
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. 运算符优先级
一个表达式里有多个运算符时,按下面的顺序计算。最高优先级的先算,同级一般从左到右。
| 优先级 | 运算符 |
|---|---|
| 最高 | *、/、DIV、MOD |
| 次高 | +、-、& |
| 比较 | =、<>、>、<、>=、<= |
| NOT | NOT |
| AND | AND |
| OR | OR |
| 最低 | <- 赋值 |
3 + 4 * 2 // 先算 4 * 2,结果是 11 (3 + 4) * 2 // 括号先算,结果是 14
7. 表达式与类型检查
表达式是把值、变量、函数和运算符组合起来,求出单一结果。
Price * Quantity LENGTH(Name) - 1 Marks >= 40 FirstName & " " & LastName
读表达式时,先判断每一部分的结果类型。
Price * Quantity是数值。Marks >= 40是 BOOLEAN。FirstName & LastName是 STRING。
"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
为下面的信息选择最合适的数据类型:学生人数、平均分、名字首字母、全名、是否登录、出生日期。
查看答案
题目 2
计算:8 + 2 * 3、(8 + 2) * 3、17 MOD 5、17 DIV 5。
查看答案
题目 3
下面的语句有什么问题?Score = 10Message <- "Result" + 4Finished <- 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. 本课检查表
- 我能解释数据、标识符和变量的区别。
- 我能为常见数据选择正确类型。
- 我会写 DECLARE 和 CONSTANT。
- 我分得清赋值
<-和比较=。 - 我会读运算符优先级,知道
DIV和MOD。 - 我能判断表达式结果类型,并发现类型不匹配。
- 我会使用 INPUT 和 OUTPUT,以及字符串连接。