第30课 3、7过游戏
3、7过游戏(条件分支)
数字精灵们在等餐的时候,特别喜欢玩一个烧脑游戏—3、7过。那什么是“3、7过”呢?由第一位同学说出第一个数字,然后大家顺次接着报数,报出自己位置的数字,当遇到的数字是3或7的倍数或者数字尾数是3或7的时候就说“过”。
例如:从5开始报数,5、6、过(7)、8、过(9)、10、11、过(12)、过(13)、过(14)、过(15)、16、过(17)……
7:遇到7的尾数,不说7而说“过”。
9:遇到3的倍数,不说9而说“过”。
12:遇到3的倍数,不说12而说“过”。
13:遇到3的尾数,不说13而说“过”。
14:遇到7的倍数,不说14而说“过”。
15:遇到3的倍数,不说15而说“过”。
17:遇到7的尾数,不说17而说“过”。
请问:接下来的18是说“18”还是说“过”呢?

如果有个程序能帮我玩这个游戏那该多好呀!
3、7过

运行程序:
输入数字:1
输入数字:2
输入数字:3
过
输入数字:4
输入数字:5
输入数字:6
过
输入数字:7
过
输入数字:8
输入数字:9
过
输入数字:
(1)什么时候说“过”,是程序设计的关键。
有4个条件,只需满足其中一个即可,可以使用||(逻辑或)将条件相连。
①数字尾数为3→尾数就是个位数,取出个位数与3比较。
②数字尾数为7→尾数就是个位数,取出个位数与7比较。
③数字是3的倍数→3的倍数就是除以3的余数为0的数。
④数字是7的倍数→7的倍数就是除以7的余数为0的数。
数字尾数为3||数字尾数为7||数字是3的倍数||数字是7的倍数
num%10==3||num%10==7||num%3==0||num%7==0
4个条件满足其一,即为真(true)
(2)编写代码:

条件为true则输出“过”,否则输出数字本身。
提出思考
如何实现上述游戏中的数字自动顺次出现呢?
想一想,如果循环里的num每次都自增1,是不是就可以了呢。

运行程序:
输入起始数字:1
1→1
2→2
3→过
4→4
5→5
6→过
7→过
8→8
9→过
10→10
11→11
12→过
13→过
14→过
15→过
16→16
(1)#include:windows.h文件包含了许多用于操作Windows操作系统的指令和信息,将它包含进来是为了使用Sleep()函数。
(2)Sleep(500):通过Sleep()函数将数字的输出间隔一定时间。
(3)num++:每循环一次,num增加1,实现数字自动顺次出现。
敲黑板

当num为1时:
第一次进入循环,输出num→1,然后num自增1,此时num变成了2。
第二次进入循环,输出num→2,然后num自增1,此时num变成了3。
每次循环num增加1,下一次循环num比上一次num多1。

巩固练习
(1)以下哪个if语句中的“真”一定会输出?()
A.
if(x==5){
cout<<"真";}
B.
if(x>0 && x<10){
cout<<"真";}
C.
if(true){
cout<<"真";}
D.
if(x !=5){
cout<<"真";}
(2)在一个while(true)循环中,如果没有适当的退出条件,会发生什么?()
A.编译错误
B.程序会崩溃
C.程序会一直运行,无法终止
D.程序会输出错误消息
(3)请编写一个C++程序,使用while(true)循环不断让用户输入字母,如果是大写字母就输出“我改成了小写”+小写字母;如果是小写字母就输出“我改成了大写”+大写字母;如果是其他字符就输出“输入有误!”;如果是数字0则直接退出程序,输出“字母转换结束!”
示例:
请输入一个字母(输入0退出): R
我改成了小写r请输入一个字母(输入0退出): d我改成了大写D
请输入一个字母(输入0退出): 9
输入有误!
请输入一个字母(输入0退出): 0
字母转换结束!
第3部分 不辞辛苦 —— 循环结构
第三部分
不辞辛苦
——循环结构