欢迎来到程序设计的世界!
你好!欢迎来到计算机科学旅程中最令人兴奋的部分之一。可以把程序设计(Programming)想象成学习一门能让你与计算机沟通的新语言。计算机虽然速度极快,但它们其实并不怎么“聪明”——它们需要我们提供特定的“食谱”来执行任务。这份食谱就是我们所说的算法(Algorithm),而将它写成计算机能理解的方式,就是程序设计。
在本章中,我们将探讨代码的基本构建模块。如果一开始觉得有点棘手,别担心;每个人都是从零开始的,一旦你掌握了其中的逻辑,你一定会对自己能创造出的成果感到惊讶!
11.1 程序设计基础
在编写复杂的程序之前,我们需要先了解工具箱里的基本工具。这些工具能帮助我们存储信息并与用户进行沟通。
变量与常量
想象你有一排纸箱,每个箱子都可以存放一件信息。
变量(Variable)就像是一个你可以随时更改内容物的箱子。例如在游戏中,你的“分数(Score)”就是一个变量,因为它会随着游戏进行而改变。
常量(Constant)则像是一个一旦放入物品就被强力胶封死的箱子。当程序执行时,其数值无法改变。例如圆周率 \( \pi \) (3.14159) 或一天中的小时数 (24) 都是常见的例子。
小撇步:请使用有意义的名称!与其将变量命名为 x,不如命名为 userScore。这样会让你的代码可读性大大提升。
赋值、输入与输出
为了让程序运作,我们需要处理数据的流动:
- 赋值(Assignment):这是我们将数值放入变量的方法。在伪代码(Pseudocode)中,我们使用箭头表示:myAge ← 17。这代表“变量 myAge 现在存储了数值 17。”
- 输入(Input):这是程序从用户端(通常是键盘)获取信息的方式。
示例:INPUT userName - 输出(Output):这是程序向用户“回话”(通常是在屏幕上)的方式。
示例:OUTPUT "Hello!"
算术与逻辑运算符
计算机非常喜欢数学!你可以使用标准符号如 +、-、*(乘法)和 /(除法)。你也可以使用逻辑运算符(如 AND、OR 和 NOT)来进行数值比较。
使用库例程(字符串)
你不必凡事都从零开始编写!库例程(Library routines)是预先写好的代码片段。在 AS Level 中,你应该要熟悉字符串处理(String manipulation)。这些功能让你能够拆解文字。
示例:计算字符串的 LENGTH(长度),或截取单词最左侧的 3 个字符。
你知道吗?在程序设计中,一段文字被称为“字符串(String)”,因为它就是由一连串独立的字符(Character)像绳子一样串联在一起的!
重点总结:
变量用于存储会变动的数据;常量用于存储固定的数据。我们使用赋值来存储数值、使用输入来获取数据,并使用输出将结果呈现出来。
11.2 控制结构:控制程序流程
程序并不总是从头到尾直线执行。有时它需要做出决策或重复执行某些任务,我们称这些为控制结构(Control structures)。
选择结构(决策)
这就像道路的分岔口。程序会检查条件并决定要走哪一条路。
1. IF 语句:用于简单的“是/否”或“真/假”决策。
示例:IF score > 50 THEN OUTPUT "You Win!" ELSE OUTPUT "Try Again" ENDIF
2. CASE 语句:当你有多个特定选项时使用。这比写十个 IF 语句要简洁得多。想象一台自动售货机:如果用户按 'A',就给零食;如果按 'B',就给饮料。
迭代结构(循环)
有时我们需要重复执行同一项工作。与其把代码写 100 次,我们可以使用循环(Loop)。
- FOR 循环(计数控制):当你确切知道要重复多少次时使用(例如:“跑 10 圈”)。
- WHILE 循环(前测条件):在执行代码之前先检查条件。如果条件一开始就是假的,代码可能一次都不会执行!(例如:“只要绿灯亮着,就继续行驶”)。
- REPEAT...UNTIL 循环(后测条件):先执行代码,然后才检查条件。这意味着里面的代码至少会执行一次。
常见错误:忘记在 WHILE 循环中修改变量。如果不修改,条件会永远为真,导致无限循环(Infinite loop)并让你的程序崩溃!
快速回顾:该用哪种循环?
知道确切次数?使用 FOR。
开始前需要检查条件?使用 WHILE。
至少要执行一次?使用 REPEAT...UNTIL。
11.3 结构化程序设计
当程序变得庞大时,会变得杂乱无章。结构化程序设计(Structured programming)是一门将巨大且复杂的问题拆解为更小、易于管理之“子任务”的艺术。我们使用过程(Procedures)和函数(Functions)来达成此目的。
过程与函数
两者都是执行特定任务的“子程序”,但有一个主要的区别:
- 过程(Procedure):执行完任务后就结束了,不会返回任何数值给主程序。(比喻:叫某人“去整理房间”)。
- 函数(Function):执行完任务后,会返回一个数值给主程序。(比喻:问某人“外面气温几度?”—他们去检查后,把答案带回来给你)。
参数:传递信息
当你调用一个过程或函数时,通常需要给它一些“初始信息”。这些信息称为参数(Parameter)。传递参数的方式有两种:
1. 传值(By Value):程序制作一份数据的副本(Copy)。原始数据会受到保护且保持不变。这就像将你的作业拍照传给别人——他们可以在照片上涂鸦,但你的原稿依然干净完好。
2. 传址(By Reference):程序将原始数据的内存地址(Address)交给子程序。如果子程序更改了数据,原始数据也会随之改变!这就像把房子的钥匙交给别人——他们可以进去并移动你的家具。
关键术语
- 标头(Header):过程或函数的第一行,定义了名称与参数。
- 实参(Argument):调用子程序时,实际传入的数值。
- 返回值(Return Value):函数执行后发送回来的特定数据。
重点总结:
结构化程序设计让代码更易于阅读、测试与修正。函数会返回值;过程则不会。传值是复制一份;传址则是直接操作原始数据。
继续练习吧!程序设计是一种透过每一行代码的积累而不断进步的技能。如果程序第一次执行失败,别担心——这只是称为“调试(Debugging)”的过程的一部分。你一定做得到的!