当前课程知识点:程序设计基础 >  第三章 逻辑推理与枚举解题 >  程设论道 >  程设论道二

返回《程序设计基础》慕课在线视频课程列表

程设论道二在线视频

程设论道二

下一节:程设论道三

返回《程序设计基础》慕课在线视频列表

程设论道二课程教案、知识点、字幕

我们这一章还讲了if 和 for

就是我们从原来顺序结构的程序

开始有了分支结构和循环结构了

所以这些关于程序的流程

也可以再跟大家 再介绍介绍

其实程序的流程 到你这一章之后

应该说 去解决所有算法的流程结构都已经具备了

虽然看上去很简单 无非是顺序 分支 循环

但是呢 这三个就够了

据他们数学系的同学来讲

有人能用数学方法证明出来

就用这三种结构 就能搞定所有的问题

怎么证明呢 谁证明的 我记不住了

但是这个里头 学生在学的时候

还有一个需要特别去注意的地方

顺序这个事情 符合世界运行的规律

时间是不能倒退的 对不对

我们一步一步往后走 顺着去做

总是这样子的

而且你一个人做的话

肯定是 这么叫 串行的吧

肯定是这么一步步来的

这个好理解

分支呢 其实很多时候

我们也经常这么思考

说 哎 我去做个什么事情

他要是来了呢... 他要是不来怎么办呢

他脑子里头不断的在那里犹犹豫豫
或者权衡的时候

其实就是不断的在做分支判断的时候

如果这样子就怎么着
如果这样怎么样

甚至我们还有一个成语

叫做兵来将挡 水来土掩

其实就是分支嘛

对不对

你甚至包括说 诸葛亮 给下面 给个精囊妙计

如此这般
在什么条件下打开第几个锦囊

所以其实分支这章 学生还是比较好理解的

锻炼大家运筹帷幄的能力

但是我觉得 就是那个循环
可能是 上面有个窗户纸一样

就是它理解上面 需要再下点功夫

要用同一段代码,运行好多好多次

每次运行的效果又不一样

最后来解决一个整个的这个问题

就是我们介绍的循环的这个概念

说循环呢其实看上去很简单

但实际上理解起来,对初学者有一定的难度

所以 我觉得就是

就像我们前面讨论过的一样

循环这个 能不能写的出来

能不能写对

其实体现了这个学生 或者我们编程的人

对于这个规律性的把握

是不是到位

这个讲的好

你能不能把这个规律把握出来

然后你才能写出这个循环来

因为 如果循环简单地变成为一个重复的话

好像是个人都会做

但是问题是

你怎么重复

在两次重复之间

得周而复始

看上去是重复的 但是还螺旋式上升呢

那那个上升的量 就是变化的量

对那个变化的那个东西

所以需要在循环当中 在重复当中

发现 变跟不变

然后这个时候你循环才能写出来

所以,这样的话才能够理解说 我怎么去

把问题用循环来解决

想起来我在第一章的时候

就留了个伏笔 当时

就最后的时候不是写了好几个公式嘛

最后一页是好几个公式

算不出来的 写不出直接的程序的

有几个 Sigma 啊

啊你还用Sigma了啊 对啊

去调一个 pai 啊

公式写在那

但你怎么写出那个程序

当时是写不出来的,没有对应的数学函数

用了循环之后, 新的同学应该自己下去试一试

能写的出来了

所以你说这个我到是又觉得

循环 看上去是一个重复的升级版

对吧 重复这个事情大家都会

但是循环这个大家就不见得都会

另外一个方面 循环其实也是

我们过去在数学里头 一个学过的概念的

一个计算机语言的表现

或者把它写成计算机语言来表达

什么呢 就你刚才说的那个 Sigma

你看我们过去 在高中

不是经常有写那个 求和的式子

Sigma n等于1 到 N ,然后这边是个a_i

实际上什么意思呢?也不就是

a_1 + a_2 + ... + a_N 吗?

然后数学上我们直接这么写就完了

就表达出来 要把 a_1 加到 a_N

那现在这个写法

在数学上是写的 Simga 这种形式

那计算机语言是计算机看得懂的语言啊

它怎么写呢?它得把Sigma写成一个for的头

把a_i写成循环体

好像还都能对上诶

真的 特别像

就是i=1 然后下面到 N

然后我们相当于for循环

一个条件 表达式1 表达式2

中间就是循环体 就是你刚刚说的 很像

就是这个里头 我们过去在数学里头

我们那个时候学的 等比数列 等差数列 通项 之类的

其实 有的时候有的同学会觉得那个很难

其实 它难就难在怎么把数之间的规律

掌握出来

他只要掌握规律,那个式子就能写

他就能写那个东西了

我们这个其实也是一样

找到规律 你就找到变和不变

然后呢 让循环变量控制那个变化的

