内容正文:
算法——程序设计的灵魂
C语言程序设计
-第2课时-
高教版第2版
学习目标
知识目标
● 理解算法的基本概念、五大特性及其核心表示方法。
● 掌握结构化程序设计的三种基本结构与设计思路。
技能目标
● 学会针对实际问题设计算法,并能灵活运用流程图等方式准确表示。
● 运用结构化程序设计方法,编写规范、可维护的程序代码。
素质目标
● 了解中国古代算法成就,弘扬中华优秀传统文化,增强文化自信。
● 培养严谨的逻辑思维习惯与求实创新的科学精神。
基础知识认知
让我们一起开启单片机的学习之旅。
教学引入
知识讲授
算法 (Algorithm)
解决特定问题的一系列清晰、有限、可执行的步骤。
形象比喻:就像一份做菜的“菜谱”,它明确地告诉你第一步做什么,第二步做什么,按照既定的流程执行,直到最终完成任务(做出一道菜)。
目录
模块一:程序的组成要素
模块二:算法概述及表示方法
模块四:结构化程序设计方法
模块四:结构化程序设计方法
程序的组成要素
第一部分
知识讲授
程序的组成要素
知识讲授
程序的本质:算法 + 数据结构 = 程序
知识讲授
数据结构与算法的内涵
数据结构 (Data Structure)
▍ 定义
计算机存储、组织数据的方式,是构建复杂程序的基础骨架。
▍ 核心作用
精准描述数据类型(如整数、字符)与数据组织形式(如数组、链表、树),决定了数据的存取效率。
算法 (Algorithm)
▍ 定义
对特定问题求解步骤的一种清晰、机械的描述,具有有限性、确定性等特征。
▍ 核心作用
对存储的数据进行具体的加工处理,实现特定的业务功能(如排序、搜索、计算),是程序的“灵魂”。
知识讲授
完备程序的四大要素
1
2
3
4
01. 算法
解决特定问题的清晰指令与执行步骤,是程序的“灵魂”,决定了“怎么做”。
03. 程序设计方法
指导代码组织与开发的科学原则和规范(如结构化、模块化),保障程序的可读性与可维护性。
02. 数据结构
问题处理对象的表示形式与组织存储方式,与算法相辅相成,决定了“对谁做”。
04. 语言工具
实现算法与数据结构的具体载体与工具,如 C、Java、Python 等,是人与计算机交互的桥梁。
背诵记忆
序号 核心概念名称 核心说明与记忆要点
01 程序公式 算法 + 数据结构 = 程序。这是程序设计的经典公式,需牢记。
02 数据结构 描述数据类型和数据的组织形式。重点记忆其核心作用。
03 算法 对数据进行加工处理的一系列清晰、有限的步骤。重点记忆其定义。
课堂练习
简答题
1. 程序由哪些要素组成?
【答案】一个完备的程序通常由四个核心要素组成:算法、数据结构、程序设计方法和语言工具。
【解析】算法是程序的“灵魂”,决定了“怎么做”;数据结构是处理的“对象”,决定了“处理什么”;程序设计方法是开发的“指导思想”,保证了程序的清晰性和可靠性;语言工具是最终的“实现载体”。这四个要素相辅相成,共同构建出一个完整、高效的程序。
算法概述
第二部分
知识讲授
算法概述
知识讲授
算法的起源与发展
中国古代数学的辉煌成就
《九章算术》:中国古代第一部数学专著,系统提出了开方术、方程术等解决实际问题的算法,奠定了中国传统数学的基础。
割圆术 (刘徽):利用“割之弥细,所失弥少”的思想计算圆周率,体现了极限思想与迭代算法的雏形,是算法设计的早期典范。
秦九韶算法:提出了简化一元高次多项式求值的算法,通过减少乘法运算次数提高效率,展现了算法优化的核心思想。
知识讲授
算法的起源与发展
西方古代算法思想的奠基
欧几里得算法 (辗转相除法):记载于《几何原本》中,用于计算两个正整数的最大公约数。它是人类历史上最早被形式化描述、并至今仍在广泛使用的经典算法之一。
无论是东方还是西方,古代数学家们都在追求“通法”与“效率”。这种将复杂问题拆解为有限步骤的思维模式,正是现代计算机算法设计的核心灵魂。
知识讲授
算法的定义与分类
▍ 算法的定义
一个算法是一个有限、确定、有效的指令序列,它接收输入,并在有限时间内产生输出。
01. 数值运算算法
核心解决数学计算类问题。例如:解方程、求定积分、解线性方程组、数值插值与拟合等。
02. 非数值运算算法
主要处理非数值信息,是计算机科学中更核心和广泛的领域。例如:数据排序、信息检索、字符串匹配、路径规划等。
知识讲授
算法的五大重要特性
知识讲授
算法的起源与发展
知识点总结
简单算法示例:求 1 + 2 + … + 100 的和
📝 算法执行步骤
Step 01.初始化变量:令sum = 0,i = 1。
Step 02.条件判断:如果i > 100,则直接跳转到步骤5。
Step 03.累加操作:执行sum = sum + i,更新总和。
Step 04.循环计数:执行i = i + 1,并返回到步骤2继续判断。
Step 05.结果输出:在屏幕上打印最终的sum值。
💡 算法特性符合性验证
✅ 有输入:隐含输入了计算范围(1到100)与初始值。
✅ 有输出:最终明确输出了计算结果 sum 的值。
✅ 确定性:每一步的操作(判断、累加、自增)定义清晰,无歧义。
✅ 有穷性:循环执行固定的100次后,条件不满足即终止。
✅ 可行性:所有的算术运算和逻辑判断都是计算机可执行的基本操作。
结论:这是一个结构完整、逻辑严密、符合定义的标准算法模型。
课堂练习
单选题
1、计算机网络最基本的功能之一是( )。
A. 实现数据信息的快速传递
B. 提高可靠性
C. 实现计算机系统的资源共享
D. 负载均衡
【答案】C
【解析】资源共享是计算机网络最基本的功能之一,用户连入网络后可使用其他计算机资源,所以选 C。
例题分析
核心考点解析
1. 算法有哪些基本特性?请简要列举并说明。
【标准答案】算法必须具备五个核心基本特性:输入、输出、确定性、有穷性、可行性。这五个特性缺一不可,共同构成了算法的完整定义。
【考点解析】这五个特性是判断一个“过程”能否被定义为“算法”的黄金标准。确定性保证了逻辑无歧义,有穷性保证了程序可终止,可行性保证了步骤可执行,而输入输出则是算法与外界交互的基础。在考试中,常以简答题形式考察,需重点记忆。
知识讲授
算法的表示方法——自然语言表示法
直接使用人类日常交流的语言(如中文、英文)来逐行描述算法的执行步骤,是最贴近人类思维的表达方式。
知识讲授
算法的表示方法——传统流程图表示法
规则:使用规定的流程图符号来描述算法思想。
常见的符号
知识讲授
案 例 分 析
【案例】从键盘输入一个学生的成绩,并判断, 如果该成绩大于等于60分时,输出:及格;
否 则输出:不及格。请用流程图描述该算法。
知识讲授
算法的表示方法——N-S图表示法
N-S图(也称为盒图)是一种结构化的流程图。它的核心特征是完全去掉了流程线,而是将程序的顺序、选择、循环三种基本结构,通过不同形状的矩形框进行嵌套组合来表示,是结构化程序设计的重要工具。
知识讲授
案例分析
【案例】从键盘输入一个学生的成绩,并判断,如果该成绩大于等于60分,输出:及格;否则输出:不及格。请用N-S图描述该算法。
知识讲授
算法的表示方法——伪代码表示法
伪代码是一种介于自然语言和编程语言之间的表示方法,它借鉴了编程语言的结构化控制逻辑,但使用通俗易懂的自然语言来描述具体操作步骤。
结构清晰
完全借鉴了编程语言的顺序、分支、循环等控制结构,逻辑层次分明。
书写方便
无需严格遵守某种具体语言的语法规则,使用自然语言描述,降低书写门槛。
易于转换
逻辑与代码结构高度一致,可快速映射为 C、Python、Java 等任何具体编程语言代码。
示例:计算 1 到 100 的累加和
BEGIN → sum=0, i=1 → WHILE i ≤ 100 DO { sum += i; i += 1 } → PRINT sum → END
// 说明:伪代码没有统一标准,核心是清晰表达“初始化-循环累加-输出”的逻辑流程。
背诵记忆
不同表示方法的适用场景总结
自然语言
✨ 核心优点
描述通俗易懂,几乎没有学习门槛,易于理解。
⚠️ 主要缺点
容易产生歧义,描述往往过于冗长,不够严谨。
🎯 适用场景
算法的初步构思阶段,或向非专业人士解释逻辑。
传统流程图
✨ 核心优点
图形直观形象,逻辑流向清晰,易于阅读和检查。
⚠️ 主要缺点
复杂算法中流程线过多,容易形成混乱的“蜘蛛网”。
🎯 适用场景
课堂教学演示,或者描述中小型、逻辑简单的算法。
N-S 结构图
✨ 核心优点
强制结构化程序设计,层次分明,逻辑清晰无歧义。
⚠️ 主要缺点
图形嵌套层次较多时,绘制稍显麻烦,修改不够灵活。
🎯 适用场景
严格的结构化程序设计过程,用于算法设计和评审。
伪代码
✨ 核心优点
介于自然语言与代码之间,结构清晰,易于转换成程序。
⚠️ 主要缺点
没有统一的语法标准,不同开发者的书写风格差异较大。
🎯 适用场景
算法的详细设计阶段,作为编写实际代码前的草稿。
知识讲授
计算机网络应用——管理信息系统
例题分析
—— 传统流程图核心符号识别 ——
Q:传统流程图的常用符号有哪些?请简述其图形特征。
【参考答案】
包含五种核心符号:起止框(椭圆)、输入/输出框(平行四边形)、处理框(矩形)、判断框(菱形)、流程线(带箭头的直线)。
【核心解析】
掌握这些基本符号是绘制和理解算法流程图的基础。不同的图形代表不同的逻辑功能,其中“判断框”是唯一能产生分支流向的符号。
结构化程序设计方法
第四部分
知识讲授
结构化程序设计方法
知识讲授
结构化程序设计的提出
✦ 核心提出者与里程碑贡献
艾兹格·迪科斯彻 (Edsger Dijkstra)
发表《GOTO语句有害论》,直指程序混乱根源,成为结构化程序设计发展的理论先声。
尼古拉斯·沃斯 (Niklaus Wirth)
提出著名公式“算法 + 数据结构 = 程序”,并身体力行地倡导和完善了结构化程序设计的方法论。
💡 两位大师共同将程序设计从“自由艺术”推向了“工程科学”
知识讲授
计算机网络应用——过程控制
知识讲授
结构化程序设计的基本思路
01. 自顶向下 (Top-Down)
从整体目标出发,将复杂的大问题作为一个整体模块,逐步向下分解,把它细化为若干个较小的、相对独立的子问题。
02. 逐步细化 (Stepwise Refinement)
对分解后的子问题进行层层细化,将抽象的功能描述逐步转化为具体的、可执行的操作步骤,直到可以直接用代码实现。
03. 模块化设计 (Modular Design)
将细化后的程序划分为若干个功能独立、单一的模块。设计原则是“高内聚、低耦合”,提高代码的复用性和可维护性。
04. 结构化编码 (Structured Coding)
严格遵循结构化程序设计的规范,仅使用顺序、选择、循环三种基本控制结构编写代码,保证程序结构清晰、易读易调试。
知识讲授
结构化程序设计—基本结构图示
顺序结构
选择结构
循环结构
当型循环(While型)
直到型(Until)
背诵记忆
序号 核心概念名称 核心说明与记忆要点
01 提出者 关键人物:艾兹格·迪科斯彻和尼古拉斯·沃斯。
02 基本思路 四大核心要素:自顶向下、逐步细化、模块化设计、结构化编码。
例题分析
结构化程序设计
Q1. 结构化程序设计的基本思路包含哪几个核心环节?
这是结构化设计方法论的核心考点,主要包含以下四个循序渐进的步骤:
① 自顶向下 → ② 逐步细化 → ③ 模块化设计 → ④ 结构化编码
【参考答案】包含自顶向下、逐步细化、模块化设计、结构化编码四个基本思路。
【核心解析】
这四个环节构成了一个完整的程序设计流程闭环:从宏观的“自顶向下”分析问题,到微观的“逐步细化”拆解任务,再通过“模块化设计”实现功能解耦,最后利用“结构化编码”(顺序、选择、循环)完成具体实现。这是结构化程序设计必须遵循的标准方法论。
师生互动
师生互动
1
在实际编程开发过程中,我们应当如何根据具体的问题特点、项目需求,来科学地选择合适的算法表示方法,并制定有效的结构化程序设计策略?
知识点总结
课后任务
布置作业:
写出算法的五个特性,并简要说明有穷性对程序正常运行的意义。
用伪代码描述 “输出 100 以内所有能被 3 整除的数” 的算法,并尝试将该算法转换为 N-S 图表示。
谢谢观看
THANKS
Lavf59.14.100
Lavf59.14.100
UTC 2022-01-15 14:24:11
Lavf58.45.100
$