当前课程知识点:程序设计基础 >  第三章 逻辑推理与枚举解题 >  3.3 谁做的好事——循环枚举 >  3.3.1 谁做的好事——循环枚举

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

3.3.1 谁做的好事——循环枚举在线视频

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

下一节:3.4.1 谁是嫌疑犯——多重循环枚举

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

3.3.1 谁做的好事——循环枚举课程教案、知识点、字幕

运用枚举的思想呢 我们编写了程序

让计算机呢 解决了逻辑问题谁做了好事

那在这个程序中呢

由于我们枚举了四个可能的答案

所以呢,我们重复的写了四段相同的代码

如果 有400个同学呢

那我们就写400个相同的代码

那程序会有多长呢

那实际上呢,对于这种有规律的重复的代码呢

我们一般并不需要真的重复的去写

那么代码呢,只需要写一遍

但是我们可以让计算机重复的执行这段代码的指令

那这里呢,就要用到了某一类语句

我们称为叫循环的语句

顾名思义呢

循环语句就用来指挥计算机

循环重复去执行一些指令

最常用的循环语句呢,是for语句

那大家请看这for语句一个语法

那这个for语句显然跟前面的if语句相比啊

就复杂多了

那它也是有关键字,for开头

后面呢,有一对圆括号,但圆括号里头呢

它不是一个表达式了,它有三个表达式

那下面还有一个语句,那for语句是什么意义呢

请看我们的流程图

它的意义是这样的

首先呢,计算机会计算表达式一

计算完表达式一以后呢

它就计算表达式二

如果表达式二的计算结果为真

可以进行下面的语句

那当然这个语句呢

可以是分号结尾的单个的语句

也可以是大括号括起来的复合语句

那么我们把这个语句呢

称为循环体

因为它是我们循环反复执行的这么一段东西叫循环体

然后执行了循环体以后

计算机开始对表达式三开进行计算

计算完表达式三以后啊

我们看这个箭头

它会返回到表达式二的地方

意味着说,它再去算表达式二

那如果表达式二的计算结果是假的话呢

它就不会去执行这个循环体了

它将由箭头直接跳出去了

跳到这个for语句后面的一个语句上去了

所以呢

我们只要合理的去设置我们这个表达式一二三

就可以让这三个表达式相互配合

然后就让这个循环啊,就转起来

并且呢,在合适的时候

我们让这个表达式二的计算结果是假

它就可以停止这样的循环

那我们可以看一个例子

这也是我们控制这种for循环常用的技巧

我们称为叫设计一个或使用一个循环变量

在这个螺旋图中呢

我们用了个变量叫i, 我们把这个i呢

就称为循环变量

大家看一下,这个表达式一呢

我们对i进行赋值,让i等于1

表达式二呢,我们是以一个关系表达式

这里写的是:i小于等于100

然后呢,可能是一些语句

表达式三呢,我们写的是i等于i加1

那我们来看一下

这个for的语句执行起来会是什么样子呢

首先呢,我们从上面往下走

i赋值等于1,然后进行判断

那显然这个时候

i是小于等于100的

所以我们就会执行语一个语句

也就是说,当i等于1的时候呢

这个语句就会被执行第一次

执行完这个语句之后

或者说执行了这个我们叫循环体之后呢

我们就进行表达式三的计算。i=i+1

这个时候1就等于2了

然后我们沿着箭头

继续判断说,i等于i的时候

它是不是小于等于100呢

当然,它小于等于100.所以这个时候

我们就要再一次执行这个语句

那么这是我们第二次执行这个语句

大于等于三呢

也就是说,执行完语句以后

i等于i+1以后它变成3了

那么显然它还是小于等于100

那么语句又会得到执行

这时候是第三次执行这个语句了

那我们看到, i等于几

它就是第几次执行语句

所以这么一直循环下去

而且呢,表达式三每次都会让i+1

所以啊,i慢慢变大变大变大

当i等于100的时候

我们执行了表达式三

i等于100了

在看呢,它还是小于等于100

那么这个时候

我们的语句需要执行

这个时候应该就是根据规律第100次执行了

然后我们再算表达式三,i=i+1

这个时候,i就变成了101了

这个时候表达式二的计算结果就是force

那语句就不会再执行了,就直接我们叫

跳出了,或者说退出了这么一个循环

所以,一共这些语句被执行多少次呢

我们发现说,最终执行了100次

那么这样一个控制呢,我们就通过

我们的表达式一i=1,表达式二i小于等于100

和表达式三i=i+1这三个表达式来共同配合实现的

那么在我们写代码的过程中间呢

还经常把i=i+1写成i++或++i的形式

这个呢,也是我们常用的一个写法

看大家自己写代码的一个习惯,都可以

好,再回到我们刚才的这个谁做好事的这个问题上

我们现在怎么利用这个for这个语句

来避免这种重复的代码书写呢

请看我们的这个代码

我们现在用一个循环变量

就是这个goodman

我们既然是依次假设它是ABCD

所以我们现在就让goodman这个循环变量呢

初始值,我们说这个表达式一呢

就是goodman等于字符A

那么它的这个表达式二呢

是goodman小于等于字符D

因为我们知道,这个字符啊其实是一个整形

对吧。然后他们是这个顺序

我们用这个goodman小于等于D做表达式二

表达式三呢,我们这里写的是goodman++

好,中间是我们的这个计数判断

到底是不是有3个人说了真话,并且输出的

那么,根据我们刚才得这个讲解呢

我们用了这个for的语句之后

程序就会反复的执行

那依次的去假设

这个做好事是ABCD

这里还有一个小问题当然

就是如果我们已经找到答案了

那就不需要再去假设下一种情况了

不需要再枚举下面一个可能答案了

所以呢,这个时候我们再次循环

我们再去做没有意义了

那怎么让这个循环提前停下来呢

这里我们要用到一个新的语句

我们叫break

它的作用呢,就是直接从循环里头跳出来

你就别再去计算这个表达式二了

大家看这个我们这个流程图。在语句的部分

如果我们用的是break的话呢

那它根本就连表达式三都不去算了

那更不用往后再去算表达式二了

直接从这个循环里头就断开

break就断开了,跳到外面

所以呢,有了break之后

我们最终的这个代码就会写成这个样子

我们在找到了做好事的人之后

我们就直接break来退出这个循环

就不用继续尝试下去了

这样呢,我们这个完整的找谁做好事就解决了

那我们说,其实这种枚举

这种思想在计算机程序中间经常要使用的

往往呢,我们也是用循环来实现的

我们通过合理的巧妙地去设定

表达式一二三,来实现这种依次的

不遗漏的枚举所有可能的答案

然后通过循环体呢

来检验我们的答案是不是正确

程序设计基础课程列表:

第一章 编程初步

-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 实现程序功能

-程设论道

--程设论道

-师生问答

--师生问答

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

3.3.1 谁做的好事——循环枚举笔记与讨论

也许你还感兴趣的课程:

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