当前课程知识点:C语言程序设计(上) >  从问题到C语言程序设计 >  1.1 计算机的问题求解方法 >  1.1.3-2关于算法——算法的表示

返回《C语言程序设计(上)》慕课在线视频课程列表

1.1.3-2关于算法——算法的表示在线视频

1.1.3-2关于算法——算法的表示

下一节:1.1.3-3关于算法——算法的优化

返回《C语言程序设计(上)》慕课在线视频列表

1.1.3-2关于算法——算法的表示课程教案、知识点、字幕

通常来说

算法的描述方法有这么六种

自然语言的方法

我们刚才说的几乎就是自然语言的方法

如果怎么样否则怎么样

还有程序语言

那就是得拿程序说事了

直接拿计算机语言

和计算机去对话

还有一种我们刚才画了一个一圈二圈

那好像又是自然语言

好像又搁上了一个if

又写成否则

看上去这像什么呢

我们把这种描述方法

又有自然语言又好像有代码

但是这种东西计算机又没法执行

但是人写起来又比较方便

叫伪代码

伪代码的方式计算机是

不能执行的

人交流起来

也还是会有一定的困难

他的困难不在于人写的不方便

他的困难是在于说

你表达的不过准确

比如说我们刚才上边

把算法描述了两次

这两次里边都有不准确的成分

大家下去仔细看一下

都有 不太尽人意的地方

那么 通常

描述算法用什么方法呢

有两种 一种叫流程图

一种叫N-S图

这两个的区别是什么呢

流程图是一种传统的方法

大家比较喜欢用的方法

因为他有明确的一个

流程的一个指引

那N-S图是什么呢

是结构化程序设计里边

提倡用的一种方法

那我们在前边

出现过的流程

基本上都是用流程图的

就是传统流程图的方法

这两者差什么呢

我们后边会讨论

现在我们先看什么是流程图

我们在咱们的课程里边

后边多数要用到是流程图

那N-S图看上去说

结构化程序设计需要的方法

很重要

这是一个工程化的

比较规范的比较标准的方法

但是 对大家是

初次学习程序设计的话

流程图 还是一个比较好的描述的方式

流程图有这么七种符号

很简单 他们分别表达的是

在接下来

这个东西是一个注释

你有什么要对自己说的

要对其他 可以做交流的

那个同行说的

你就在这个符号里边

去写你的注视

计算机是不去识别这个的

在接下来是 最重要的

流程线 四个方向都能去

无所不能去

所以呢 这就是我们说的

N-S图 就是要把他取缔了

是因为他太方便哪都能去

他会构成了

程序结构的不良好

在下面那个小圆圈

是一个连接线

因为我们不管是纸也罢

还是你的计算机屏幕

你要表达这个流程的时候

有时会不够 流程很长

我们用这个小圆圈

把他两个接上

比如我这个圆圈边写个一

在那张纸上那个圆圈里也写个一

这两个必然是接在一起的

咱还拿

两个任意数交换的这个问题

来 说例子

我们说任何程序

都有 我把他叫三部曲

都有三部曲这三部曲

什么呢

我们在这个算法的五个特征里边说

输入可以有可以没有

是的 但是大多数情况下还是有的

但是输出是绝对不能没有的

那输入 处理 输出

通常来说是程序必须有的三个部分

我们还拿这两个数

交换的这个流程来说

我们来看这个流程是不是这样

输入 然后粉颜色表达的是 处理

就是 我们这里边要做的交换

接下来是输出

那我们要把这个在细化一步呢

给它加上

任何流程必须有一个明确地开始

明确地结束

这是表达算法必须要的

有穷 就必须有结束

再下来我们再把它细化

处理呢 没这么简单

尤其是

我们对复杂问题处理是一个

比较麻烦的比较重要的过程

所有的对问题的求解

是在处理这一块完成的

好了 那我们就

两任意数交换这件事情

他的处理有三部

我们把他细化成这三个步骤

那好了我们把

两个任意数交换的流程

用这么完整的一个形式表达出来

大家是不是看到了

从开始 到 给计算机提供a b两个数

然后这两个数的交换

分三步完成

最后把他交换完了的数据输出

算法结束

那我们看用这个流程图来表达算法

是不是他最明显的一个优势是

直观

非常的直观大家交流也方便

这时候我们跟语言没有关系

我们只是表达了

解决这个问题

什么问题呢

任意两数交换的这么一个算法

那这个结构