然后把不变的部分作为它的循环体来出现

其实我刚才还有个想法

说顺序是很自然的嘛 一步一步走

然后分支呢 是我要把各种问题想清楚

但是光有这两个吧

我原来自己写程序的时候试试就觉得

我按顺序结构这么写出来的程序

计算机算的是挺快的

它比我算的快

但是 我还有写程序的时间呢

然后最后一句一句写 他就一句一句执行

那有那写的时间 我都算出来了啊

所以有了循环之后吧

就计算机才能做到 就超过人了

把握这个写程序的时间赚回来了

但计算机呢它可以不知疲惫 也不怕枯燥

你只要给它电 它就可以一直一直一直运行

所以就得有循环

循环才能让他一直一直一直的运行

所以有的时候确实是说

我们人力啊 思维啊能力就在那边

但计算机可以帮我们衍生

就因为我们告诉它怎么做以后,它可以反复的去做

就不怕苦不怕累 不怕枯燥的(去做)

而且关键是你还把这种怎么变化的规律

也含在里头去了

它会在每一圈不断重复的过程中

其实自己在不断的进化、演化

螺旋式上升

它其实在里头重复的每一圈

执行东西实际上是不一样的

把这个顺序 分支 循环一组合

肯定能够(组成) 解决我们所说的任何(问题) 的可行的算法

人家已经证明了

这个放心 人家已经证明了,就靠着三个

能解决所有的复杂的算法(问题)

简单算法当然更不在话下了

所以我们后面学习的就是怎么把这三个东西拼吧拼吧

用来解决问题

好 就在我们算法思想指导下

把这个组合好

程序设计基础课程列表:

第一章 编程初步

-1.1 基础知识

--1.1.1 什么是程序?什么是语言?

--1.1.2 什么是程序设计?

--1.1.3 计算机发展史

-1.2 买菜问题

--1.2.1 问题描述

--1.2.2 程序的基本结构

-1.3 数学运算

--1.3.1 数学运算符

--1.3.2 数学函数

-1.4 补充说明

--1.4.1 编程环境的下载与安装

--1.4.2 程序基本结构中的含义

--1.4.3 格式与风格

-1.5 总结

--1.5 总结

-程设论道

--程设论道

-师生问答

--师生问答一:怎样学好程序设计

--师生问答二:语言选择

--师生问答三:关于函数

-第一章 编程初步--语法自测

第二章 变量与代数思维

-2.1 关于超级计算器的几点思考

--2.1.1 关于超级计算器的几点思考

-2.2 电子秤模拟 — 背景介绍及需求分析

--2.2.1 电子秤模拟 — 背景介绍及需求分析

-2.3 电子秤模拟 — 代码实现

--2.3.1 电子秤模拟 — 代码实现

-2.4 变量定义与变量类型

--2.4.1 变量定义与变量类型

-2.5 猜数游戏与数据表示

--2.5.1 猜数游戏与数据表示

-2.6 关于变量的讨论

--2.6.1 变量的初始值

--2.6.2 变量类型

--2.6.3 变量内存单元地址

--2.6.4 存“变量地址”的变量——指针

--2.6.5 指针的 读/写 操作

--2.6.6 指针的 加/减 操作

--公告

-2.7 变量体现的计算思维

--2.7.1 变量体现的计算思维

-程设论道

--程设论道

-师生问答

--师生问答

-第二章 变量与代数思维--语法自测

第三章 逻辑推理与枚举解题

-3.1 谁做的好事——语义表示

--3.1.1 谁做的好事——语义表示

-3.2 谁做的好事——真假检查

--3.2.1 谁做的好事——真假检查

-3.3 谁做的好事——循环枚举

--3.3.1 谁做的好事——循环枚举

-3.4 谁是嫌疑犯——多重循环枚举

--3.4.1 谁是嫌疑犯——多重循环枚举

-3.5 谁是嫌疑犯——破案线索表示

--3.5.1 谁是嫌疑犯——破案线索表示

-3.6 谁是嫌疑犯——用二进制枚举

--3.6.1 谁是嫌疑犯——用二进制枚举

-程设论道

--程设论道一

--程设论道二

--程设论道三

-师生问答

--师生问答一:字符与ASCII码表

--师生问答二:其他循环语句、运算符优先级与变量作用域

-第三章 逻辑推理与枚举解题--语法自测

第四章 筛法与查找

-4.1 插花游戏

--4.1.1 问题提出(求素数)

--4.1.2 函数初探

--4.1.3 运行演示

-4.2 筛法

--4.2.1 筛法思路

--4.2.2 数组的定义

--4.2.3 代码翻译

--4.2.4 运行演示

--4.2.5 小朋友数人数

--4.2.6 运行演示

--4.2.7 韩信点兵

-4.3 线性查找

