当前课程知识点:C语言程序设计(上) > 循环结构的程序设计(一) > 4.2 至少要执行一次的循环 > 4.2.2-do-while循环应用
下来我们看用do while
实现
循环的程序设计的两个例子
第一个是n的阶乘
我们知道
n的阶乘就是你输入n
你的n多大 然后
下边你要做的事情就是
我们直接看一下程序
大家看一下
前面的这些都一样
先scanf拿到你这个n
如果我n给的是10
那咱就是1乘以2 一直乘到10
如果给的是一万
那咱就乘到一万
那在入口处我们看一下
这有一个判断
如果n大于0的话
做下边的这个
红颜色的
这件事
到了这才做do
那可见
if(n>0)不是循环的入口
而循环的入口在哪呢
在do
do那呢
我们看
if(n>0)是做什么呢
就是我们前面已经
两次的讨论过的
测试用例
这个程序的兼顾性
也就是说我这块防止
大家在输入n的时候
你不小心输入了一个
不合理的数据
比如说你不小心碰了一个a进去了
或者是你不小心给了一个
你不需要的一个数据
那么这时候你的 n
咱现在n的阶乘里边要求的是
n必须是大于0的
所以
当n大于0的时候
我再做下边的这些事情
否则
我就直接到了循环的出口
循环外边
就直接printf了
那大家说 你一次都没做
到printf这块输出的是什么呢
我们看
累乘
我事先给它置1的
置的1
那这时候一定数
如果你是一个不合法的数据
那输出的累乘器里边就是1
如果在这个程序里边设计
测试用例的话
那累乘器里边这个是不是1
就是一个测试用例
那我们这块
先说如果是一个合法的数据
我们进来先做
做在这里边累乘
然后做什么呢
n不是加加了
n减减
为什么呢
我要让它接近于谁呢
下边的循环出口处是
while n
什么意思啊
我们没有说
n里边没有给一个
关系运算
直接给的是n
这个问题是不是判断说
n非0吗
n不是0吗
就你还没做完吗
你没做完
你就继续做
直到你做完的时候为止
那大家现在看
这个事情里边实地上做的是什么呢
从最大的数开始乘的
比如说你给的n是10
那一定是10*9*8*7
这样一直乘到
n
非0的时候是1
最后那个数是1
如果是0的时候
还做吗
不能乘以0
乘了0就前功尽弃了
是0的时候
咱就跳出来
n非0的时候
条件满足的 回去
这个例子里边有两个点
提醒大家注意
其实没有新的句子
都是do while
先做 后判断
一个是说
在给一个输入数据的合法性的检验
这是一个
第二个是说
我们while里边的这个条件
可以是一个变量
可以是一个表达式
我们这块给的是一个变量
因为
逻辑判断的时候
我们判断的仅仅是说
如果你给的是一个式子
是计算这个式子的值
然后判断它是非0吗
非0则满足
否则
为假
非0则真
否则为假
所以这里边就给一个变量
只看变量里边的值
这样判断也是一个
合理的
一个do while的形式
我们再看
下一道题
下一个是字符分类的统计
这一块是说
我们从键盘上敲字符
敲的字符
假如说我们给的分类是这样
这样分类
第一类
你把数字归为一类
然后呢你把
加减乘除
和求余 和等号
给它分为一类
那就是加减乘除
求余 等号是六个
第一类里边有十个字符
十组
第二类里边有六种
剩下的其它的所有的
都归为第三类
那什么时候就结束了呢
当输入斜杠的时候
我们就结束了
那这时候
这个程序运行起来
你不停地从键盘上
敲数字
敲键盘
敲进去以后
它自然把你敲的东西分成这三类
三类里边
每一类得去判断
是哪一个呀
属于哪一个
哪一个里边计数
最后把三类里边
分别的东西输出
我们在边映环境下看一下
调试一下这个程序
我们看一下这程序
int用了三个计数器
分别做三个分类里边的计数
怎么获取到字符呢
我们用的是getchar
这个函数
把获得的字符送到ch
那么ch就成了
switch
我们这里边用了一个switch的结构
是 开关选择
ch成了switch的一个
条件
switch里边
这个ch里边如果是数字
入口在这
这十个数字
是同一个入口
都走这进来
如果是这里边的任意一个
class1计数
如果是
这六个符号里边的任意一个
它们是同一个入口
剩下的 default
是另外一个
其余的所有字符的入口
那么这种设置
switch
我们知道
不可能有一个字符没有归宿
不是数字
也不是这六个符号里边的一个
一定就走了default
不会有我们敲进来的哪个字符
没有归宿
那这样
在出口处判断
ch
不是结束标记吗
yes
那一定就是返回来的
继续做这个循环
直到
它是这个反斜杠
我们大家有没有注意到这一块
单引号里边引了两个斜杠
还记不记得
第一个斜杠是什么意思呢
是我们的结束标记吗
当然不是啦
第一个斜杠是
转义字符的一个标记
而第二个斜杠才是
你真正要的
那个结束标记
那这块的有条件是
不是结束标记吗
真
咱就返回来
否则
我们就继续往下执行
循环结束
出口输出
我们运行一下它看看
再给asd
三个 三个
这是三个是什么呢
三个其它了
因为我们
第一类 数字
第二类 符号
好啦
给了四个符号
然后呢
刚才给了一个回车
注意我们回车才到了这
再给一个斜杠 结束
那么现在
不要忘了回车也是一个字符
那就是说其它里边
除过asd还有一个回车
还有一个结束标记
来看一下
数字三个
没有问题
符号
四个
怎么成七个了呢
这个其它的
是几个呢
我们刚才说
asd三个
刚才这还有一个回车
四个
再这个斜杠
五个
也没有问题
那现在这有问题
七个
实际上应该是三个
怎么是七个了呢
我们看一下
就是
符号
我们刚才说这块的符号是
符号我们刚才输入了是四个
但是看见是七个
为什么呢
看一下这块
少了一个break
少了一个break
流程怎么走了呢
流程是说
你给了三个数字的时候
任何那三个数字都走了这一块
而走完了这一块
计数
下来 顺序执行下边的
无论你是数字
还是符号
因为没有break这块不会被中断
流程继续走到
下边来了
这是我们在讲
前边
上一章
讨论switch的时候的它的一个功能
在这一块不要忽略了
我们把它加上再来看
还有我们刚才给的是一个
然后刚才给了一个回车
再给一个
反斜杠 结束
这下没有问题了
数字 三个
符号呢
然后
其它的是
asd三个
一个回车 一个反斜杠
五个
没有问题
这里边我们构建的是
哪个呢 用
直到型循环
先
执行循环
再做判断
这是一个
分类统计的在用
直到型循环构建的
这么一个流程
在这个流程里边
嵌进去的是什么呢
这个循环体里边用
switch
来进行的分类
这种应用其实在平常也是很多的
它基本上是用
do while构建的循环
适合
这个循环
不会是连一次都不做
那么这种情况就是先上来先做
在出口处再判断
这道题目大家也可以下去运行一下
尤其是
大家可以用跟踪的方式看一下
有break的情况下
以及
在出口处判断的流程的走向
-1.1 计算机的问题求解方法
--讨论题:数学模型
-1.1 计算机的问题求解方法--作业
-1.2 C语言与C程序
--讨论题:运算符
-1.3 C语言处理系统与程序调试运行
--例程
-1.4 程序中的人机交互
--例程
--作业讨论区
-2.1 算术运算的C程序实现
--算术混合运算.c
-2.1 算术运算的C程序实现--作业
-2.2 关系运算的C程序实现
--bukao.c
--字符比较.c
--讨论题:比较大小
-2.2 关系运算的C程序实现--作业
-第二周作业--作业
-2.3 逻辑运算的C程序实现
--计算结合性
--闰年.c
--自动购票问题.c
-2.3 逻辑运算的C程序实现--作业
-2.4 位运算的C程序实现
--讨论题:位运算
-2.5 几种很个别的运算
--讨论题
--讨论题
-2.5 几种很个别的运算--作业
-2.6 混合运算及数据类型转换
--讨论题:数据类型
-2.7 顺序结构程序实例
--Video
--三角形面积.c
--讨论题:工业产值
-2.7 顺序结构程序实例--作业
-3.1 程序中的路径选择实现
--打印学生成绩.c
--一元二次方程.c
-3.1 程序中的路径选择实现--作业
-3.2 路径中的再选择——嵌套判断
--例程
--讨论题:程序改错
-3.2 路径中的再选择——嵌套判断--作业
-3.3 复杂判断问题的C程序设计
--3.3 多级选择
--银行存款.c
--讨论题:多级选择
-3.4 多分支问题的C程序设计
--加减乘除运算.c
-3.4 多分支问题的C程序设计--作业
-3.5 GOTO的适当使用
-3.6 选择结构的程序实例
--3.6 程序展示
--计算第几天.c
--讨论题:输出奇数
--讨论题:计算税金
-3.6 选择结构的程序实例--作业
-第四周作业--作业
-4.1 需要重复执行的程序
--求和.c
--打印学生成绩.c
--统计录入速度.c
--求平均数.c
-4.1 需要重复执行的程序--作业
-4.2 至少要执行一次的循环
--n的阶乘.c
--字符分类统计.c
-4.2 至少要执行一次的循环--作业
-4.3 已知循环次数用for语句
--求和问题.c
--数列求和.c
--讨论题:循环语句
-4.3 已知循环次数用for语句--作业
-4.4 循环控制——简单循环应用
--水仙花数.c
--讨论题:死循环
--讨论题:猜数字
-循环结构的程序设计(一)--4.4 循环控制——简单循环应用
-4.5 循环的嵌套
--讨论题:程序运行
-4.5 循环的嵌套--作业
-4.6 break与continue
--最大素数.c
-4.6 break与continue--作业
-4.7 循环的综合应用
--数的排列组合.c
--鸡兔同笼.c
--打印空心字符.c
--讨论题:打印图形
--讨论题:计算闰年
-第六周作业
-第六周作业--作业
-5.1 同类有序数据处理问题
-5.2 一维数组的定义和引用
--数组定义.c
--数组初始化.c
--反向输出.c
--讨论题:对称数
-5.2 一维数组的定义和引用--作业
-5.3 一维字符串数组
--讨论题:编程
-5.4 字符串处理函数
--字符串反向.c
--字符串函数
-5.5 二维数组的定义与使用
-5.6 二维数组的输入输出
-5.6 二维数组的输入输出--作业
-5.7 二维数组的应用
--转置矩阵.c
--讨论题:修改程序
-5.8 二维字符数组
--5.8 单词排序
--单词排序.c
-5.8 二维字符数组--作业
-5.9 数组综合应用
--统计成绩.c
--统计字符次数.c
--讨论题:洗牌
-本期课程结束语
--end
-第八周编程作业
-《C语言程序设计(上)》期末复习参考
--html
-《C语言程序设计(上)》期末复习参考答案
--html