📌目录
- [⚖️ 结构化程序设计:从混乱到有序](#⚖️ 结构化程序设计:从混乱到有序)
-
- [🎯 一、结构化程序设计概述](#🎯 一、结构化程序设计概述)
- [📦 二、三种基本控制结构](#📦 二、三种基本控制结构)
- [🌐 三、结构化程序设计的原则](#🌐 三、结构化程序设计的原则)
- [💡 四、结构化程序设计的方法](#💡 四、结构化程序设计的方法)
- [📊 五、结构化程序设计的工具](#📊 五、结构化程序设计的工具)
- [📝 六、结构化程序设计的优缺点](#📝 六、结构化程序设计的优缺点)
- [📝 总结](#📝 总结)

⚖️ 结构化程序设计:从混乱到有序
结构化程序设计是一种程序设计方法学,它通过限制程序的控制流结构,使程序具有清晰的结构和良好的可读性。本文将详细介绍结构化程序设计的概念、基本结构、原则、方法和工具。

🎯 一、结构化程序设计概述
(一)结构化程序设计的定义
结构化程序设计(Structured Programming)是一种程序设计方法学,它主张使用顺序、选择、循环三种基本控制结构来构造程序,禁止或限制使用goto语句,使程序具有清晰的结构。
结构化程序设计概念:
#mermaid-svg-zDOVRFVpZhqZiuUZ{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-zDOVRFVpZhqZiuUZ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-zDOVRFVpZhqZiuUZ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-zDOVRFVpZhqZiuUZ .error-icon{fill:#552222;}#mermaid-svg-zDOVRFVpZhqZiuUZ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-zDOVRFVpZhqZiuUZ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-zDOVRFVpZhqZiuUZ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-zDOVRFVpZhqZiuUZ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-zDOVRFVpZhqZiuUZ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-zDOVRFVpZhqZiuUZ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-zDOVRFVpZhqZiuUZ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-zDOVRFVpZhqZiuUZ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-zDOVRFVpZhqZiuUZ .marker.cross{stroke:#333333;}#mermaid-svg-zDOVRFVpZhqZiuUZ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-zDOVRFVpZhqZiuUZ p{margin:0;}#mermaid-svg-zDOVRFVpZhqZiuUZ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-zDOVRFVpZhqZiuUZ .cluster-label text{fill:#333;}#mermaid-svg-zDOVRFVpZhqZiuUZ .cluster-label span{color:#333;}#mermaid-svg-zDOVRFVpZhqZiuUZ .cluster-label span p{background-color:transparent;}#mermaid-svg-zDOVRFVpZhqZiuUZ .label text,#mermaid-svg-zDOVRFVpZhqZiuUZ span{fill:#333;color:#333;}#mermaid-svg-zDOVRFVpZhqZiuUZ .node rect,#mermaid-svg-zDOVRFVpZhqZiuUZ .node circle,#mermaid-svg-zDOVRFVpZhqZiuUZ .node ellipse,#mermaid-svg-zDOVRFVpZhqZiuUZ .node polygon,#mermaid-svg-zDOVRFVpZhqZiuUZ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-zDOVRFVpZhqZiuUZ .rough-node .label text,#mermaid-svg-zDOVRFVpZhqZiuUZ .node .label text,#mermaid-svg-zDOVRFVpZhqZiuUZ .image-shape .label,#mermaid-svg-zDOVRFVpZhqZiuUZ .icon-shape .label{text-anchor:middle;}#mermaid-svg-zDOVRFVpZhqZiuUZ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-zDOVRFVpZhqZiuUZ .rough-node .label,#mermaid-svg-zDOVRFVpZhqZiuUZ .node .label,#mermaid-svg-zDOVRFVpZhqZiuUZ .image-shape .label,#mermaid-svg-zDOVRFVpZhqZiuUZ .icon-shape .label{text-align:center;}#mermaid-svg-zDOVRFVpZhqZiuUZ .node.clickable{cursor:pointer;}#mermaid-svg-zDOVRFVpZhqZiuUZ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-zDOVRFVpZhqZiuUZ .arrowheadPath{fill:#333333;}#mermaid-svg-zDOVRFVpZhqZiuUZ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-zDOVRFVpZhqZiuUZ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-zDOVRFVpZhqZiuUZ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-zDOVRFVpZhqZiuUZ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-zDOVRFVpZhqZiuUZ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-zDOVRFVpZhqZiuUZ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-zDOVRFVpZhqZiuUZ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-zDOVRFVpZhqZiuUZ .cluster text{fill:#333;}#mermaid-svg-zDOVRFVpZhqZiuUZ .cluster span{color:#333;}#mermaid-svg-zDOVRFVpZhqZiuUZ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-zDOVRFVpZhqZiuUZ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-zDOVRFVpZhqZiuUZ rect.text{fill:none;stroke-width:0;}#mermaid-svg-zDOVRFVpZhqZiuUZ .icon-shape,#mermaid-svg-zDOVRFVpZhqZiuUZ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-zDOVRFVpZhqZiuUZ .icon-shape p,#mermaid-svg-zDOVRFVpZhqZiuUZ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-zDOVRFVpZhqZiuUZ .icon-shape .label rect,#mermaid-svg-zDOVRFVpZhqZiuUZ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-zDOVRFVpZhqZiuUZ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-zDOVRFVpZhqZiuUZ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-zDOVRFVpZhqZiuUZ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 结构化程序设计
顺序结构
选择结构
循环结构
顺序执行
条件判断
重复执行
自顶向下
逐步求精
模块化
(二)结构化程序设计的历史
结构化程序设计历史:
| 时间 | 事件 | 意义 |
|---|---|---|
| 1966 | Bohm-Jacopini定理 | 证明三种基本结构足够 |
| 1968 | Dijkstra发表文章 | 反对goto语句 |
| 1970s | 结构化方法流行 | 成为主流方法 |
| 1980s | 面向对象兴起 | 结构化仍是基础 |
(三)结构化程序设计的特点
结构化程序设计特点:
| 特点 | 说明 |
|---|---|
| 自顶向下 | 从整体到局部 |
| 逐步求精 | 逐步细化 |
| 模块化 | 功能分解 |
| 限制goto | 避免无序跳转 |
| 单入口单出口 | 每个模块一个入口一个出口 |
📦 二、三种基本控制结构
(一)基本结构概述
三种基本控制结构:
#mermaid-svg-gMlNbSVPppK7JSCQ{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-gMlNbSVPppK7JSCQ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-gMlNbSVPppK7JSCQ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-gMlNbSVPppK7JSCQ .error-icon{fill:#552222;}#mermaid-svg-gMlNbSVPppK7JSCQ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-gMlNbSVPppK7JSCQ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-gMlNbSVPppK7JSCQ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-gMlNbSVPppK7JSCQ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-gMlNbSVPppK7JSCQ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-gMlNbSVPppK7JSCQ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-gMlNbSVPppK7JSCQ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-gMlNbSVPppK7JSCQ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-gMlNbSVPppK7JSCQ .marker.cross{stroke:#333333;}#mermaid-svg-gMlNbSVPppK7JSCQ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-gMlNbSVPppK7JSCQ p{margin:0;}#mermaid-svg-gMlNbSVPppK7JSCQ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-gMlNbSVPppK7JSCQ .cluster-label text{fill:#333;}#mermaid-svg-gMlNbSVPppK7JSCQ .cluster-label span{color:#333;}#mermaid-svg-gMlNbSVPppK7JSCQ .cluster-label span p{background-color:transparent;}#mermaid-svg-gMlNbSVPppK7JSCQ .label text,#mermaid-svg-gMlNbSVPppK7JSCQ span{fill:#333;color:#333;}#mermaid-svg-gMlNbSVPppK7JSCQ .node rect,#mermaid-svg-gMlNbSVPppK7JSCQ .node circle,#mermaid-svg-gMlNbSVPppK7JSCQ .node ellipse,#mermaid-svg-gMlNbSVPppK7JSCQ .node polygon,#mermaid-svg-gMlNbSVPppK7JSCQ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-gMlNbSVPppK7JSCQ .rough-node .label text,#mermaid-svg-gMlNbSVPppK7JSCQ .node .label text,#mermaid-svg-gMlNbSVPppK7JSCQ .image-shape .label,#mermaid-svg-gMlNbSVPppK7JSCQ .icon-shape .label{text-anchor:middle;}#mermaid-svg-gMlNbSVPppK7JSCQ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-gMlNbSVPppK7JSCQ .rough-node .label,#mermaid-svg-gMlNbSVPppK7JSCQ .node .label,#mermaid-svg-gMlNbSVPppK7JSCQ .image-shape .label,#mermaid-svg-gMlNbSVPppK7JSCQ .icon-shape .label{text-align:center;}#mermaid-svg-gMlNbSVPppK7JSCQ .node.clickable{cursor:pointer;}#mermaid-svg-gMlNbSVPppK7JSCQ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-gMlNbSVPppK7JSCQ .arrowheadPath{fill:#333333;}#mermaid-svg-gMlNbSVPppK7JSCQ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-gMlNbSVPppK7JSCQ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-gMlNbSVPppK7JSCQ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-gMlNbSVPppK7JSCQ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-gMlNbSVPppK7JSCQ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-gMlNbSVPppK7JSCQ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-gMlNbSVPppK7JSCQ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-gMlNbSVPppK7JSCQ .cluster text{fill:#333;}#mermaid-svg-gMlNbSVPppK7JSCQ .cluster span{color:#333;}#mermaid-svg-gMlNbSVPppK7JSCQ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-gMlNbSVPppK7JSCQ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-gMlNbSVPppK7JSCQ rect.text{fill:none;stroke-width:0;}#mermaid-svg-gMlNbSVPppK7JSCQ .icon-shape,#mermaid-svg-gMlNbSVPppK7JSCQ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-gMlNbSVPppK7JSCQ .icon-shape p,#mermaid-svg-gMlNbSVPppK7JSCQ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-gMlNbSVPppK7JSCQ .icon-shape .label rect,#mermaid-svg-gMlNbSVPppK7JSCQ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-gMlNbSVPppK7JSCQ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-gMlNbSVPppK7JSCQ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-gMlNbSVPppK7JSCQ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 基本结构
顺序结构
选择结构
循环结构
顺序执行
if-then-else
while, for
(二)顺序结构
顺序结构是最基本的结构,按顺序执行语句。
顺序结构特点:
| 特点 | 说明 |
|---|---|
| 顺序执行 | 按书写顺序执行 |
| 单入口单出口 | 一个入口一个出口 |
| 无分支 | 没有条件判断 |
顺序结构示例:
python
# 顺序结构示例
# 计算圆的面积
# 1. 输入半径
radius = 5.0
# 2. 计算面积(顺序执行)
pi = 3.14159
area = pi * radius * radius
# 3. 输出结果
print(f"半径:{radius}")
print(f"面积:{area}")
顺序结构流程图:
#mermaid-svg-4pdmbebokSrdAQZy{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-4pdmbebokSrdAQZy .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-4pdmbebokSrdAQZy .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-4pdmbebokSrdAQZy .error-icon{fill:#552222;}#mermaid-svg-4pdmbebokSrdAQZy .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-4pdmbebokSrdAQZy .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-4pdmbebokSrdAQZy .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-4pdmbebokSrdAQZy .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-4pdmbebokSrdAQZy .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-4pdmbebokSrdAQZy .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-4pdmbebokSrdAQZy .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-4pdmbebokSrdAQZy .marker{fill:#333333;stroke:#333333;}#mermaid-svg-4pdmbebokSrdAQZy .marker.cross{stroke:#333333;}#mermaid-svg-4pdmbebokSrdAQZy svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-4pdmbebokSrdAQZy p{margin:0;}#mermaid-svg-4pdmbebokSrdAQZy .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-4pdmbebokSrdAQZy .cluster-label text{fill:#333;}#mermaid-svg-4pdmbebokSrdAQZy .cluster-label span{color:#333;}#mermaid-svg-4pdmbebokSrdAQZy .cluster-label span p{background-color:transparent;}#mermaid-svg-4pdmbebokSrdAQZy .label text,#mermaid-svg-4pdmbebokSrdAQZy span{fill:#333;color:#333;}#mermaid-svg-4pdmbebokSrdAQZy .node rect,#mermaid-svg-4pdmbebokSrdAQZy .node circle,#mermaid-svg-4pdmbebokSrdAQZy .node ellipse,#mermaid-svg-4pdmbebokSrdAQZy .node polygon,#mermaid-svg-4pdmbebokSrdAQZy .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-4pdmbebokSrdAQZy .rough-node .label text,#mermaid-svg-4pdmbebokSrdAQZy .node .label text,#mermaid-svg-4pdmbebokSrdAQZy .image-shape .label,#mermaid-svg-4pdmbebokSrdAQZy .icon-shape .label{text-anchor:middle;}#mermaid-svg-4pdmbebokSrdAQZy .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-4pdmbebokSrdAQZy .rough-node .label,#mermaid-svg-4pdmbebokSrdAQZy .node .label,#mermaid-svg-4pdmbebokSrdAQZy .image-shape .label,#mermaid-svg-4pdmbebokSrdAQZy .icon-shape .label{text-align:center;}#mermaid-svg-4pdmbebokSrdAQZy .node.clickable{cursor:pointer;}#mermaid-svg-4pdmbebokSrdAQZy .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-4pdmbebokSrdAQZy .arrowheadPath{fill:#333333;}#mermaid-svg-4pdmbebokSrdAQZy .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-4pdmbebokSrdAQZy .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-4pdmbebokSrdAQZy .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-4pdmbebokSrdAQZy .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-4pdmbebokSrdAQZy .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-4pdmbebokSrdAQZy .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-4pdmbebokSrdAQZy .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-4pdmbebokSrdAQZy .cluster text{fill:#333;}#mermaid-svg-4pdmbebokSrdAQZy .cluster span{color:#333;}#mermaid-svg-4pdmbebokSrdAQZy div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-4pdmbebokSrdAQZy .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-4pdmbebokSrdAQZy rect.text{fill:none;stroke-width:0;}#mermaid-svg-4pdmbebokSrdAQZy .icon-shape,#mermaid-svg-4pdmbebokSrdAQZy .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-4pdmbebokSrdAQZy .icon-shape p,#mermaid-svg-4pdmbebokSrdAQZy .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-4pdmbebokSrdAQZy .icon-shape .label rect,#mermaid-svg-4pdmbebokSrdAQZy .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-4pdmbebokSrdAQZy .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-4pdmbebokSrdAQZy .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-4pdmbebokSrdAQZy :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 开始
输入radius
计算area
输出结果
结束
(三)选择结构
选择结构根据条件选择执行路径。
选择结构类型:
| 类型 | 说明 | 语法 |
|---|---|---|
| 单分支 | if | if condition: |
| 双分支 | if-else | if-else |
| 多分支 | if-elif-else | if-elif-else |
选择结构示例:
python
# 选择结构示例
# 判断成绩等级
score = 85
# 1. 单分支
if score >= 60:
print("及格")
# 2. 双分支
if score >= 60:
print("及格")
else:
print("不及格")
# 3. 多分支
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
else:
grade = "F"
print(f"成绩等级:{grade}")
选择结构流程图:
#mermaid-svg-SqTKF6UJ7bNrRk9K{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-SqTKF6UJ7bNrRk9K .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-SqTKF6UJ7bNrRk9K .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-SqTKF6UJ7bNrRk9K .error-icon{fill:#552222;}#mermaid-svg-SqTKF6UJ7bNrRk9K .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-SqTKF6UJ7bNrRk9K .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-SqTKF6UJ7bNrRk9K .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-SqTKF6UJ7bNrRk9K .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-SqTKF6UJ7bNrRk9K .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-SqTKF6UJ7bNrRk9K .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-SqTKF6UJ7bNrRk9K .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-SqTKF6UJ7bNrRk9K .marker{fill:#333333;stroke:#333333;}#mermaid-svg-SqTKF6UJ7bNrRk9K .marker.cross{stroke:#333333;}#mermaid-svg-SqTKF6UJ7bNrRk9K svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-SqTKF6UJ7bNrRk9K p{margin:0;}#mermaid-svg-SqTKF6UJ7bNrRk9K .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-SqTKF6UJ7bNrRk9K .cluster-label text{fill:#333;}#mermaid-svg-SqTKF6UJ7bNrRk9K .cluster-label span{color:#333;}#mermaid-svg-SqTKF6UJ7bNrRk9K .cluster-label span p{background-color:transparent;}#mermaid-svg-SqTKF6UJ7bNrRk9K .label text,#mermaid-svg-SqTKF6UJ7bNrRk9K span{fill:#333;color:#333;}#mermaid-svg-SqTKF6UJ7bNrRk9K .node rect,#mermaid-svg-SqTKF6UJ7bNrRk9K .node circle,#mermaid-svg-SqTKF6UJ7bNrRk9K .node ellipse,#mermaid-svg-SqTKF6UJ7bNrRk9K .node polygon,#mermaid-svg-SqTKF6UJ7bNrRk9K .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-SqTKF6UJ7bNrRk9K .rough-node .label text,#mermaid-svg-SqTKF6UJ7bNrRk9K .node .label text,#mermaid-svg-SqTKF6UJ7bNrRk9K .image-shape .label,#mermaid-svg-SqTKF6UJ7bNrRk9K .icon-shape .label{text-anchor:middle;}#mermaid-svg-SqTKF6UJ7bNrRk9K .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-SqTKF6UJ7bNrRk9K .rough-node .label,#mermaid-svg-SqTKF6UJ7bNrRk9K .node .label,#mermaid-svg-SqTKF6UJ7bNrRk9K .image-shape .label,#mermaid-svg-SqTKF6UJ7bNrRk9K .icon-shape .label{text-align:center;}#mermaid-svg-SqTKF6UJ7bNrRk9K .node.clickable{cursor:pointer;}#mermaid-svg-SqTKF6UJ7bNrRk9K .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-SqTKF6UJ7bNrRk9K .arrowheadPath{fill:#333333;}#mermaid-svg-SqTKF6UJ7bNrRk9K .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-SqTKF6UJ7bNrRk9K .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-SqTKF6UJ7bNrRk9K .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-SqTKF6UJ7bNrRk9K .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-SqTKF6UJ7bNrRk9K .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-SqTKF6UJ7bNrRk9K .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-SqTKF6UJ7bNrRk9K .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-SqTKF6UJ7bNrRk9K .cluster text{fill:#333;}#mermaid-svg-SqTKF6UJ7bNrRk9K .cluster span{color:#333;}#mermaid-svg-SqTKF6UJ7bNrRk9K div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-SqTKF6UJ7bNrRk9K .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-SqTKF6UJ7bNrRk9K rect.text{fill:none;stroke-width:0;}#mermaid-svg-SqTKF6UJ7bNrRk9K .icon-shape,#mermaid-svg-SqTKF6UJ7bNrRk9K .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-SqTKF6UJ7bNrRk9K .icon-shape p,#mermaid-svg-SqTKF6UJ7bNrRk9K .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-SqTKF6UJ7bNrRk9K .icon-shape .label rect,#mermaid-svg-SqTKF6UJ7bNrRk9K .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-SqTKF6UJ7bNrRk9K .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-SqTKF6UJ7bNrRk9K .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-SqTKF6UJ7bNrRk9K :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是
否
是
否
是
否
是
否
开始
score >= 90?
grade = A
score >= 80?
grade = B
score >= 70?
grade = C
score >= 60?
grade = D
grade = F
输出grade
结束
(四)循环结构
循环结构重复执行语句块。
循环结构类型:
| 类型 | 说明 | 语法 |
|---|---|---|
| while循环 | 先判断后执行 | while condition: |
| for循环 | 计数循环 | for item in iterable: |
| do-while | 先执行后判断 | 不直接支持 |
循环结构示例:
python
# 循环结构示例
# 1. while循环 - 计算1到100的和
total = 0
i = 1
while i <= 100:
total += i
i += 1
print(f"1到100的和:{total}")
# 2. for循环 - 遍历列表
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(f"水果:{fruit}")
# 3. for循环 - 计算阶乘
n = 5
factorial = 1
for i in range(1, n + 1):
factorial *= i
print(f"{n}的阶乘:{factorial}")
# 4. 嵌套循环 - 打印九九乘法表
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{j}×{i}={i*j}", end="\t")
print()
循环结构流程图:
#mermaid-svg-rs5MML6IgI1LMh6l{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-rs5MML6IgI1LMh6l .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-rs5MML6IgI1LMh6l .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-rs5MML6IgI1LMh6l .error-icon{fill:#552222;}#mermaid-svg-rs5MML6IgI1LMh6l .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-rs5MML6IgI1LMh6l .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-rs5MML6IgI1LMh6l .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-rs5MML6IgI1LMh6l .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-rs5MML6IgI1LMh6l .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-rs5MML6IgI1LMh6l .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-rs5MML6IgI1LMh6l .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-rs5MML6IgI1LMh6l .marker{fill:#333333;stroke:#333333;}#mermaid-svg-rs5MML6IgI1LMh6l .marker.cross{stroke:#333333;}#mermaid-svg-rs5MML6IgI1LMh6l svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-rs5MML6IgI1LMh6l p{margin:0;}#mermaid-svg-rs5MML6IgI1LMh6l .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-rs5MML6IgI1LMh6l .cluster-label text{fill:#333;}#mermaid-svg-rs5MML6IgI1LMh6l .cluster-label span{color:#333;}#mermaid-svg-rs5MML6IgI1LMh6l .cluster-label span p{background-color:transparent;}#mermaid-svg-rs5MML6IgI1LMh6l .label text,#mermaid-svg-rs5MML6IgI1LMh6l span{fill:#333;color:#333;}#mermaid-svg-rs5MML6IgI1LMh6l .node rect,#mermaid-svg-rs5MML6IgI1LMh6l .node circle,#mermaid-svg-rs5MML6IgI1LMh6l .node ellipse,#mermaid-svg-rs5MML6IgI1LMh6l .node polygon,#mermaid-svg-rs5MML6IgI1LMh6l .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-rs5MML6IgI1LMh6l .rough-node .label text,#mermaid-svg-rs5MML6IgI1LMh6l .node .label text,#mermaid-svg-rs5MML6IgI1LMh6l .image-shape .label,#mermaid-svg-rs5MML6IgI1LMh6l .icon-shape .label{text-anchor:middle;}#mermaid-svg-rs5MML6IgI1LMh6l .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-rs5MML6IgI1LMh6l .rough-node .label,#mermaid-svg-rs5MML6IgI1LMh6l .node .label,#mermaid-svg-rs5MML6IgI1LMh6l .image-shape .label,#mermaid-svg-rs5MML6IgI1LMh6l .icon-shape .label{text-align:center;}#mermaid-svg-rs5MML6IgI1LMh6l .node.clickable{cursor:pointer;}#mermaid-svg-rs5MML6IgI1LMh6l .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-rs5MML6IgI1LMh6l .arrowheadPath{fill:#333333;}#mermaid-svg-rs5MML6IgI1LMh6l .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-rs5MML6IgI1LMh6l .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-rs5MML6IgI1LMh6l .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-rs5MML6IgI1LMh6l .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-rs5MML6IgI1LMh6l .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-rs5MML6IgI1LMh6l .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-rs5MML6IgI1LMh6l .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-rs5MML6IgI1LMh6l .cluster text{fill:#333;}#mermaid-svg-rs5MML6IgI1LMh6l .cluster span{color:#333;}#mermaid-svg-rs5MML6IgI1LMh6l div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-rs5MML6IgI1LMh6l .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-rs5MML6IgI1LMh6l rect.text{fill:none;stroke-width:0;}#mermaid-svg-rs5MML6IgI1LMh6l .icon-shape,#mermaid-svg-rs5MML6IgI1LMh6l .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-rs5MML6IgI1LMh6l .icon-shape p,#mermaid-svg-rs5MML6IgI1LMh6l .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-rs5MML6IgI1LMh6l .icon-shape .label rect,#mermaid-svg-rs5MML6IgI1LMh6l .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-rs5MML6IgI1LMh6l .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-rs5MML6IgI1LMh6l .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-rs5MML6IgI1LMh6l :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是
否
开始
total=0, i=1
i <= 100?
total += i
i += 1
输出total
结束
🌐 三、结构化程序设计的原则
(一)原则概述
结构化程序设计原则:
#mermaid-svg-TqdZcCsOdeh61DO3{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-TqdZcCsOdeh61DO3 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-TqdZcCsOdeh61DO3 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-TqdZcCsOdeh61DO3 .error-icon{fill:#552222;}#mermaid-svg-TqdZcCsOdeh61DO3 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-TqdZcCsOdeh61DO3 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-TqdZcCsOdeh61DO3 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-TqdZcCsOdeh61DO3 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-TqdZcCsOdeh61DO3 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-TqdZcCsOdeh61DO3 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-TqdZcCsOdeh61DO3 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-TqdZcCsOdeh61DO3 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-TqdZcCsOdeh61DO3 .marker.cross{stroke:#333333;}#mermaid-svg-TqdZcCsOdeh61DO3 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-TqdZcCsOdeh61DO3 p{margin:0;}#mermaid-svg-TqdZcCsOdeh61DO3 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-TqdZcCsOdeh61DO3 .cluster-label text{fill:#333;}#mermaid-svg-TqdZcCsOdeh61DO3 .cluster-label span{color:#333;}#mermaid-svg-TqdZcCsOdeh61DO3 .cluster-label span p{background-color:transparent;}#mermaid-svg-TqdZcCsOdeh61DO3 .label text,#mermaid-svg-TqdZcCsOdeh61DO3 span{fill:#333;color:#333;}#mermaid-svg-TqdZcCsOdeh61DO3 .node rect,#mermaid-svg-TqdZcCsOdeh61DO3 .node circle,#mermaid-svg-TqdZcCsOdeh61DO3 .node ellipse,#mermaid-svg-TqdZcCsOdeh61DO3 .node polygon,#mermaid-svg-TqdZcCsOdeh61DO3 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-TqdZcCsOdeh61DO3 .rough-node .label text,#mermaid-svg-TqdZcCsOdeh61DO3 .node .label text,#mermaid-svg-TqdZcCsOdeh61DO3 .image-shape .label,#mermaid-svg-TqdZcCsOdeh61DO3 .icon-shape .label{text-anchor:middle;}#mermaid-svg-TqdZcCsOdeh61DO3 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-TqdZcCsOdeh61DO3 .rough-node .label,#mermaid-svg-TqdZcCsOdeh61DO3 .node .label,#mermaid-svg-TqdZcCsOdeh61DO3 .image-shape .label,#mermaid-svg-TqdZcCsOdeh61DO3 .icon-shape .label{text-align:center;}#mermaid-svg-TqdZcCsOdeh61DO3 .node.clickable{cursor:pointer;}#mermaid-svg-TqdZcCsOdeh61DO3 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-TqdZcCsOdeh61DO3 .arrowheadPath{fill:#333333;}#mermaid-svg-TqdZcCsOdeh61DO3 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-TqdZcCsOdeh61DO3 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-TqdZcCsOdeh61DO3 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-TqdZcCsOdeh61DO3 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-TqdZcCsOdeh61DO3 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-TqdZcCsOdeh61DO3 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-TqdZcCsOdeh61DO3 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-TqdZcCsOdeh61DO3 .cluster text{fill:#333;}#mermaid-svg-TqdZcCsOdeh61DO3 .cluster span{color:#333;}#mermaid-svg-TqdZcCsOdeh61DO3 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-TqdZcCsOdeh61DO3 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-TqdZcCsOdeh61DO3 rect.text{fill:none;stroke-width:0;}#mermaid-svg-TqdZcCsOdeh61DO3 .icon-shape,#mermaid-svg-TqdZcCsOdeh61DO3 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-TqdZcCsOdeh61DO3 .icon-shape p,#mermaid-svg-TqdZcCsOdeh61DO3 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-TqdZcCsOdeh61DO3 .icon-shape .label rect,#mermaid-svg-TqdZcCsOdeh61DO3 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-TqdZcCsOdeh61DO3 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-TqdZcCsOdeh61DO3 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-TqdZcCsOdeh61DO3 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 设计原则
自顶向下
逐步求精
模块化
限制goto
从整体到局部
逐步细化
功能分解
避免无序跳转
(二)自顶向下原则
自顶向下是从整体到局部的设计方法。
自顶向下过程:
#mermaid-svg-IYXPpHPOz2aPee39{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-IYXPpHPOz2aPee39 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-IYXPpHPOz2aPee39 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-IYXPpHPOz2aPee39 .error-icon{fill:#552222;}#mermaid-svg-IYXPpHPOz2aPee39 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-IYXPpHPOz2aPee39 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-IYXPpHPOz2aPee39 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-IYXPpHPOz2aPee39 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-IYXPpHPOz2aPee39 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-IYXPpHPOz2aPee39 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-IYXPpHPOz2aPee39 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-IYXPpHPOz2aPee39 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-IYXPpHPOz2aPee39 .marker.cross{stroke:#333333;}#mermaid-svg-IYXPpHPOz2aPee39 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-IYXPpHPOz2aPee39 p{margin:0;}#mermaid-svg-IYXPpHPOz2aPee39 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-IYXPpHPOz2aPee39 .cluster-label text{fill:#333;}#mermaid-svg-IYXPpHPOz2aPee39 .cluster-label span{color:#333;}#mermaid-svg-IYXPpHPOz2aPee39 .cluster-label span p{background-color:transparent;}#mermaid-svg-IYXPpHPOz2aPee39 .label text,#mermaid-svg-IYXPpHPOz2aPee39 span{fill:#333;color:#333;}#mermaid-svg-IYXPpHPOz2aPee39 .node rect,#mermaid-svg-IYXPpHPOz2aPee39 .node circle,#mermaid-svg-IYXPpHPOz2aPee39 .node ellipse,#mermaid-svg-IYXPpHPOz2aPee39 .node polygon,#mermaid-svg-IYXPpHPOz2aPee39 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-IYXPpHPOz2aPee39 .rough-node .label text,#mermaid-svg-IYXPpHPOz2aPee39 .node .label text,#mermaid-svg-IYXPpHPOz2aPee39 .image-shape .label,#mermaid-svg-IYXPpHPOz2aPee39 .icon-shape .label{text-anchor:middle;}#mermaid-svg-IYXPpHPOz2aPee39 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-IYXPpHPOz2aPee39 .rough-node .label,#mermaid-svg-IYXPpHPOz2aPee39 .node .label,#mermaid-svg-IYXPpHPOz2aPee39 .image-shape .label,#mermaid-svg-IYXPpHPOz2aPee39 .icon-shape .label{text-align:center;}#mermaid-svg-IYXPpHPOz2aPee39 .node.clickable{cursor:pointer;}#mermaid-svg-IYXPpHPOz2aPee39 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-IYXPpHPOz2aPee39 .arrowheadPath{fill:#333333;}#mermaid-svg-IYXPpHPOz2aPee39 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-IYXPpHPOz2aPee39 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-IYXPpHPOz2aPee39 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-IYXPpHPOz2aPee39 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-IYXPpHPOz2aPee39 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-IYXPpHPOz2aPee39 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-IYXPpHPOz2aPee39 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-IYXPpHPOz2aPee39 .cluster text{fill:#333;}#mermaid-svg-IYXPpHPOz2aPee39 .cluster span{color:#333;}#mermaid-svg-IYXPpHPOz2aPee39 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-IYXPpHPOz2aPee39 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-IYXPpHPOz2aPee39 rect.text{fill:none;stroke-width:0;}#mermaid-svg-IYXPpHPOz2aPee39 .icon-shape,#mermaid-svg-IYXPpHPOz2aPee39 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-IYXPpHPOz2aPee39 .icon-shape p,#mermaid-svg-IYXPpHPOz2aPee39 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-IYXPpHPOz2aPee39 .icon-shape .label rect,#mermaid-svg-IYXPpHPOz2aPee39 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-IYXPpHPOz2aPee39 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-IYXPpHPOz2aPee39 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-IYXPpHPOz2aPee39 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 顶层模块
第二层模块
第二层模块
第三层模块
第三层模块
第三层模块
自顶向下示例:
python
# 自顶向下设计示例
# 学生成绩管理系统
# 顶层模块
def student_management_system():
"""学生成绩管理系统 - 顶层"""
print("=== 学生成绩管理系统 ===")
while True:
show_menu()
choice = get_user_choice()
if choice == 1:
input_scores()
elif choice == 2:
calculate_statistics()
elif choice == 3:
display_results()
elif choice == 0:
print("退出系统")
break
# 第二层模块
def show_menu():
"""显示菜单"""
print("\n1. 输入成绩")
print("2. 计算统计")
print("3. 显示结果")
print("0. 退出")
def get_user_choice():
"""获取用户选择"""
while True:
try:
choice = int(input("请选择:"))
if 0 <= choice <= 3:
return choice
print("无效选择,请重新输入")
except ValueError:
print("请输入数字")
def input_scores():
"""输入成绩 - 第二层"""
print("\n--- 输入成绩 ---")
# 调用第三层模块
scores = collect_scores()
validate_scores(scores)
return scores
def calculate_statistics():
"""计算统计 - 第二层"""
print("\n--- 计算统计 ---")
# 调用第三层模块
scores = get_saved_scores()
stats = compute_statistics(scores)
display_statistics(stats)
def display_results():
"""显示结果 - 第二层"""
print("\n--- 显示结果 ---")
# 调用第三层模块
scores = get_saved_scores()
format_output(scores)
# 第三层模块
def collect_scores():
"""收集成绩"""
scores = []
while True:
score = input("输入成绩(空行结束):")
if score == "":
break
scores.append(float(score))
return scores
def validate_scores(scores):
"""验证成绩"""
for score in scores:
if not 0 <= score <= 100:
print(f"警告:成绩{score}超出范围")
def compute_statistics(scores):
"""计算统计数据"""
if not scores:
return None
return {
"count": len(scores),
"sum": sum(scores),
"avg": sum(scores) / len(scores),
"max": max(scores),
"min": min(scores)
}
def display_statistics(stats):
"""显示统计结果"""
if stats:
print(f"人数:{stats['count']}")
print(f"总分:{stats['sum']}")
print(f"平均分:{stats['avg']:.2f}")
print(f"最高分:{stats['max']}")
print(f"最低分:{stats['min']}")
def format_output(scores):
"""格式化输出"""
for i, score in enumerate(scores, 1):
print(f"学生{i}: {score}")
# 辅助函数
def get_saved_scores():
"""获取保存的成绩"""
return [85, 90, 78, 92, 88]
# 运行系统
# student_management_system()
(三)逐步求精原则
逐步求精是将复杂问题逐步分解为简单子问题。
逐步求精过程:
#mermaid-svg-DGkeHWTtFGfaJIeo{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-DGkeHWTtFGfaJIeo .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-DGkeHWTtFGfaJIeo .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-DGkeHWTtFGfaJIeo .error-icon{fill:#552222;}#mermaid-svg-DGkeHWTtFGfaJIeo .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-DGkeHWTtFGfaJIeo .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-DGkeHWTtFGfaJIeo .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-DGkeHWTtFGfaJIeo .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-DGkeHWTtFGfaJIeo .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-DGkeHWTtFGfaJIeo .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-DGkeHWTtFGfaJIeo .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-DGkeHWTtFGfaJIeo .marker{fill:#333333;stroke:#333333;}#mermaid-svg-DGkeHWTtFGfaJIeo .marker.cross{stroke:#333333;}#mermaid-svg-DGkeHWTtFGfaJIeo svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-DGkeHWTtFGfaJIeo p{margin:0;}#mermaid-svg-DGkeHWTtFGfaJIeo .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-DGkeHWTtFGfaJIeo .cluster-label text{fill:#333;}#mermaid-svg-DGkeHWTtFGfaJIeo .cluster-label span{color:#333;}#mermaid-svg-DGkeHWTtFGfaJIeo .cluster-label span p{background-color:transparent;}#mermaid-svg-DGkeHWTtFGfaJIeo .label text,#mermaid-svg-DGkeHWTtFGfaJIeo span{fill:#333;color:#333;}#mermaid-svg-DGkeHWTtFGfaJIeo .node rect,#mermaid-svg-DGkeHWTtFGfaJIeo .node circle,#mermaid-svg-DGkeHWTtFGfaJIeo .node ellipse,#mermaid-svg-DGkeHWTtFGfaJIeo .node polygon,#mermaid-svg-DGkeHWTtFGfaJIeo .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-DGkeHWTtFGfaJIeo .rough-node .label text,#mermaid-svg-DGkeHWTtFGfaJIeo .node .label text,#mermaid-svg-DGkeHWTtFGfaJIeo .image-shape .label,#mermaid-svg-DGkeHWTtFGfaJIeo .icon-shape .label{text-anchor:middle;}#mermaid-svg-DGkeHWTtFGfaJIeo .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-DGkeHWTtFGfaJIeo .rough-node .label,#mermaid-svg-DGkeHWTtFGfaJIeo .node .label,#mermaid-svg-DGkeHWTtFGfaJIeo .image-shape .label,#mermaid-svg-DGkeHWTtFGfaJIeo .icon-shape .label{text-align:center;}#mermaid-svg-DGkeHWTtFGfaJIeo .node.clickable{cursor:pointer;}#mermaid-svg-DGkeHWTtFGfaJIeo .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-DGkeHWTtFGfaJIeo .arrowheadPath{fill:#333333;}#mermaid-svg-DGkeHWTtFGfaJIeo .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-DGkeHWTtFGfaJIeo .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-DGkeHWTtFGfaJIeo .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DGkeHWTtFGfaJIeo .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-DGkeHWTtFGfaJIeo .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DGkeHWTtFGfaJIeo .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-DGkeHWTtFGfaJIeo .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-DGkeHWTtFGfaJIeo .cluster text{fill:#333;}#mermaid-svg-DGkeHWTtFGfaJIeo .cluster span{color:#333;}#mermaid-svg-DGkeHWTtFGfaJIeo div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-DGkeHWTtFGfaJIeo .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-DGkeHWTtFGfaJIeo rect.text{fill:none;stroke-width:0;}#mermaid-svg-DGkeHWTtFGfaJIeo .icon-shape,#mermaid-svg-DGkeHWTtFGfaJIeo .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DGkeHWTtFGfaJIeo .icon-shape p,#mermaid-svg-DGkeHWTtFGfaJIeo .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-DGkeHWTtFGfaJIeo .icon-shape .label rect,#mermaid-svg-DGkeHWTtFGfaJIeo .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DGkeHWTtFGfaJIeo .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-DGkeHWTtFGfaJIeo .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-DGkeHWTtFGfaJIeo :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 问题
初步解
细化1
细化2
细化3
最终解
逐步求精示例:
python
# 逐步求精示例
# 问题:找出100以内的素数
# 第一步:初步解
def find_primes_v1():
"""找出100以内的素数 - 初步"""
primes = []
for n in range(2, 101):
if is_prime(n):
primes.append(n)
return primes
# 第二步:细化is_prime函数
def is_prime_v1(n):
"""判断素数 - 细化1"""
if n < 2:
return False
for i in range(2, n):
if n % i == 0:
return False
return True
# 第三步:优化is_prime函数
def is_prime_v2(n):
"""判断素数 - 细化2"""
if n < 2:
return False
if n == 2:
return True
if n % 2 == 0:
return False
# 只需检查到sqrt(n)
for i in range(3, int(n**0.5) + 1, 2):
if n % i == 0:
return False
return True
# 第四步:最终优化
def is_prime(n):
"""判断素数 - 最终版本"""
if n < 2:
return False
if n in (2, 3):
return True
if n % 2 == 0 or n % 3 == 0:
return False
i = 5
while i * i <= n:
if n % i == 0 or n % (i + 2) == 0:
return False
i += 6
return True
def find_primes():
"""找出100以内的素数 - 最终版本"""
return [n for n in range(2, 101) if is_prime(n)]
# 测试
primes = find_primes()
print(f"100以内的素数:{primes}")
print(f"共{len(primes)}个素数")
(四)模块化原则
模块化是将程序分解为独立的模块。
模块化优点:
| 优点 | 说明 |
|---|---|
| 可理解 | 模块功能单一 |
| 可测试 | 模块独立测试 |
| 可维护 | 模块独立维护 |
| 可复用 | 模块可以复用 |
模块化示例:
python
# 模块化示例
# 图书管理系统
# 模块1:数据模块
class BookData:
"""图书数据模块"""
def __init__(self):
self.books = {}
def add_book(self, book_id, title, author):
"""添加图书"""
self.books[book_id] = {
"title": title,
"author": author,
"is_borrowed": False
}
def get_book(self, book_id):
"""获取图书"""
return self.books.get(book_id)
def get_all_books(self):
"""获取所有图书"""
return self.books
# 模块2:业务模块
class BookService:
"""图书业务模块"""
def __init__(self, data_module):
self.data = data_module
def borrow_book(self, book_id):
"""借阅图书"""
book = self.data.get_book(book_id)
if book and not book["is_borrowed"]:
book["is_borrowed"] = True
return True
return False
def return_book(self, book_id):
"""归还图书"""
book = self.data.get_book(book_id)
if book and book["is_borrowed"]:
book["is_borrowed"] = False
return True
return False
# 模块3:界面模块
class BookView:
"""图书界面模块"""
def __init__(self, service_module):
self.service = service_module
def display_books(self, books):
"""显示图书"""
print("\n=== 图书列表 ===")
for book_id, book in books.items():
status = "已借出" if book["is_borrowed"] else "可借阅"
print(f"{book_id}: 《{book['title']}》- {book['author']} [{status}]")
def display_message(self, message):
"""显示消息"""
print(f"\n{message}")
# 主程序
def main():
"""主程序"""
# 创建模块
data = BookData()
service = BookService(data)
view = BookView(service)
# 添加图书
data.add_book("B001", "Python编程", "张三")
data.add_book("B002", "Java编程", "李四")
data.add_book("B003", "C++编程", "王五")
# 显示图书
view.display_books(data.get_all_books())
# 借阅图书
if service.borrow_book("B001"):
view.display_message("借阅成功")
# 再次显示
view.display_books(data.get_all_books())
# 运行
# main()
(五)限制goto原则
限制goto是避免使用goto语句。
goto的问题:
| 问题 | 说明 |
|---|---|
| 破坏结构 | 破坏程序结构 |
| 难以理解 | 难以理解程序流程 |
| 难以维护 | 难以维护和修改 |
| 难以测试 | 难以测试程序 |
goto替代方案:
python
# goto替代方案示例
# 问题:使用goto的代码(Python不支持goto,用注释说明)
"""
# 使用goto的代码(伪代码)
i = 0
loop:
if i >= 10:
goto end
print(i)
i += 1
goto loop
end:
print("结束")
"""
# 替代方案1:使用while循环
i = 0
while i < 10:
print(i)
i += 1
print("结束")
# 替代方案2:使用for循环
for i in range(10):
print(i)
print("结束")
# 问题:使用goto跳出多层循环(伪代码)
"""
for i in range(10):
for j in range(10):
if condition:
goto end
end:
"""
# 替代方案:使用标志变量
found = False
for i in range(10):
for j in range(10):
if i == 5 and j == 5:
found = True
break
if found:
break
print(f"找到:{i}, {j}")
# 替代方案:使用函数和return
def search():
for i in range(10):
for j in range(10):
if i == 5 and j == 5:
return i, j
return None
result = search()
print(f"找到:{result}")
# 替代方案:使用异常
class FoundException(Exception):
pass
try:
for i in range(10):
for j in range(10):
if i == 5 and j == 5:
raise FoundException()
except FoundException:
print(f"找到:{i}, {j}")
💡 四、结构化程序设计的方法
(一)方法概述
结构化程序设计方法:
#mermaid-svg-EzJ4nZu9JSYB8Snn{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-EzJ4nZu9JSYB8Snn .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-EzJ4nZu9JSYB8Snn .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-EzJ4nZu9JSYB8Snn .error-icon{fill:#552222;}#mermaid-svg-EzJ4nZu9JSYB8Snn .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-EzJ4nZu9JSYB8Snn .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-EzJ4nZu9JSYB8Snn .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-EzJ4nZu9JSYB8Snn .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-EzJ4nZu9JSYB8Snn .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-EzJ4nZu9JSYB8Snn .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-EzJ4nZu9JSYB8Snn .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-EzJ4nZu9JSYB8Snn .marker{fill:#333333;stroke:#333333;}#mermaid-svg-EzJ4nZu9JSYB8Snn .marker.cross{stroke:#333333;}#mermaid-svg-EzJ4nZu9JSYB8Snn svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-EzJ4nZu9JSYB8Snn p{margin:0;}#mermaid-svg-EzJ4nZu9JSYB8Snn .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-EzJ4nZu9JSYB8Snn .cluster-label text{fill:#333;}#mermaid-svg-EzJ4nZu9JSYB8Snn .cluster-label span{color:#333;}#mermaid-svg-EzJ4nZu9JSYB8Snn .cluster-label span p{background-color:transparent;}#mermaid-svg-EzJ4nZu9JSYB8Snn .label text,#mermaid-svg-EzJ4nZu9JSYB8Snn span{fill:#333;color:#333;}#mermaid-svg-EzJ4nZu9JSYB8Snn .node rect,#mermaid-svg-EzJ4nZu9JSYB8Snn .node circle,#mermaid-svg-EzJ4nZu9JSYB8Snn .node ellipse,#mermaid-svg-EzJ4nZu9JSYB8Snn .node polygon,#mermaid-svg-EzJ4nZu9JSYB8Snn .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-EzJ4nZu9JSYB8Snn .rough-node .label text,#mermaid-svg-EzJ4nZu9JSYB8Snn .node .label text,#mermaid-svg-EzJ4nZu9JSYB8Snn .image-shape .label,#mermaid-svg-EzJ4nZu9JSYB8Snn .icon-shape .label{text-anchor:middle;}#mermaid-svg-EzJ4nZu9JSYB8Snn .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-EzJ4nZu9JSYB8Snn .rough-node .label,#mermaid-svg-EzJ4nZu9JSYB8Snn .node .label,#mermaid-svg-EzJ4nZu9JSYB8Snn .image-shape .label,#mermaid-svg-EzJ4nZu9JSYB8Snn .icon-shape .label{text-align:center;}#mermaid-svg-EzJ4nZu9JSYB8Snn .node.clickable{cursor:pointer;}#mermaid-svg-EzJ4nZu9JSYB8Snn .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-EzJ4nZu9JSYB8Snn .arrowheadPath{fill:#333333;}#mermaid-svg-EzJ4nZu9JSYB8Snn .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-EzJ4nZu9JSYB8Snn .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-EzJ4nZu9JSYB8Snn .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-EzJ4nZu9JSYB8Snn .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-EzJ4nZu9JSYB8Snn .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-EzJ4nZu9JSYB8Snn .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-EzJ4nZu9JSYB8Snn .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-EzJ4nZu9JSYB8Snn .cluster text{fill:#333;}#mermaid-svg-EzJ4nZu9JSYB8Snn .cluster span{color:#333;}#mermaid-svg-EzJ4nZu9JSYB8Snn div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-EzJ4nZu9JSYB8Snn .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-EzJ4nZu9JSYB8Snn rect.text{fill:none;stroke-width:0;}#mermaid-svg-EzJ4nZu9JSYB8Snn .icon-shape,#mermaid-svg-EzJ4nZu9JSYB8Snn .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-EzJ4nZu9JSYB8Snn .icon-shape p,#mermaid-svg-EzJ4nZu9JSYB8Snn .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-EzJ4nZu9JSYB8Snn .icon-shape .label rect,#mermaid-svg-EzJ4nZu9JSYB8Snn .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-EzJ4nZu9JSYB8Snn .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-EzJ4nZu9JSYB8Snn .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-EzJ4nZu9JSYB8Snn :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 设计方法
自顶向下
逐步求精
模块化设计
结构图
从整体到局部
逐步细化
功能分解
模块结构
(二)自顶向下设计
自顶向下设计是从整体到局部的设计过程。
自顶向下设计步骤:
| 步骤 | 说明 |
|---|---|
| 确定顶层 | 确定系统顶层模块 |
| 分解功能 | 将功能分解为子功能 |
| 逐层细化 | 逐层细化每个模块 |
| 实现模块 | 实现底层模块 |
自顶向下设计示例:
python
# 自顶向下设计示例
# 计算器程序
# 顶层:主程序
def calculator():
"""计算器主程序"""
print("=== 简单计算器 ===")
while True:
# 获取输入
expression = get_input()
if expression.lower() == 'q':
break
# 处理表达式
result = process_expression(expression)
# 显示结果
display_result(result)
# 第二层:获取输入
def get_input():
"""获取用户输入"""
return input("输入表达式(q退出):")
# 第二层:处理表达式
def process_expression(expression):
"""处理表达式"""
try:
# 解析表达式
left, op, right = parse_expression(expression)
# 计算结果
result = calculate(left, op, right)
return result
except Exception as e:
return f"错误:{e}"
# 第二层:显示结果
def display_result(result):
"""显示结果"""
print(f"结果:{result}")
# 第三层:解析表达式
def parse_expression(expression):
"""解析表达式"""
# 简单解析:数字 运算符 数字
parts = expression.split()
if len(parts) != 3:
raise ValueError("格式错误,应为:数字 运算符 数字")
left = float(parts[0])
op = parts[1]
right = float(parts[2])
return left, op, right
# 第三层:计算
def calculate(left, op, right):
"""计算结果"""
if op == '+':
return left + right
elif op == '-':
return left - right
elif op == '*':
return left * right
elif op == '/':
if right == 0:
raise ValueError("除数不能为零")
return left / right
else:
raise ValueError(f"不支持的运算符:{op}")
# 运行计算器
# calculator()
(三)逐步求精方法
逐步求精是将抽象描述逐步具体化。
逐步求精过程:
#mermaid-svg-sOmlbb6jwa0TQeZN{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-sOmlbb6jwa0TQeZN .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-sOmlbb6jwa0TQeZN .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-sOmlbb6jwa0TQeZN .error-icon{fill:#552222;}#mermaid-svg-sOmlbb6jwa0TQeZN .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-sOmlbb6jwa0TQeZN .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-sOmlbb6jwa0TQeZN .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-sOmlbb6jwa0TQeZN .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-sOmlbb6jwa0TQeZN .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-sOmlbb6jwa0TQeZN .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-sOmlbb6jwa0TQeZN .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-sOmlbb6jwa0TQeZN .marker{fill:#333333;stroke:#333333;}#mermaid-svg-sOmlbb6jwa0TQeZN .marker.cross{stroke:#333333;}#mermaid-svg-sOmlbb6jwa0TQeZN svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-sOmlbb6jwa0TQeZN p{margin:0;}#mermaid-svg-sOmlbb6jwa0TQeZN .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-sOmlbb6jwa0TQeZN .cluster-label text{fill:#333;}#mermaid-svg-sOmlbb6jwa0TQeZN .cluster-label span{color:#333;}#mermaid-svg-sOmlbb6jwa0TQeZN .cluster-label span p{background-color:transparent;}#mermaid-svg-sOmlbb6jwa0TQeZN .label text,#mermaid-svg-sOmlbb6jwa0TQeZN span{fill:#333;color:#333;}#mermaid-svg-sOmlbb6jwa0TQeZN .node rect,#mermaid-svg-sOmlbb6jwa0TQeZN .node circle,#mermaid-svg-sOmlbb6jwa0TQeZN .node ellipse,#mermaid-svg-sOmlbb6jwa0TQeZN .node polygon,#mermaid-svg-sOmlbb6jwa0TQeZN .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-sOmlbb6jwa0TQeZN .rough-node .label text,#mermaid-svg-sOmlbb6jwa0TQeZN .node .label text,#mermaid-svg-sOmlbb6jwa0TQeZN .image-shape .label,#mermaid-svg-sOmlbb6jwa0TQeZN .icon-shape .label{text-anchor:middle;}#mermaid-svg-sOmlbb6jwa0TQeZN .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-sOmlbb6jwa0TQeZN .rough-node .label,#mermaid-svg-sOmlbb6jwa0TQeZN .node .label,#mermaid-svg-sOmlbb6jwa0TQeZN .image-shape .label,#mermaid-svg-sOmlbb6jwa0TQeZN .icon-shape .label{text-align:center;}#mermaid-svg-sOmlbb6jwa0TQeZN .node.clickable{cursor:pointer;}#mermaid-svg-sOmlbb6jwa0TQeZN .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-sOmlbb6jwa0TQeZN .arrowheadPath{fill:#333333;}#mermaid-svg-sOmlbb6jwa0TQeZN .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-sOmlbb6jwa0TQeZN .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-sOmlbb6jwa0TQeZN .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-sOmlbb6jwa0TQeZN .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-sOmlbb6jwa0TQeZN .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-sOmlbb6jwa0TQeZN .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-sOmlbb6jwa0TQeZN .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-sOmlbb6jwa0TQeZN .cluster text{fill:#333;}#mermaid-svg-sOmlbb6jwa0TQeZN .cluster span{color:#333;}#mermaid-svg-sOmlbb6jwa0TQeZN div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-sOmlbb6jwa0TQeZN .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-sOmlbb6jwa0TQeZN rect.text{fill:none;stroke-width:0;}#mermaid-svg-sOmlbb6jwa0TQeZN .icon-shape,#mermaid-svg-sOmlbb6jwa0TQeZN .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-sOmlbb6jwa0TQeZN .icon-shape p,#mermaid-svg-sOmlbb6jwa0TQeZN .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-sOmlbb6jwa0TQeZN .icon-shape .label rect,#mermaid-svg-sOmlbb6jwa0TQeZN .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-sOmlbb6jwa0TQeZN .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-sOmlbb6jwa0TQeZN .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-sOmlbb6jwa0TQeZN :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 抽象描述
初步细化
进一步细化
具体实现
问题描述
算法框架
详细算法
代码实现
逐步求精示例:
python
# 逐步求精示例
# 问题:对数组进行排序
# 第一步:抽象描述
"""
对数组进行排序,使元素按升序排列
"""
# 第二步:初步细化
"""
1. 遍历数组
2. 比较相邻元素
3. 如果前一个大于后一个,交换
4. 重复直到排序完成
"""
# 第三步:进一步细化
def sort_array_v1(arr):
"""排序数组 - 版本1"""
n = len(arr)
for i in range(n):
for j in range(0, n - i - 1):
if arr[j] > arr[j + 1]:
# 交换
arr[j], arr[j + 1] = arr[j + 1], arr[j]
return arr
# 第四步:优化细化
def sort_array_v2(arr):
"""排序数组 - 版本2(优化)"""
n = len(arr)
for i in range(n):
swapped = False
for j in range(0, n - i - 1):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
swapped = True
# 如果没有交换,说明已经排序完成
if not swapped:
break
return arr
# 第五步:最终实现
def sort_array(arr):
"""排序数组 - 最终版本"""
if not arr:
return arr
arr = arr.copy() # 不修改原数组
n = len(arr)
for i in range(n):
swapped = False
for j in range(0, n - i - 1):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
swapped = True
if not swapped:
break
return arr
# 测试
test_array = [64, 34, 25, 12, 22, 11, 90]
sorted_array = sort_array(test_array)
print(f"原数组:{test_array}")
print(f"排序后:{sorted_array}")
📊 五、结构化程序设计的工具
(一)工具概述
结构化程序设计工具:
| 工具 | 说明 |
|---|---|
| 流程图 | 传统图形工具 |
| N-S图 | 盒图 |
| PAD图 | 问题分析图 |
| 结构图 | 模块结构图 |
(二)N-S图
N-S图(Nassi-Shneiderman图)又称盒图,是结构化程序设计的图形工具。
N-S图特点:
| 特点 | 说明 |
|---|---|
| 无箭头 | 没有流程线 |
| 嵌套清晰 | 结构清晰可见 |
| 强制结构化 | 只能表示结构化程序 |
N-S图示例:
顺序结构:
┌─────────────┐
│ 语句A │
├─────────────┤
│ 语句B │
└─────────────┘
选择结构:
┌────────┬────────┐
│ 条件P │ │
│ T │ F │
│ 语句A │ 语句B │
└────────┴────────┘
循环结构:
┌─────────────────┐
│ while 条件P │
│ 语句A │
└─────────────────┘
N-S图代码示例:
python
# N-S图对应的代码
# 问题:计算1到100的偶数和
# N-S图表示:
"""
┌─────────────────────────┐
│ total = 0 │
│ i = 2 │
├─────────────────────────┤
│ while i <= 100 │
│ ┌─────────────────────┐ │
│ │ total = total + i │ │
│ │ i = i + 2 │ │
│ └─────────────────────┘ │
├─────────────────────────┤
│ print(total) │
└─────────────────────────┘
"""
# 对应代码
total = 0
i = 2
while i <= 100:
total = total + i
i = i + 2
print(f"1到100的偶数和:{total}")
(三)PAD图
PAD图(Problem Analysis Diagram)是问题分析图。
PAD图特点:
| 特点 | 说明 |
|---|---|
| 树形结构 | 从左到右展开 |
| 层次清晰 | 层次关系明确 |
| 易于转换 | 易于转换为代码 |
PAD图示例:
PAD图表示:
┌─ total=0
├─ i=2
┌────┤
│ └─ while i<=100 ─┬─ total=total+i
│ └─ i=i+2
程序─┤
│
└──── print(total)
PAD图代码示例:
python
# PAD图对应的代码
# 问题:判断一个数是否为素数
# PAD图表示:
"""
┌─ 输入n
┌────┤
│ └─ if n<2 ──── 输出"不是素数"
│
│ ┌─ i=2
│ ┌────┤
程序─┤ │ └─ while i*i<=n ─┬─ if n%i==0 ── 输出"不是素数"
│ │ └─ i=i+1
│ │
└────┴──── 输出"是素数"
"""
# 对应代码
def is_prime_pad():
n = int(input("输入一个数:"))
if n < 2:
print("不是素数")
return
i = 2
while i * i <= n:
if n % i == 0:
print("不是素数")
return
i = i + 1
print("是素数")
# is_prime_pad()
(四)结构图
结构图描述系统的模块结构。
结构图示例:
#mermaid-svg-b6QV9v52sIbU9nVg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-b6QV9v52sIbU9nVg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-b6QV9v52sIbU9nVg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-b6QV9v52sIbU9nVg .error-icon{fill:#552222;}#mermaid-svg-b6QV9v52sIbU9nVg .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-b6QV9v52sIbU9nVg .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-b6QV9v52sIbU9nVg .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-b6QV9v52sIbU9nVg .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-b6QV9v52sIbU9nVg .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-b6QV9v52sIbU9nVg .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-b6QV9v52sIbU9nVg .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-b6QV9v52sIbU9nVg .marker{fill:#333333;stroke:#333333;}#mermaid-svg-b6QV9v52sIbU9nVg .marker.cross{stroke:#333333;}#mermaid-svg-b6QV9v52sIbU9nVg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-b6QV9v52sIbU9nVg p{margin:0;}#mermaid-svg-b6QV9v52sIbU9nVg .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-b6QV9v52sIbU9nVg .cluster-label text{fill:#333;}#mermaid-svg-b6QV9v52sIbU9nVg .cluster-label span{color:#333;}#mermaid-svg-b6QV9v52sIbU9nVg .cluster-label span p{background-color:transparent;}#mermaid-svg-b6QV9v52sIbU9nVg .label text,#mermaid-svg-b6QV9v52sIbU9nVg span{fill:#333;color:#333;}#mermaid-svg-b6QV9v52sIbU9nVg .node rect,#mermaid-svg-b6QV9v52sIbU9nVg .node circle,#mermaid-svg-b6QV9v52sIbU9nVg .node ellipse,#mermaid-svg-b6QV9v52sIbU9nVg .node polygon,#mermaid-svg-b6QV9v52sIbU9nVg .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-b6QV9v52sIbU9nVg .rough-node .label text,#mermaid-svg-b6QV9v52sIbU9nVg .node .label text,#mermaid-svg-b6QV9v52sIbU9nVg .image-shape .label,#mermaid-svg-b6QV9v52sIbU9nVg .icon-shape .label{text-anchor:middle;}#mermaid-svg-b6QV9v52sIbU9nVg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-b6QV9v52sIbU9nVg .rough-node .label,#mermaid-svg-b6QV9v52sIbU9nVg .node .label,#mermaid-svg-b6QV9v52sIbU9nVg .image-shape .label,#mermaid-svg-b6QV9v52sIbU9nVg .icon-shape .label{text-align:center;}#mermaid-svg-b6QV9v52sIbU9nVg .node.clickable{cursor:pointer;}#mermaid-svg-b6QV9v52sIbU9nVg .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-b6QV9v52sIbU9nVg .arrowheadPath{fill:#333333;}#mermaid-svg-b6QV9v52sIbU9nVg .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-b6QV9v52sIbU9nVg .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-b6QV9v52sIbU9nVg .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-b6QV9v52sIbU9nVg .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-b6QV9v52sIbU9nVg .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-b6QV9v52sIbU9nVg .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-b6QV9v52sIbU9nVg .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-b6QV9v52sIbU9nVg .cluster text{fill:#333;}#mermaid-svg-b6QV9v52sIbU9nVg .cluster span{color:#333;}#mermaid-svg-b6QV9v52sIbU9nVg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-b6QV9v52sIbU9nVg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-b6QV9v52sIbU9nVg rect.text{fill:none;stroke-width:0;}#mermaid-svg-b6QV9v52sIbU9nVg .icon-shape,#mermaid-svg-b6QV9v52sIbU9nVg .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-b6QV9v52sIbU9nVg .icon-shape p,#mermaid-svg-b6QV9v52sIbU9nVg .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-b6QV9v52sIbU9nVg .icon-shape .label rect,#mermaid-svg-b6QV9v52sIbU9nVg .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-b6QV9v52sIbU9nVg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-b6QV9v52sIbU9nVg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-b6QV9v52sIbU9nVg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 主程序
输入模块
处理模块
输出模块
解析模块
计算模块
获取输入
显示结果
结构图代码示例:
python
# 结构图对应的代码
# 学生成绩管理系统
# 主程序
def main():
"""主程序"""
scores = input_module()
results = process_module(scores)
output_module(results)
# 输入模块
def input_module():
"""输入模块"""
return get_input()
def get_input():
"""获取输入"""
scores = []
while True:
score = input("输入成绩(空行结束):")
if score == "":
break
scores.append(float(score))
return scores
# 处理模块
def process_module(scores):
"""处理模块"""
parsed = parse_module(scores)
calculated = calculate_module(parsed)
return calculated
def parse_module(scores):
"""解析模块"""
return [s for s in scores if 0 <= s <= 100]
def calculate_module(scores):
"""计算模块"""
if not scores:
return None
return {
"count": len(scores),
"sum": sum(scores),
"avg": sum(scores) / len(scores),
"max": max(scores),
"min": min(scores)
}
# 输出模块
def output_module(results):
"""输出模块"""
display_results(results)
def display_results(results):
"""显示结果"""
if results:
print(f"人数:{results['count']}")
print(f"总分:{results['sum']}")
print(f"平均分:{results['avg']:.2f}")
print(f"最高分:{results['max']}")
print(f"最低分:{results['min']}")
else:
print("没有有效成绩")
# 运行
# main()
📝 六、结构化程序设计的优缺点
(一)优点
结构化程序设计优点:
| 优点 | 说明 |
|---|---|
| 结构清晰 | 程序结构清晰 |
| 易于理解 | 易于理解和阅读 |
| 易于维护 | 易于维护和修改 |
| 易于测试 | 易于测试和调试 |
| 可靠性高 | 程序可靠性高 |
(二)缺点
结构化程序设计缺点:
| 缺点 | 说明 |
|---|---|
| 数据与操作分离 | 数据和操作分离 |
| 不适合大型系统 | 不适合大型复杂系统 |
| 复用性有限 | 代码复用性有限 |
| 开发效率低 | 开发效率相对较低 |
(三)与面向对象的比较
结构化与面向对象比较:
| 方面 | 结构化 | 面向对象 |
|---|---|---|
| 核心 | 功能 | 对象 |
| 基本单位 | 函数 | 类 |
| 数据与操作 | 分离 | 封装 |
| 复用方式 | 函数复用 | 继承复用 |
| 适用规模 | 中小型 | 大型 |
📝 总结
结构化程序设计是一种重要的程序设计方法学。
🎯 结构化程序设计概述:
- 定义:使用顺序、选择、循环三种基本结构
- 历史:1966年Bohm-Jacopini定理,1968年Dijkstra反对goto
- 特点:自顶向下、逐步求精、模块化、限制goto
💡 三种基本结构:
- 顺序结构:按顺序执行
- 选择结构:if、if-else、if-elif-else
- 循环结构:while、for
📦 设计原则:
- 自顶向下:从整体到局部
- 逐步求精:逐步细化
- 模块化:功能分解
- 限制goto:避免无序跳转
🌐 设计方法:
- 自顶向下设计:从顶层开始
- 逐步求精方法:逐步具体化
📊 设计工具:
- N-S图:盒图,无箭头
- PAD图:问题分析图,树形结构
- 结构图:模块结构图
核心启示:结构化程序设计是程序设计的基础方法,它通过限制程序的控制流结构,使程序具有清晰的结构和良好的可读性。虽然面向对象方法已经成为主流,但结构化程序设计的思想仍然是程序设计的基础。在实际工作中,我们需要注意:第一,掌握三种基本控制结构;第二,遵循自顶向下、逐步求精的设计方法;第三,合理划分模块,提高代码的可维护性;第四,避免使用goto语句;第五,根据项目规模选择合适的设计方法。记住:好的程序结构是软件质量的基础。