任意两数交换的这个流程

是一个顺序结构

什么叫顺序结构

陈开始到结束

顺序执行

没有任何第二条路线可以走

也就说流程是从上往下

一步一步的在执行

我们还拿前面所说过的

计算函数的这个问题来说

它是不是也是一个顺序结构呢

我们来看一下 从大的方面来说

我们看

123456这是我们原来描述的那个算法

也是用自然语言描述的这个算法的过程

我们现在用流程图描述是不是可以这样说

开始

然后输入

你给计算机输入四个你要的数计算机需要的数

然后你就来做判断并计算

最后把结果输出结束

这里什么东西不明确呢

判断并计算

计算机没有得到确切的是怎么做

我们把它细化一下就是这么一个过程

怎么判断呢

x和a去做比较

x要小于等于a

我们做yes 这个处理

否则我们做另一处理

但是无论做了哪一个处理

流程都接着往下走

输出得到的M的值

最后流程结束

这个结构是顺序的吗

大家看 总体看

从开始到结束一定是顺序的

这是程序必须是顺序的

但是这个过程里边

有一个什么结构呢

选择结构

所以这个程序我们把他叫做

选择结构的一个流程

我们还看第三个问题

刚才我们说到的三个任意数排序的那个问题

我们纠结了那么半天 if了那么多

如果把这个问题在简化到

从开始到结束你给输入

你要排序的这三个原始的数据

计算机在粉颜色的这个筐里做什么呢

判断并排序

然后把你排好序的东西输出

流程结束 一样的

这里边我们在细化一步

细化什么呢粉颜色这个框

我们刚才的判断是不是这样

a大于b 是这样判断的

如果是的

我们做yes的这个框

否则我们做no这个框

好了 这样流程能执行了吗

大家看肯定还是不能执行

我们需要再进一步的细化

再细化谁呢

细化yes no这两个框

我们先看a大于b的情况

如果a大于b 我们刚才说了我们需要决断

有三个 步骤

需要决定c在哪里

c可能在哪里呢

第一个位置

中间位置

最后一个位置

所以我们还需要两次判断

三个结果两次判断

我们这里边给的是c大于a吗

yes 那定下来了

cab否侧我们还需要再做一次判断

c大于b吗

如果是acb否侧abc

这是说a大于b的情况

a不大于b的情况我们把它细化下来

跟刚才的道理是一样的

也是要决定c在哪里

c可能在第一个 中间 最后

无论现在是什么样的一个排列

得到了六种组合

这六种组合最后都要从一个出口出来

我们让这个流程

再细化在这里边 大家看

这个判断和输出合在一起拉

是因为判断结束得到结果它就可以直接输出

所以这个处理里包括了判断和输出

这个结构是个什么结构呢

总体上看是不是也是一个

从开始到结束

从输入数据到做后的输出

从选择结构上来说呢

我们刚才用到了N多个选择结构

刚才看到这个图

平常大家学程序设计的时候

的确有这么一个问题

我们宁肯直接拿程序写

都不愿意画这个图 觉得太罗嗦

可是呢

这个话流程图和直接写程序

打个比方它相当于什么呢

相当于盖房子

是直接拿砖头直接盖呢

还是先设计图纸

然后把图纸交给施工队去干

只是我们在程序设计这一块

有点不同

我们即是设计图纸的

也是施工队

我们既要设计这个算法流程

并且要表达这个流程

然后在这个过程里我们可以展开讨论

展开合作

把一个大的复杂的事情

我们可以分解

分工合作

最终再去完成程序的实现

所以在程序实现之前

这个设计算法以及正确的表达算法

这是我们必须做的一件事

无论喜欢还是不喜欢

对复杂问题不可能拿上代码就去写程序

即便是这样写出来的程序

也会让自己无从下手

怎么去修改怎么跟别人去讨论

所以正确的表达你的算法

流程图或者NS图

都是比较好的表达工具

C语言程序设计(上)课程列表:

从问题到C语言程序设计

-1.1 计算机的问题求解方法

--1.1.1--程序设计面向的问题

--1.1.2--关于计算

--1.1.3-1关于算法-算法的特征

--1.1.3-2关于算法——算法的表示

--1.1.3-3关于算法——算法的优化

--1.1.4-1-程序设计方法

--1.1.4-2-程序设计方法

--讨论题:数学模型

-1.1 计算机的问题求解方法--作业

-1.2 C语言与C程序

--1.2.1-1-C概述

