当前课程知识点:C语言程序设计(上) > 循环结构的程序设计(一) > 4.1 需要重复执行的程序 > 4.1.3----while循环的应用-录入速度~1
大家好 那下来我们再来看
两个用while
构建起来的循环的两个小例子
第一个是 测试录入的速度
那这件事情说得是什么呢
是说 你从键盘上录入
英文呢 咱简单期间我们就录入英文的文章
并且把这文章显示在屏幕上
然后呢你记录我录入的字符的个数
那就是说看谁录入的快了
直到我不录入的时候为止
那这个问题里边呢
大家想想 是不是这样子
计算机在这个程序里边都做哪件事
我们再看一下 录入
就说 它要获取到你这个字符
并且显示
然后呢 还要数数
数你录了多少个
那大家总结一下是不是这样
它每一次你敲一下键盘它都是
获取这个 你键入的字符
显示并计数
获取 显示 计数这三件事
那这个过程
获取 显示 计数这件事情
做n次
那到底多少次呢
这件事情里边是说
它的特点是什么呢
我循环的次数是不确定的
每个人可以是不一样的
那我到什么时候结束呢
我想结束的时候我按一个标记
用设标记的方法来结束这个循环
这是while适合解决的问题
就是说 循环的次数不确定
我用设标记的方法来结束这个循环
那我们看
这个流程是不应该是这样
先定义个字符型的变量
以保存你这个字符
下来呢 我们就是判断说
你这个字符是不是那个结束标记
如果我们正着说的话 你是结束标记吗
yes 那yes是循环执行还是不执行呢
while的规则是
yes循环是执行的 循环体是执行的
no是不执行的
那我们实际上这个问题现在说
你是结束标记吗 你是的话要出去
那么怎么做呢 我们把这条件反过来说一下
说你不是循环标记吗 yes
不是我就执行这个循环
否则我就出去
那这就解决了
ch里边不等于我刚才设的那个标记
咱现在设了是#
我用这#
那不是# 我就进来
如果不是的话我就还继续在录入
那么录入的里边
你做三件事 我们刚才说了
获取 输入这个ch
然后把它输出显示出来 并且计数
循环体里做这三件事
完了无条件的返回到循环入口处
现在说 你刚才敲得那个字符
敲得这个输入的这个ch是结束标记吗
我们是反着问的
别忘了 不是结束标记吗
直到说
的确是结束标记了
循环就会到了 输出 结束
结束这个红颜色的这个循环体
输出你的统计结果
就数的那个数
这就是我们这个问题里边
的一个流程
那么我们看一下
这个 要把它变成程序的话
大家先看一下前边
都是一样的 跟我们平常的程序是一样的
这块看一下 蓝颜色的time
大家没有用到过 这还有一个time
这是time t1 time t2 这是做什么呢
time我们看前边多了一个include
includ time.h
是说获取时间的函数
获取你当前时间的函数
哪个是当前
执行time的这个片刻
那个瞬间
执行到它的 那个瞬间的时间
那你要用这个函数
这是一个内部函数 你这前面就要包含
这个时间函数的.h头文件
那我们看
在这个while之前
也就说你要进行录入
并计数的这件事情之前
我们获取一个时间
我们在结束它之后再获取一个时间
那这两个时间的差
就是你所用的时间
我们看这底下一定有说
t2-t1那边的t2-t1
这是引用的那个时间
那我们看在循环体里红颜色的这一块
表达的意思是什么呢
while给你的条件
就我们刚才说的 你不是结构标记吗
给那个条件
然后在循环体里边完成这三件事
获取字符 显示计数
这样的事情
我们到编译环境下把这个程序调试一下看看
大家看在这里边
循环的入口在这 while
while里边应该是我们原来说的条件
循环体进入之前
获取了一个时间
结束了循环以后
在获取了一个时间
两个时间在这相减
这就是我们用的整个录入的时间
那在这个录入里边
我们刚才说循环体里边应该做三件事
那三件事
是说 你得到一个字符
并且把它显示在屏幕上
然后计数 做这三件事
我们看一下这里边只有计数
获取这个字符和显示都没做
那我们要不要在这应该加一句
scanf读一个字符
在printf显示
要不要这样加呢
我们想到一个函数 看看大家有没有想到
getchar
这个函数的功能是什么呢
大家还记不记得
这个函数的功能是
从键盘上获取一个字符
在你获取这个字符的过程中
他自然就把这个字符
就给你显示在屏幕上
目的是为了让大家确认你敲得对不对
那我们 这个函数的功能
即获取到 到这个字符
又显示在屏幕上
所以我们完成了 获取并显示
你要我们把这个东西送到ch
然后做什么呢 我们在这一块
加一个括弧
在h里边 得到了一个字符
然后 怎么让这个条件
判断这个条件呢
我们刚才说设了一个标记 #
那现在是说 等于这个#还是不等于呢
我们说 yes是执行循环
那是 不是#的时候
不等于这个#的时候
来执行这个循环
这就是我们这个括弧里边构建的条件
是说什么呢 前面这个括弧里的东西
不等于#你就做下边的这件事
而下边的事现在变得简单了 只做一件事
计数
是因为前两件事
获取这个字符并显示已经在这里边完成了
所以呢 巧妙地应用这些函数
会使你的程序 变得非常的简洁
那当这个循环结束的时候
那这两个时间
我们在这显示说
你送的字符数n
计数器里边的n就是你的字符数
而你用的时间呢
就是它两个相减的差
运行一下看看
我们来敲了一些字符
好 不想敲的时候呢
我们给它一个#
它就出来了
说你敲了53个字符
每秒中4.42个
每秒中敲4.42个
这个程序里边是 想告诉大家 是
循环的在这入口
循环在那里出口 循环体里边只有一句话
那循环的构建这个条件的过程里边
完成了一个函数体里边需要的一些功能
这是可以的
那最主要的是说我们通过设一个标记
来使这个循环结束
什么时候会用它呢
当我这个循环次数未知的时候
我需要用标记结束
那这个循环的
判断条件呢 就是以这个标记
为它的判断条件
那这里边还捎带了给大家说了
你需要 用到一些内部函数的时候
就需要包含它的头文件
并且这些内部函数的适当的使用
会为你的程序
增加了非常方便的一些手段
使得你的程序就会变得简洁
在这个程序里边
大家 其实是有很多需要讨论的
我们看见这个程序里边
这个
我实际上已经是把括弧删掉了
前面没有括弧了
我们运行这个程序
跟刚才的结果是一样的
它是对的
看一下
大家看 是一样的 可以统计
然后呢 每秒中多少次
大家看
这里边呢实际上我们是少掉了一个括弧
优先集已经发生了变化
那他是 已经是先做关系运算
在赋值
最后是拿ch里边的东西
去做条件判断的
那这样为什么也是正确的呢
大家一起分析一下
ch里边实际上你最后得到了一个逻辑结果
逻辑值 而while正是要判断的是逻辑值
我们并不提倡这样写
这是想说
构建条件的不同
以及你的循环体里边
构建的流程的不同
这一块呢 还是有非常大的空间的
给了大家一些作业下去
希望大家仔细的去 在编程序的过程里边
可以考虑一下程序的一个算法的一个选取
那我们在下边看下一个程序
我们再看第二个例子
求平均数 谁的平均数呢
我直接把程序给出来 大家看看
前面都一样
我给一个total 定义了一个total
来放和
放和
那我们知道
这个求和 就是Σ了
一个累加
你拿进来一个数 加法
就是循环体里边做什么呢
取一个数相加
取一个数相加
那每一次只做这个 那循环就死掉了
是死循环了 那一定是说
取一个数相加
然后问你做够10个数了吗
那么 循环体里边变成了
取一个数相加
然后 再说什么呢
相加完了以后呢
计数往前走一步
计数往前走一步 所以我们看这一块
在这里边 我们循环体里边的
条件是什么呢 是一个计数器count
我们这个count是
从谁开始的呢
从0开始的 那就0到9
那做10次 0到9做10次
那么 循环变量是count
循环的终值是10
到10就不做了
那在这里边 我们看
每进的循环体
蓝颜色的这块我们先做了一个计数
++count ++
计数一次 然后你在做
说 你取一个数scanf一个数
然后累加 返回去
说 你count里边现在
增加到第几了 是8还是9啊
<10吗 <10再做
否则我就不做了 到哪呢
这个花括弧的外边
-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