C语言程序设计:第2章 算法 — 程序的灵魂

引言:算法,是一切程序的“灵魂”,是支配程序如何“思考”的核心逻辑。掌握算法,不仅是写出正确程序的基础,更是成为优秀程序员的关键一步。让我们深入第2章,走进算法的世界!🌐


目录

🔹 2.1 程序 = 算法 + 数据结构 🧩

🔹 2.2 什么是算法 ❓

🔹 2.3 简单的算法举例 👣

🔹 2.4 算法的五大特性 ✅

🔹 2.5 怎样表示一个算法 📝

📌 2.5.1 用自然语言表示算法 🗣️

📌 2.5.2 用流程图表示算法 🔄

📌 2.5.3 三种基本结构和改进流程图 🧱

📌 2.5.4 用N-S流程图表示算法 🪜

📌 2.5.5 用伪代码表示算法 💻

📌 2.5.6 用计算机语言表示算法 🔠

🔹 2.6 结构化程序设计方法 🧠

📝 本章习题建议 📚

🧠 本章小结 


🔹 2.1 程序 = 算法 + 数据结构 🧩

📌 程序设计的两大基石:

  • 算法(Algorithm):解决问题的方法与步骤

  • 数据结构(Data Structure):组织和存储数据的方式

🧠 类比理解

  • 算法像是做饭的“菜谱”

  • 数据结构就是“食材”与“工具”

✨ 只有好的算法+合适的数据结构,才能写出高效、可靠的程序。


🔹 2.2 什么是算法 ❓

💡 算法的定义:解决某个特定问题的有穷的操作步骤集合。每一步必须清晰、可执行、确定无歧义,最终能够在有限时间内得到结果

🎯 例如:“找出一个数列中的最大值”就是一个典型算法问题。

📌 特别注意:算法 ≠ 程序,但程序中一定包含算法!


🔹 2.3 简单的算法举例 👣

🌰 举例1:求 1 x 2 x 3 x 4 x 5

💡提示:当然可以先求1乘以2,得到结果再乘以3,最终得到结果,但是太繁琐,如果是乘到100则需要999个步骤

S1:1 => p
S2:2 => i
S3:p * i => p
S4:i + 1 => i
S5:若 i <= 5,返回 S3 ;否则,结束

🌰 举例2:有50名学生,要求输出成绩在80分以上的学生的学号和成绩

S1: 1 => i
S2: 如果gi >= 80, 则输出 ni 和 gi; 否则不输出
S3: i + 1 => i
S4: 如果 i <= 50, 则返回到步骤S2,继续执行; 否则, 算法结束

🧠 小结:这些“步骤”就是算法


🔹 2.4 算法的五大特性 ✅

📌 判断一个操作是否是“算法”,需要满足以下 五个特性

特性描述
✨ 有穷性操作步骤在有限时间内完成
🔁 确定性每一步都有确切定义,没有歧义
🎯 有效性每一步可以实际执行
📥 输入性有0个或多个输入
📤 输出性有一个或多个输出,表示结果

💡有效性:若b = 0,则执行 a / b 是不能有效执行的

📣 如果缺少这些特性,说明它不是一个真正的“算法”!


🔹 2.5 怎样表示一个算法 📝

📌 2.5.1 用自然语言表示算法 🗣️

直接用汉语或英语等自然语言描述步骤:

🧾 例:求两个数的和

第一步:输入两个数 a 和 b
第二步:求和 c = a + b
第三步:输出 c

✅ 优点:通俗易懂
❌ 缺点:可能不够严谨、难以转化为程序、容易出现歧义


📌 2.5.2 用流程图表示算法 🔄

🖼️ 流程图(Flowchart)是一种图形化工具,用图形符号表示操作流程:

常见符号:

🌰 举例1:求 1 x 2 x 3 x 4 x 5

🌰 举例2:有50名学生,要求输出成绩在80分以上的学生的学号和成绩


📌 2.5.3 三种基本结构和改进流程图 🧱

🧠传统流程图的弊端:传统的流程图用流程线指出各框的执行顺序,对流程线的使用没有严格限制,使用者可能随意转来转去,使流程图毫无规律。

