欢迎来到程序设计的世界!
欢迎!你即将深入探索计算机科学中最令人兴奋的领域之一:程序设计概论 (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 中,请记住 STA 和 LDA 指令会变更邮箱或计算器的值,但它们不会删除之前的内容——它们只是将其覆盖!
复习重点
• 过程式 (Procedural) 代码是一系列步骤的顺序。
• 选择 (Selection) 是决策 (IF),迭代 (Iteration) 是重复 (WHILE/FOR)。
• 变量 (Variables) 会改变;常量 (Constants) 不会。
• 函数 (Functions) 返回值;过程 (Procedures) 不返回值。
• LMC 使用助记符如 ADD、SUB、STA、LDA 来代表低级指令。
• 分支 (Branching) 在 LMC 中(BRA、BRZ、BRP)是我们在汇编语言中实现 IF 陈述式和循环的方式。