当前课程知识点:程序设计基础 >  第三章 逻辑推理与枚举解题 >  师生问答 >  师生问答二:其他循环语句、运算符优先级与变量作用域

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

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

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

下一节:4.1.1 问题提出(求素数)

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

师生问答二:其他循环语句、运算符优先级与变量作用域课程教案、知识点、字幕

好的老师

那么我的第二个问题就是

在我们C++程序语言里面

除了有for循环这样

一种循环表达语句之外

还有没有其他的

表示循环语句的

这样的表达式

对 还有其他的

循环表示语句

虽然我们说

for可能是用得最多的

那其他的循环语句

一个是while语句

while语句它是这样的

它是先有一个表达式

先判断说这个表达式

到底是真还是假

如果是真呢

它执行后面的语句

如果是假呢

它就像for语句一样直接跳过去了

那还有一个循环语句

我们叫do while语句

这个它是这样

它是先把我们语句

先执行了

执行完以后它再去判断

表达式到底是真还是假

如果真呢它开始循环

再进行下一轮的语句的执行

如果是假呢

就直接跳过了

当然具体的这个语句的细节

也可以去查

相关的这些语言的资料

就可以看到具体的这个语法

是怎么用的

好的老师

我的第三个问题

就是在我练习编程的过程中

我使用到了一些if语句

然后for语句

那么涉及到了一些很多

比如关系运算符

逻辑运算符

当然还有一些圆括号

那么在使用圆括号的过程中

我发现好像有时候

比如我漏写掉一些圆括号

它可能对结果没有什么影响

但是有些时候却不行

就是这个圆括号的使用上面

有没有什么标准

这个问题挺好的

反正我们知道

像数学运算里面

有先乘除后加减

如果碰到这个圆括号

我们得先算这个圆括号里面的

那像这种运算的先后顺序

在我们计算机程序里面

就称为运算符的优先级

我们这门课到现在为止

已经用了加减乘除

这些算术的运算符

然后像今天这一章里面

我们又学习了

关系运算符 逻辑运算符

位运算符

实际上像我们之前用到的

那个赋值的等号那个

它也是运算符

今后还会学到更多的运算符

那这些运算符

它都是有先后的顺序的

也就是说有运算符的优先级的

因为运算符太多了

说实话要弄清楚

所有运算符的优先级

是一件非常非常困难的事情

而对于初学者更是这样了

但是另一方面

我们也没有必要

我要把所有运算符的优先级

都去记住

那怎么办呢

那就是说

我们写程序的时候

就主动的去用那些圆括号

就我希望这要这么去算

那么我就通过圆括号来保证

这个计算机在求值的时候

能够按我设想的那个步骤

先后顺序去执行就可以了

当然有的时候

我们看别人代码

说别人可能

圆括号用得没有那么多

那么我们有的时候说到底

这个式子里面先算哪个呢

那么这个时候我们就

去查一下这个帮助文档

临时的查一下

看一看这个不同的运算符

到底优先级是怎么样的

那解决这个问题也就行了

不一定说自己一定要把

所有的都记住

好的好的 明白了

然后其他我还有一点

正好跟你提一下

就是说有的时候

我们用那个圆括号

并不仅仅是说我要

保证这个优先级顺序的问题

有的时候我是为了

使这个代码的意图更清晰

就像我们这个讲课里面的

展示的那个代码里面

特别是我们在讲那个

破案的那个程序里面

有一个条件是说AEF三个人

有两个人作了案

那我们写法就是

有三大项去取或

那每一项我们都用

括号去套起来

实际上是说

在这个表达式里面

那个逻辑的与比逻辑的或

优先级要高

那我们中间用的关系运算符

它的等号的优先级是最高的

所以你看起来

我们套了好像好几层括号

你如果一个括号都不打

结果也是正确的

但是我们打上括号以后

你就会发现说

逻辑特别清楚

那你自己写代码

别人来看也是觉得

很容易理解

所以有的时候

我们很提倡说

你为了清晰的表达

这种逻辑上的关系

你还是把那个圆括号给加上

好的好的 谢谢老师

那么我最后一个问题就是

在用到for语句的过程中

就是表达式1里面可能

会有一些循环变量的定义

那么就是在这个

表达式1中的定义

和在for语句之前定义这个

循环变量有什么不一样呢

对 这个问题确实也挺好的

这个涉及到

我们程序中的一个概念

叫变量的作用域

什么叫作用域呢

我简单来讲就是说

你的程序的哪个地方

可以用这个变量

因为我们知道

在你声明和定义变量之前

你肯定是不能用的

所以至少要在这个变量

定义之后才能去用

那么一般来说呢

我们在我们看到的一组函数

或者我们有的时候

在for语句这样的

复合语句里面

会有大括号

那么一般来说

在这个变量定义之后

它所在的这个大括号的中间

这部分这个代码的地方

是可以使用这个变量的

那么这一个区域

我们就叫做变量的作用域

出了这个作用域

我们说就不能够去

用这个变量了

我给你看一个例子吧

你看我可以给个例子

像这个例子里面

我在一对大括号的外面

有一个变量是x

在括号里面有个变量是y

由于他们这个代码的位置关系

可以看到说

我在y的后面

紧跟着去输出xy的话

都是可以的

但是如果我出了y

所在的这一对括号

当然我还在x的

这个括号里面

那我可以看到说

这时候访问x

当然还是可以的

但是y就不行了

因为y来讲

它已经

现在输出y

已经出了定义外的

这么一个花括号

也就是我们叫

也就是术语上叫说

它已经离开了y的作用域了

那么我们就不能

对它进行访问了

那么变量作用域

实际上是对于

for语句来讲是说

如果我在for语句之前

定义这个变量

那当然这个for语句内部

肯定是能访问这个变量的

就像刚才那个例子一样

那for语句后面呢

同样也还可以

访问这个变量

那如果我在for语句的

这个表达式1里面

去定义这个变量

那么这个变量现在就属于

for这个语句所包含的

作用域里面

那么也就是只能

在这个for语句之内

或者说循环体

包括它后面的表达式

它可以去访问这个变量

你这个for语句执行完了

比如退出循环了

那就再也不能

去访问这个循环变量了

这个区别就在这个地方

确实有的同学

以前我们上课的时候

也有的同学问说

既然这样的话

我能访问变量

肯定比不访问变量要好

那其实不是的

就是我们说变量作用域

它不是越大越好的

因为什么呢

因为变量你不是

要给它一个名字吗

那如果所有变量的作用域

都是整个的这个程序

那你在这个作用域范围之内

对不同的变量

就要取不同的名字

起名这件事情

如果起多了

是一个很困难的事情

你得保证它们的名字不一样

用的时候你得保证

你没有记错

或者说我们在敲代码的时候

这手得保证不敲错

那所以如果太多的话

这个变量都可以访问

那很容易犯这种错误

特别是有的时候

我们需要很多人合作去写

一个大型的程序

那么在相同的作用域下

如果你定义了一个变量叫这个名字

那别人就不能用了

别人用的话就会冲突

如果大家都不注意这一点

大家都无限制的去

就是说我就让这个变量的作用域非常非常大

那就会很容易引起变量相互的冲突

我们把这种情况

称为作用域的污染

所以这样其实是不对的

所以我们自己写代码应该遵循一个良好的习惯

尽量的让这个 变量作用域 刚好在我们使用的范围就行了

好的 谢谢老师

程序设计基础课程列表:

第一章 编程初步

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

-程设论道

--程设论道

-师生问答

--师生问答

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

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

也许你还感兴趣的课程:

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