🎯为了解决这个问题,人们规定出几种基本结构作为表示一个良好算法的基本单元。C语言中,所有算法都可归纳为以下三种基本结构:

        1. 🔁 顺序结构:一步一步执行(左图)

        2. 🔀 选择结构:又称为选取结构或分支结构,依据条件分支(右图)

        3. 🔄 循环结构:重复执行某些操作  

                (1)当型(while型)循环结构:先判断循环条件P1,当循环条件成立则进入循环体内

        执行指令;

                (2)直到型(until型)循环结构:先执行循环体内的指令,直到判断循环条件P2成立则

        退出循环体。

✨ 所有复杂算法都可以通过这三种结构组合构建而成。


📌 2.5.4 用N-S流程图表示算法 🪜

📦 N-S图(Nassi-Shneiderman图)是一种结构化程序图形表示方式,完全去掉了流程线,更加规范。

  • 用矩形框嵌套表示各种流程

  • 结构更清晰,适合结构化程序设计

  • 不需要流程线,适合初学者思考逻辑结构

        1. 🔁 顺序结构:一步一步执行(左1图)

        2. 🔀 选择结构:依据条件分支(左2图)

        3. 🔄 循环结构:重复执行某些操作

                当型(while型)循环结构(右2图), 直到型(until型)循环结构(右1图)

🌰 举例1:求 1 x 2 x 3 x 4 x 5 ,即求 5!(左图)

🌰 举例2:输出50名学生中成绩高于80分学生的学号和成绩(中图和右图)


📌 2.5.5 用伪代码表示算法 💻

❓流程图和NS图表示算法虽然直观易懂,但是画起来费事,特别是设计算法需要反复修改时;

🧠 伪代码(Pseudo-code)介于自然语言和程序语言之间,表达结构清晰,易于转化为实际代码。

🌰 举例1:求 5!

begin
    1 => t
    2 => i
    while i <= 5
    {
        t * i => t
        i + 1 => i
    }
    print t
end

✅ 适用于算法设计阶段
✅ 比自然语言更简洁,书写格式比较自由


📌 2.5.6 用计算机语言表示算法 🔠

💡 最终我们需要用C语言把算法变成“能运行的程序”。

🌰 例:求 5!

#include <stdio.h>

int main() {
    int i,t;
    t = 1;
    i = 2;
    while(i <= 5)
    {
        t = t * i;
        i = i + 1;
    }
    printf("%d\n",t);
    return 0;
}

📣 注意格式规范、变量定义和输入输出语句,是今后程序设计的基本习惯。


🔹 2.6 结构化程序设计方法 🧠

📌 结构化程序设计(Structured Programming) 是一种科学的程序设计思想,强调:

  • 将复杂问题分解为简单模块(自顶向下,逐步细化设计)

  • 每个模块只完成一个功能(模块化设计)

  • 程序结构清晰、便于调试与维护(结构化编码)

✅ 核心原则:“三种基本结构 + 模块化设计”

📦 C语言正是按照这一思想设计,极适合结构化编程。


📝 本章习题建议 📚

🎯 结合教材中的练习题,建议重点完成:

  • ✅ 用自然语言写一个算法

  • ✅ 画出一个算法的流程图(如:求最大值、判断成绩等级)

  • ✅ 分析给出的描述是否符合“算法的五个特性”

  • ✅ 将伪代码转化为C语言程序

  • ✅ 归纳结构化编程的思想精髓


🧠 本章小结 ✨

📌 本章作为程序设计的核心思想部分,重点介绍了:

  • ✅ 算法的定义与基本概念

  • ✅ 算法与程序的关系

  • ✅ 表示算法的多种方法(自然语言、流程图、伪代码等)

  • ✅ 算法的五大特性

  • ✅ 结构化程序设计的基本思想

🎯 掌握算法,不只是为了写程序,更是为了学会思考!


🗝️ 写在最后:程序会过时,但算法不会!未来你无论学习AI、图像识别、数据分析……都离不开算法。继续加油,下一章我们将走进 变量、常量与数据类型的世界,开启真正的C语言语法学习之旅!🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值