简介:结构化编程与逻辑

欢迎来到结构化编程(Structured Programming)这一章!别担心,名字听起来复杂,其实它就是一套简单的规则和最佳实践,旨在帮助我们编写清晰、易读且易于调试的代码。

你可以把结构化编程想象成用乐高积木拼搭模型。你不是随机地把零件堆在一起,而是根据图纸(即结构)来操作,从而确保最终的作品稳固且逻辑合理。

通过掌握这些概念,你将学会如何将代码组织成高效、合乎逻辑的步骤。这对于每一位计算机科学家来说都是必不可少的技能!


1. 结构化编程的基石

结构化编程完全依赖于三种基本控制结构。无论你编写的程序多么复杂,本质上都只使用了这三种技术。

1.1 顺序结构 (Sequence)

顺序结构是最基本的控制结构。它意味着程序中的指令会按照书写的先后顺序,一条接一条地执行。

类比: 按照菜谱做饭或者系鞋带。你必须先完成第1步,才能进行第2步,依此类推。

  • 执行指令 A。
  • 然后执行指令 B。
  • 最后执行指令 C。

关键点: 顺序结构决定了程序执行的线性、从上到下的流动方式。

1.2 选择结构 (Selection)

选择结构(或称条件分支)允许程序根据某个条件是“真”还是“假”来做出决定。这决定了程序将走向哪条执行路径。

我们通常使用 IFELSE IF(有时写作 ELIF)和 ELSE 等结构。

选择结构的工作原理:
  1. 程序检查一个条件(例如:温度是否高于20度?)。
  2. 如果条件为真 (TRUE),则执行一段特定的代码块。
  3. 如果条件为假 (FALSE),则可能会执行另一段代码块(即 ELSE 部分)。

示例:

IF (User_is_18_or_older) THEN
    DISPLAY "欢迎,您可以进入。"
ELSE
    DISPLAY "禁止访问。"
END IF

重要提示: 当你有多个条件需要检查时,请使用 ELSE IF (ELIF),而 ELSE 则用于捕获所有不满足上述条件的情况。

快速回顾: 选择结构让你的程序能够从两个或多个可能性中选择一条执行路径。

1.3 迭代结构 (Iteration)

迭代是指多次重复执行一段代码。这对于节省时间、提升程序效率非常有用(想象一下如果需要手动写100遍 "print 'Hello'" 会有多麻烦!)。

你需要掌握两种主要的迭代结构:

1.3.1 固定迭代 (FOR 循环)

当你明确知道代码需要重复多少次时使用。这通常被称为计数控制循环

类比: 在健身房计数。你事先决定要做10个俯卧撑(循环正好重复10次)。

FOR Count FROM 1 TO 10 DO
    // 代码块将运行10次
END FOR

1.3.2 条件迭代 (WHILE 循环)

当你不知道代码需要重复的具体次数时使用。循环会一直重复,WHILE(当)某个条件保持为真(TRUE)时。这是一种条件控制循环

类比: 搅拌浓汤直到均匀。你不知道具体需要搅拌多少下,但只要浓汤还不均匀,你就一直搅拌。

WHILE (Score_is_less_than_100) DO
    Add_Points()
END WHILE

要避免的常见错误:死循环!
如果 WHILE 循环中的条件永远无法变为假(例如:WHILE 5 > 2 DO...),程序就会陷入无限循环,导致崩溃。请务必确保循环有明确的终止条件!


2. 模块化编程:过程与函数

随着程序规模的扩大,它们会变得难以管理。模块化编程通过将大型程序分解为更小、自成一体的微型程序(称为模块子程序)来解决这个问题。

2.1 为什么要使用模块(子程序)?

使用过程和函数至关重要,因为它们具有以下优势:

  • 可读性: 主程序看起来更简洁,更容易理解。
  • 可维护性: 如果出现错误(Bug),你只需在小模块中排查,而无需翻阅整个巨大的程序。
  • 可重用性: 你可以在代码的不同部分甚至不同的程序中多次使用同一个模块(例如计算税费),而无需重复编写代码。

2.2 过程 (Procedures)

过程是一组被赋予了名称的指令序列,旨在执行特定任务。

  • 它们用于执行动作(例如:显示消息、保存文件)。
  • 过程执行完指令后,会将控制权交还给主程序。
  • 关键点在于:它们不一定返回数值

示例: 一个过程可以命名为 DisplayWelcomeMessage()。它执行打印消息的动作并结束,不进行任何计算,也不返回结果。

2.3 函数 (Functions)

函数与过程类似,但有一个关键区别:

  • 函数旨在计算一个值
  • 函数必须返回一个值给主程序(或调用它的代码段)。
  • 它们就像小型的计算器。

示例: 一个函数可以命名为 CalculateArea()。你传入宽和高,它执行计算,并返回计算出的面积值。

记忆窍门: Function (函数) 总是返回一个 Final (最终) 答案(值)。过程只是按部就班地执行指令。

2.4 参数 (Parameters)

我们如何将数据传入过程和函数,以便它们开展工作呢?我们使用参数(有时也称为实参)。

参数是用于在调用子程序时向其中传递数据或信息的变量。

类比: 如果你的函数是一台搅拌机,那么参数就是你放入搅拌机里的食材(水果、牛奶),以便它能制作果昔。

当你定义函数或过程时,需要指定它所期望的参数:

FUNCTION CalculateArea (Width, Height)
    Area = Width * Height
    RETURN Area
END FUNCTION

当主程序调用这个函数时,它会提供具体的数据:

My_Space = CalculateArea(10, 5) // 10 和 5 是传递进去的值

在这个例子中:WidthHeight 是函数中定义的参数,而 105 是调用时赋予这些参数的实际值。

参数总结:
  • 它们允许模块在每次被调用时处理不同的数据。
  • 它们使代码更加灵活且易于重用。

你知道吗? 模块化编程在20世纪60年代是一个革命性的概念!在此之前,代码通常被写成一个庞大且混乱的块,调试起来简直是一场噩梦。结构化编程让开发复杂的软件成为了可能!


快速回顾:结构化编程精要

三大控制结构:

1. 顺序结构: 先做 A,再做 B,最后做 C。
2. 选择结构: 如果条件为真,则执行此操作。
3. 迭代结构: 重复执行代码(使用 FOR 进行固定次数循环,或使用 WHILE 在条件为真时持续循环)。

模块化编程:

过程: 执行任务;无需返回数值。
函数: 执行计算;必须返回数值。
参数: 传入子程序以使其能够执行任务的数据。