大家好
欢迎继续学习C++语言程序设计
这一节
我给大家介绍do while语句
do while 语句 也是一个循环语句
它跟我们前面讲过的while语句
很相象 但是又有不同点
我们看这个关键字先是do
然后是while
那么意思就是说
我先做第一次循环
不管条件如何
第一次循环先做完
然后判断我还进入下一次循环吗
那么这样一个逻辑呢
我们就用do while语句来实现
接下来呢
我们详细来看do while语句
是怎么用的
现在我们来看这样一个例子
从键盘输入一个数
然后将其反转以后输出
我们看这个代码如何实现
为了接收这个键盘输入的数
我们当然要定一个变量
然后将输入的数据
存到这个变量里面
我们定义一个n
用来接收键盘的输入
可能同学们想到
有各种各样的办法
这里给出一个比较简单的办法
就是不断地除以10取余
看看这个程序的主体部分
是一个do while语句
do while是一个什么样的语句呢
看到了while
它跟我们以前学的while
是不是有什么类似的地方呢
的确这也是一个循环语句
只是前面先出现一个do
在整个循环体结束以后
才有个while
也就是首先它要执行一遍循环体
然后再判断循环条件
是否依然为真 是否依然成立
如果循环条件依然成立的话
再继续执行下一次循环
那么具体到这个问题呢
我们看输入一个数
不管你输入的是一个什么数
要你反转输出
那总归要执行一次吧
即使你输入的是一个个位数
就一位
那反转输出还是它自己
也要输出一个吧
所以这种问题是无论如何
循环体都要执行一次的
所以我们来看
在这个do后面的循环体中呢
将n除以10
把余数放在right_digit里面
那就是它存下的是当前
最右边的那一个位
然后输出这一位
我们不是要求反转输出吗
就输出这一位
输出完了以后呢
将n除以10 取它的商
取它的整数商
这个时候判断n是否已经等于0了
如果输出一个最右的位数以后
除以10得到的商数已经是0了
就说明到此为止
全部该输的位数都输出完了
可以结束了
如果除以10得到的商数不是0
就说明还有位数没输出完
所以回过头去继续循环
再一次除以10 输出它的余数
再次把当前的n除以10
只取它的商数
然后判断商是否为0
所以从这个执行过程呢
大家可以看到
它跟while语句是很像的
只不过它的差别在于
先执行一次循环体
再判断循环条件
而while语句是首先要判断
是否满足循环条件
满足的话才进行循环
现在我们来看这个do while语句
它的语法形式
do之后是一个语句
可以是单条语句
也可以是
大括号括起来的复合语句
然后while里面是一个表达式
这个表达式为真的时候
就继续进行下一次循环
如果表达式为假
整个循环就结束
现在我们用do while语句
也来实现一下前面这个
求1到10之和的这个例子
我们看循环体
仍然是将i累加到sum上去
然后i自己增1
只不过是至少执行一次循环
然后再判断是否依然i小于等于10
如果i依然小于等于10的话
再进行下一次循环
从这道例题的效果看
好象用do while和while
效果是一样的
大家可以运行验证一下
看看效果是不是确实一样
但是do while和while
当然它们的效果在一些其他时候
是有差别的
不然的话也不会设计两条语句
来实现同样的功能啊
下面我们看看
这两个程序的对比
左边这个程序用的是while
右边这个程序用的是do while
都是从键盘输入一个i值
但是这一回呢
是计算从i到10的和
要求i小于等于10
那我们对比一下两边程序的差别
如果你输入的这个i
本身是一个小于等于10的数据
那左边 右边
两个程序的运行结果
应该是一样的
如果你输入的这个i
超过了10 比如说11或者18
那左边 右边两边的程序
效果就不一样了
当i大于10的时候
左边这个程序
一次循环都不会执行
而i大于10的时候呢
右边这个程序也会执行一次循环
因为右边这个程序
是do while语句
它先不判断表达式
至少执行一次循环体
每次循环体结束的时候
才判断表达式
这个就是它们俩的差别
将来写程序的时候
我们选用哪一种循环语句呢
那么就让你自己判断一下
你的算法本身
是要求首先判断条件
当条件成立的时候再执行循环
还是说可以不用判断条件
至少应该执行一次循环
你的问题解法是哪种算法
你就选用哪种循环语句