--1.2.1-2-C概述

--1.2.2-C初步

--讨论题:运算符

-1.3 C语言处理系统与程序调试运行

--1.3.1C程序如何调试运行

--1.3.2常用C语言处理系统

--1.3.3DEVC++的使用-v1

--1.3.4C语言概貌小程序

--例程

-1.4 程序中的人机交互

--1.4 printf用法

--1.4.2 scanf的用法

--例程

--作业讨论区

数据计算实现与顺序结构程序设计(一)

-2.1 算术运算的C程序实现

--2.1.1 第二章

--2.1.2 C语言算术表达式概念

--2.1.3 算术运算的实现

--2.1.4 整数相除

--2.1.5 输入格式造成的计算错误

--2.1.6 求余运算

--2.1.7 自增自减运算

--2.1.8 复合运算

--fangcheng.c

--fangcheng-1.c

--fangcheng-2.c

--fangcheng-3.c

--fangcheng-4.c

--算术混合运算.c

--讨论题:自增自减符

--讨论题:程序输出结果

--讨论题:程序运行结果

-2.1 算术运算的C程序实现--作业

-2.2 关系运算的C程序实现

--2.2.1 关系比较问题

--2.2.2 C语言关系表达式

--2.2.3关系运算优先级

--2.2.4 用关系运算做判断条件

--2.2.5 程序实例

--2.2.6 字符比较

--bukao.c

--pingshifen-1.c

--panduanzhengshu.c

--pingshifen-2.c

--字符比较.c

--讨论题:比较大小

--讨论题:程序的运行

-2.2 关系运算的C程序实现--作业

-第二周作业--作业

数据计算实现与顺序结构程序设计(二)

-2.3 逻辑运算的C程序实现

--2.3.1 逻辑运算问题~1

--2.3.2 逻辑运算表达式

--2.3.3 如何判断闰年

--2.3.4 逻辑运算优先级

--2.3.5 条件运算符

--计算结合性

--2.3.7 一个简单实例

--闰年.c

--自动购票问题.c

--讨论题:逻辑表达式

-2.3 逻辑运算的C程序实现--作业

-2.4 位运算的C程序实现

--2.4.1 什么是位运算

--2.4.2 位运算有哪些

--2.4.3 位运算怎么用

--讨论题:位运算

-2.5 几种很个别的运算

--2.5 几个很个别的运算

--讨论题

--讨论题

-2.5 几种很个别的运算--作业

-2.6 混合运算及数据类型转换

--2.6 混合运算及数据类型转换

--讨论题:数据类型

-2.7 顺序结构程序实例

--2.7.1 第一个程序:三角形

--Video

--三角形面积.c

--讨论题:工业产值

--讨论题:程序无效结果

-2.7 顺序结构程序实例--作业

选择结构的程序设计

-3.1 程序中的路径选择实现

--3.1.1_1 第三章

--3.1.1_2 神奇的if_else

--打印学生成绩.c

--一元二次方程.c

-3.1 程序中的路径选择实现--作业

-3.2 路径中的再选择——嵌套判断

--3.2.1_1 if语句的嵌套

--3.2.1_2三个数排序1029

--例程

--3.2.2 用户登录检查

--三个数排序_未优化.c

--三个数排序_优化.c

--讨论题:程序改错

-3.2 路径中的再选择——嵌套判断--作业

-3.3 复杂判断问题的C程序设计

--3.3 多级选择

--银行存款.c

--讨论题:多级选择

-3.4 多分支问题的C程序设计

--3.4.1 switch语句表达式

--3.4.2 加减乘除计算

--3.4.3 几类说明

--加减乘除运算.c

--讨论题:关于switch

-3.4 多分支问题的C程序设计--作业

-3.5 GOTO的适当使用

--3.5 GOTO的适当使用

-3.6 选择结构的程序实例

--3.6 程序展示

--计算第几天.c

--存款利息__switch实现.c

--讨论题:输出奇数

--讨论题:计算税金

-3.6 选择结构的程序实例--作业

-第四周作业--作业

循环结构的程序设计(一)

-4.1 需要重复执行的程序

--4.1.1----第四章~1

--4.1.2---while实现先判断后循环~1

--4.1.3----while循环的应用-录入速度~1

--求和.c

--打印学生成绩.c

--统计录入速度.c

--求平均数.c

-4.1 需要重复执行的程序--作业

-4.2 至少要执行一次的循环

