第31课 不睡觉的计算机
不睡觉的计算机(while循环)

计算机的强大在于超强的计算能力和无休止的运算,当我们给程序赋予循环力量的时候,它们的实力将更加凸显。
温故知新
用“*”组装一个吃豆人张嘴闭嘴的小图案。
张嘴:
闭嘴:
吃豆人不断地交替张嘴、闭嘴,并且向前移动。

(1)int i=3:声明了一个整数变量i,并初始化为3。这个变量i将用于控制图案的宽度,初始宽度为3个字符。随着不断地进行i++增加字符宽度,左边不断用空格补充,于是就实现了吃豆人向前移动的效果。
●i=3

●i=6

●i=12

(2)while(true){}:这是一个无限循环,也叫作死循环。因为循环条件永远为真,所以循环会一直执行下去。

(3)i++:每循环一次,i自增1,于是setw(i)函数使得输出字符的宽度也增加1。*图案靠右对齐,于是就有了前进的效果。
划重点
while(true){
执行指令
①while是C++中的一个关键字,表示一个循环结构。
②(true)是循环的条件部分,括号内的条件表达式负责判断循环是否继续执行。当条件表达式直接写成true时,意味着条件永远为真,因此循环会无限制地执行下去。

无限循环通常用于需要一直运行的任务,例如游戏循环、服务器监听等,它们需要不间断地运行。
数字宝藏
有一座神秘的岛屿,埋藏着传说中的数字宝藏。这个宝藏由一系列数字组成,只有找到了所有数字的总和,才能揭示宝藏的真正位置。
作为数字宝藏寻找者中的一员,你的任务是输入岛上的每个人所知道的数字,然后计算这些数字的总和。只有当你找到了所有数字并计算出总和,才能揭示宝藏的位置。
每个居民都知道且只知道一个数字,他们愿意与你分享,你需要不断地询问岛上居民。当你不再想继续输入数字时,可以输入-1来结束。
现在,你将使用程序来记录和计算这些数字,以找到宝藏。开始你的数字冒险吧!
通过while循环实现数字的连续输入,并且累加求和。

运行程序:
请输入要相加的数字:1
请输入要相加的数字:2
请输入要相加的数字:3
请输入要相加的数字:4
请输入要相加的数字:5
请输入要相加的数字:6
请输入要相加的数字:7
请输入要相加的数字:8
请输入要相加的数字:9
请输入要相加的数字:-1
最终的计算结果是:44
(1)声明两个变量:一个num用于数字输入,一个sum用于求和。
(2)每次进入while循环前都需要进行圆括号里的条件判断,条件为真才能进入循环。

(3)如果条件不成立(false),则跳出循环,执行下一条语句。

(4)通过流程图来看循环。

敲黑板
while(){}与if(){}的比较:

提出思考
为什么最终的计算结果出现错误了呢,明明相加是45,但是输出却是44?
一探究竟
第一次循环输入1,此时sum为0,num为1,sum=sum + num=0 + 1=1。
第二次循环输入2,此时sum为1,num为2,sum=1 + 2=3。
第八次循环输入8,此时sum为28,num为8,sum=28 + 8=36。
第九次循环输入9,此时sum为36,num为9,sum=36 + 9=45。
问题出在哪呢?
此时num为9,循环还没有结束,然后输入-1。
第十次循环输入-1,在判断之前还进行了一次求和。

如何才能解决呢?
调换一下输入数字和求和的顺序?

这会导致还没输入数字就先进行一次求和,会有问题吗?
其实不会,一开始sum为0,num为0,0+0=0,不影响结果。

巩固练习
(1)下面哪段代码会输出数字1~10(包括1和10)?()
A.
int i=0;
while(i<=10){
cout<<i<<""; i++;}
B.
int i=0;
while(i<10){
cout<<i<<""; i++;}
C.
int i=1;
while(i<=10){
cout<<i<<""; i--;}
D.
int i=10;
while(i>0){
cout<<i<<""; i--;}
(2)阅读以下代码,填写输出结果。
#include
using namespace std;
int main(){
int i=0; while(i<5){
cout<<i<<""; i +=2;}
return 0;}
输出:
(3)编写一个C++程序,将班级中学生的考试成绩逐一输入,直到输入一个-1才停止,使用while循环计算并输出学生考试成绩的平均值。