--4.3.1 扑克查找问题

--4.3.2 扑克查找问题代码翻译

--4.3.3 最小值问题

--4.3.4 最小值问题代码翻译

-4.4 折半查找

--4.4.1 提问

--4.4.2 折半查找思路

--4.4.3 折半查找代码翻译

--4.4.4 折半查找运行演示

-4.5 排序问题

--4.5.1 插入排序

--4.5.2 选择排序

--4.5.3 函数写法

--4.5.4 运行演示

-4.6 总结

--4.6.1 总结

-程设论道

--程设论道一:数组与编码思维

--程设论道二:筛法

-师生问答

--师生问答一:函数与面向过程编程

--师生问答二:数组的下标越界

-第四章 筛法与查找--语法自测

第五章 分治思想与递归

-5.1 阶乘

--5.1.1 阶乘问题

--5.1.2 递归解法

--5.1.3 递归小结

-5.2 排序

--5.2.1 归并排序——总体思路

--5.2.2 归并排序——思路分解

--5.2.3 归并排序——代码解说

--5.2.4 快速排序——总体思路

--5.2.5 快速排序——代码解说

--5.2.6 排序总结

-5.3 矩阵填充

--5.3.1 矩阵填充问题

--5.3.2 代码解说

-5.4 分书与八皇后

--5.4.1 问题描述

--5.4.2 问题分析——共性

--5.4.3 问题分析——区别

--5.4.4 解题准备——二维数组

--5.4.5 解题准备——递归设计

--5.4.6 代码解说——分书问题

--5.4.7 代码解说——八皇后问题

-5.5 青蛙过河

--5.5.1 问题描述

--5.5.2 问题分析——简单情况

--5.5.3 问题分析——复杂情况

--5.5.4 问题分析——一般情况

-程设论道

--程设论道一

--程设论道二

-师生问答

--师生问答一

--师生问答二

-第五章 分治思想与递归--语法自测

第六章 递推与动态规划

-6.1 兔子数列问题

--6.1.1 问题描述

--6.1.2 按大小兔子分别递推

--6.1.3 按总数递推

--6.1.4 不用数组递推

-6.2 分鱼问题

--6.2.1 问题描述

--6.2.2 从A到E递推

--6.2.3 从E到A递推

-6.3 橱窗的插花问题

--6.3.1 问题描述

--6.3.2 题意理解与分析

--6.3.3 用枚举思想解题

--6.3.4 采用递推的优化算法

--6.3.5.1 采用动态规划算法—优化分析

--6.3.5.2 采用动态规划算法—递推代码

--6.3.5.3 采用动态规划算法—计算过程

--6.3.5.4 采用动态规划算法—输出方案

--6.3.6 动态规划总结

-6.4 最长公共子序列问题

--6.4.1 问题描述与理解

--6.4.2 问题分析

--6.4.3.1 动态规划解题(1)

--6.4.3.2 动态规划解题(2)

--6.4.3.3 动态规划代码

-程设论道

--程设论道一

--程设论道二

-师生问答

--师生问答

-第六章 递推与动态规划--语法自测

第七章 文本数据处理

-7.1 统计记录总数

--7.1.1 问题分析

--7.1.2 读文件操作

-7.2 统计活跃用户数

--7.2.1 问题分析

--7.2.2 字符串

--7.2.3 程序翻译与演示

-7.3 统计在线时长

--7.3.1 问题分析

--7.3.2 结构

--7.3.3 程序翻译与演示

--7.3.4 写文件操作

-7.4 总结

--7.4.1 总结

-程设论道

--程设论道

-师生问答

--师生问答

-第七章 文本数据处理--语法自测

第八章 非文本数据处理

-8.1 将数据组织成链表

--8.1.1 链表的基本概念

--8.1.2 代码讲解

--8.1.3 链表遍历与释放

-8.2 提高链表访问效率 —— 哈希链表

--8.2.1 简单的哈希算法

--8.2.2 算法实现

-8.3 以二进制文件存储链表

--8.3.1 二进制文件的操作方法

--8.3.2 代码讲解

-程设论道

--程设论道一

--程设论道二

-师生问答

--师生问答

-第八章 非文本数据处理--语法自测

第九章 可配置的程序设计

-9.1 自动售卖程序

--9.1.1 提出问题与初步设计

--9.1.2 细化实现订单处理

--9.1.3 使程序更健壮

-9.2 配制水果信息

--9.2.1 提出问题与设计文件格式

--9.2.2 实现订单处理功能

-9.3 指定界面语言

--9.3.1 提出问题与命令行参数

--9.3.2 实现程序功能

-程设论道

--程设论道

-师生问答

--师生问答

-第九章 可配置的程序设计--语法自测

程设论道二笔记与讨论

也许你还感兴趣的课程:

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