当前课程知识点:程序设计基础 > 第三章 逻辑推理与枚举解题 > 师生问答 > 师生问答二:其他循环语句、运算符优先级与变量作用域
好的老师
那么我的第二个问题就是
在我们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.2 买菜问题
-1.3 数学运算
-1.4 补充说明
-1.5 总结
--1.5 总结
-程设论道
--程设论道
-师生问答
-第一章 编程初步--语法自测
-2.1 关于超级计算器的几点思考
-2.2 电子秤模拟 — 背景介绍及需求分析
-2.3 电子秤模拟 — 代码实现
-2.4 变量定义与变量类型
-2.5 猜数游戏与数据表示
-2.6 关于变量的讨论
--公告
-2.7 变量体现的计算思维
-程设论道
--程设论道
-师生问答
--师生问答
-第二章 变量与代数思维--语法自测
-3.1 谁做的好事——语义表示
-3.2 谁做的好事——真假检查
-3.3 谁做的好事——循环枚举
-3.4 谁是嫌疑犯——多重循环枚举
-3.5 谁是嫌疑犯——破案线索表示
-3.6 谁是嫌疑犯——用二进制枚举
-程设论道
--程设论道一
--程设论道二
--程设论道三
-师生问答
-第三章 逻辑推理与枚举解题--语法自测
-4.1 插花游戏
-4.2 筛法
-4.3 线性查找
-4.4 折半查找
--4.4.1 提问
-4.5 排序问题
-4.6 总结
--4.6.1 总结
-程设论道
--程设论道二:筛法
-师生问答
-第四章 筛法与查找--语法自测
-5.1 阶乘
-5.2 排序
-5.3 矩阵填充
-5.4 分书与八皇后
-5.5 青蛙过河
-程设论道
--程设论道一
--程设论道二
-师生问答
--师生问答一
--师生问答二
-第五章 分治思想与递归--语法自测
-6.1 兔子数列问题
-6.2 分鱼问题
-6.3 橱窗的插花问题
-6.4 最长公共子序列问题
-程设论道
--程设论道一
--程设论道二
-师生问答
--师生问答
-第六章 递推与动态规划--语法自测
-7.1 统计记录总数
-7.2 统计活跃用户数
-7.3 统计在线时长
--7.3.2 结构
-7.4 总结
--7.4.1 总结
-程设论道
--程设论道
-师生问答
--师生问答
-第七章 文本数据处理--语法自测
-8.1 将数据组织成链表
-8.2 提高链表访问效率 —— 哈希链表
-8.3 以二进制文件存储链表
-程设论道
--程设论道一
--程设论道二
-师生问答
--师生问答
-第八章 非文本数据处理--语法自测
-9.1 自动售卖程序
-9.2 配制水果信息
-9.3 指定界面语言
-程设论道
--程设论道
-师生问答
--师生问答
-第九章 可配置的程序设计--语法自测