欢迎来到程序设计的世界!

欢迎!你即将深入探索计算机科学中最令人兴奋的领域之一:程序设计概论 (Introduction to Programming)。你可以把程序设计想象成学习一种与计算机沟通的新语言。就像跟着食谱做蛋糕一样,程序其实就是一系列告诉计算机该做什么的指令。

在本章中,我们将探讨过程式程序设计 (Procedural Programming)(编写代码的标准方式)以及汇编语言 (Assembly Language)(我们如何更直接地与计算机硬件沟通)。如果一开始觉得内容很多,不用担心——我们会把它拆解成小块,一步步攻克!

1. 过程式程序设计技巧

大多数现代编程语言,如 Python、Java 或 C++,都支持过程式程序设计。这是一种程序设计风格,通过一系列指令,一步一步地指导计算机执行任务。

程序流程(三大支柱)

几乎所有编写过的程序都依赖三种基本结构来控制其“流程”:

1. 顺序 (Sequence):这是最简单的结构。意思是计算机由上而下,逐一执行指令。
例子:1. 起床 -> 2. 刷牙 -> 3. 吃早餐。

2. 选择 (Selection / Branching):这是计算机进行决策的地方。它会检查一个条件(通常是 IF 陈述式),然后选择要执行的路径。
例子:如果正在下雨,就带雨伞。否则,就戴太阳眼镜。

3. 迭代 (Iteration / Looping):这是计算机多次重复执行一段代码的情况。我们使用 FOR 循环(当我们知道要重复执行多少次时)或 WHILE 循环(直到条件改变为止)。
例子:只要你的盘子还没空,就继续吃。

变量与常量

想象计算机的内存是一面挂满便签或存储盒的巨大墙壁。

变量 (Variables):这些是“盒子”,用来存储程序执行过程中可以改变的数据。例如,游戏中的 playerScore(玩家分数)从 0 开始,随后会不断增加。
常量 (Constants):这些是用于存放程序一旦开始后就不能更改的数据的“盒子”。例如,圆周率 PI (\( \pi \)) 永远是 3.14159。

运算符:逻辑工具

为了执行任何有用的操作,我们需要运算符:

算术运算符 (Arithmetic Operators):标准数学运算,如 +(加)、-(减)、*(乘)和 /(除)。
赋值运算符 (Assignment Operators):即 = 符号。在程序设计中,它不代表“等于”;它意味着“取右边的值,并放进左边的盒子里”。
布尔运算符 (Boolean Operators):这些有助于做出决定。AND(两者皆须为真)、OR(至少有一个为真)以及 NOT(相反结果)。

过程与函数

有时候我们会由想要重复使用的代码块。与其重复输入十次,我们将其封装成一个“子程序”。

过程 (Procedures):执行一项任务但不会将值传回主程序的代码块。
函数 (Functions):执行一项任务并返回 (return) 一个值回主程序的代码块。

类比:过程就像吸尘器——它完成了工作,但在完成时不会交给你任何东西。函数就像果汁机——你给它水果,它会返回给你果汁。

字符串与文件处理

字符串处理 (String Handling):这是我们处理文字的方式。我们可以找出单词的长度、将两个字符串连接起来(串接/Concatenation),或是截取字符串的一部分(切片/Slice)。
文件处理 (File Handling):程序通常需要永久存储数据。我们使用三个主要步骤:打开 (Open) 文件、读取/写入 (Read/Write) 文件,最重要的一步是关闭 (Close) 文件以保存变更。

快速回顾:过程式程序设计的核心在于“如何做”。它使用变量来存储数据,并利用顺序、选择和迭代来控制事件的顺序。

2. 汇编语言与小人计算机 (LMC)

高级语言(如 Python)对人类来说很容易阅读。然而,计算机只懂 1 和 0。汇编语言 (Assembly Language) 是一种位于中间的“低级”语言——它是机器码的人类可读版本。

什么是小人计算机?

小人计算机 (Little Man Computer, LMC) 是一个简化的计算机模型,用来帮助你理解 CPU 的运作原理。想象一个小人待在一个房间里,里面有 100 个邮箱(内存)、一台计算器(累加器,Accumulator)和一个计数器(程序计数器,Program Counter)。

LMC 关键助记符 (指令)

LMC 不使用二进制,而是使用称为助记符 (mnemonics) 的短单词。以下是你考试需要知道的指令:

ADD:将邮箱中的值加到计算器(累加器)中。
SUB:从计算器中减去邮箱中的值。
STA (Store):将计算器中的值存储到邮箱中。
LDA (Load):将邮箱中的值加载到计算器中。
INP (Input):接收来自用户的输入
OUT (Output)输出计算器中当前的值。
HLT (Halt)停止程序。
BRA (Branch Always)无条件跳转(跳到另一个指令)。
BRZ / BRP (Branch if Zero / Positive)若为零 / 若为正数则跳转(仅当计算器数值为 0 或正数时才跳转)。

简单的 LMC 程序示例

让我们看看一个将两个数字相加的程序:

1. INP (获取第一个数字)
2. STA FIRST (将其存储在名为 'FIRST' 的邮箱中)
3. INP (获取第二个数字)
4. ADD FIRST (将第一个数字加到第二个数字上)
5. OUT (显示结果)
6. HLT (停止)

你知道吗?尽管现今我们大多使用高级语言编写程序,但汇编语言仍被用于编写高性能显示卡或微型医疗设备等领域,因为它能让程序员完全掌控硬件!

3. 常见陷阱与技巧

如果一开始觉得棘手,请别担心!许多学生都会在以下几点感到困惑:

= 与 ==:在许多语言中,单个 = 是将值放入盒子(赋值),而双等号 == 则是检查两个东西是否相同(比较)。
无限循环:务必确保你的 WHILE 循环有终止条件,否则程序将永远卡住!
函数返回值:请记得 函数 (Function) 必须总是使用 return 这个字将答案传回。如果你忘了,结果就会消失!
LMC 内存:在 LMC 中,请记住 STALDA 指令会变更邮箱或计算器的值,但它们不会删除之前的内容——它们只是将其覆盖!

复习重点

过程式 (Procedural) 代码是一系列步骤的顺序。
选择 (Selection) 是决策 (IF),迭代 (Iteration) 是重复 (WHILE/FOR)。
变量 (Variables) 会改变;常量 (Constants) 不会。
函数 (Functions) 返回值;过程 (Procedures) 不返回值。
LMC 使用助记符如 ADD、SUB、STA、LDA 来代表低级指令。
分支 (Branching) 在 LMC 中(BRA、BRZ、BRP)是我们在汇编语言中实现 IF 陈述式和循环的方式。