--4.2.1至少要执行一次的循环

--4.2.2-do-while循环应用

--成绩录入_do while实现.c

--n的阶乘.c

--字符分类统计.c

--讨论题:关于while

-4.2 至少要执行一次的循环--作业

-4.3 已知循环次数用for语句

--4.3.1--用for语句控制循环次数

--4.3.2--循环的应用-求和

--求和问题.c

--斐波那契数列问题.c

--数列求和.c

--讨论题:循环语句的不同

--讨论题:循环语句

-4.3 已知循环次数用for语句--作业

-4.4 循环控制——简单循环应用

--4.4.1-循环的应用-找数-水仙花数

--4.4.2--循环的应用-求素数

--水仙花数.c

--讨论题:死循环

--讨论题:continue和break

--讨论题:猜数字

-循环结构的程序设计(一)--4.4 循环控制——简单循环应用

循环结构的程序设计(二)

-4.5 循环的嵌套

--4.5.1 循环的嵌套——九九乘法表

--4.5.2 循环的嵌套——打印三角形

--打印九九乘法表.c

--打印实心三角图案.c

--打印空心三角图案.c

--讨论题:程序运行

-4.5 循环的嵌套--作业

-4.6 break与continue

--4.6 循环中断与继续循环——break再讨论

--最大素数.c

--求正数个数及平均数.c

-4.6 break与continue--作业

-4.7 循环的综合应用

--4.7.1 数的排列组合问题

--4.7.2 循环综合应用——穷举算法

--4.7.3 循环综合应用——满足条件的数

--4.7.4 循环综合应用——求最后三位数

--4.7.5 循环综合应用——打印空心图案

--数的排列组合.c

--数的排列组合优化.c

--鸡兔同笼.c

--找满足条件的数.c

--输出14的13次方的最后三位数.c

--打印空心字符.c

--讨论题:打印图形

--讨论题:打印空心图形

--讨论题:计算闰年

-第六周作业

--虚拟实验:循环程序设计实验

-第六周作业--作业

数组(一)

-5.1 同类有序数据处理问题

--5.1.0 数组开篇

--5.1.1 同类有序数据存储问题

--讨论题:下标变量与下标

-5.2 一维数组的定义和引用

--5.2.1_1 数组的定义~1

--5.2.1_2 数组的初始化

--5.2.2 一维数组的输入输出

--5.2.3 一维数组的应用1--成绩排序(选择法)~2

--5.2.4 一维数组的应用2--Fibonacci数列

--数组定义.c

--数组初始化.c

--输出大于平均值的数.c

--反向输出.c

--选择法_成绩排序.c

--求斐波那契数列前n项.c

--讨论题:对称数

--讨论题:关于'\0'

-5.2 一维数组的定义和引用--作业

-5.3 一维字符串数组

--5.3 一维字符串数组11.24~1

--用函数测试字符串长度.c

--讨论题:编程

-5.4 字符串处理函数

--5.4 字符数组的输入与输出

--字符串反向.c

--字符串函数

--讨论题:程序如何运行

--讨论题:黑色星期五

数组(二)

-5.5 二维数组的定义与使用

--5.5 二维数组定义

--二维数组的定义与初始化.c

-5.6 二维数组的输入输出

--5.6 二维数组的输入与输出

--二位数组输出_矩阵输出.c

--讨论题:随机数据存储

-5.6 二维数组的输入输出--作业

-5.7 二维数组的应用‍

--5.7.1二维数组的应用-转置矩阵

--5.7.2 用一维数组方式引用二维数组元素

--转置矩阵.c

--找二维数组最大数.c

--讨论题:修改程序

--讨论题:关于随机数函数 rand()

-5.8 二维字符数组

--5.8 单词排序

--单词排序.c

--讨论题:回文字符串

-5.8 二维字符数组--作业

-5.9 数组综合应用

--5.9.1 应用1——学生成绩统计

--统计成绩.c

--5.9.2 应用2——删除重复字符

--删除串中的重复字符串

--5.9.3 应用3——统计字符

--5.9_4数组的应用4--矩阵相乘

--统计字符次数.c

--讨论题:洗牌

-本期课程结束语

--end

-第八周编程作业

--虚拟实验:冒泡排序算法程序设计实验

期末复习

-《C语言程序设计(上)》期末复习参考

--html

期末复习答案

-《C语言程序设计(上)》期末复习参考答案

--html

1.1.3-2关于算法——算法的表示笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。