28.程序流程结构——循环结构——while
while(循环结束条件){需要循环执行的语句} //注意,避免死循环
demo:猜数字
代码:
int main() {
//系统生成随机数
int num = rand()%100 +1; //生成1~100的随机数
std::cout<<"系统已经生成随机数"<<std::endl;
//玩家猜测
int val =0;
//循环体
while (1){
std::cout<<"请输入猜测的数字:"<<std::endl;
std::cin>>val;
//提示玩家
if (val >num){
std::cout<<"猜测过大"<<std::endl;
}else if (val < num){
std::cout<<"猜测过小"<<std::endl;
}else{
std::cout<<"恭喜您猜对了"<<std::endl;
break;
}
}
}
运行结果:
系统已经生成随机数
请输入猜测的数字:
50
猜测过大
请输入猜测的数字:
42
恭喜您猜对了
注意,此处生成的随机数为伪随机,多次运行后即可发现每次生成的数都是42。
如何使伪随机数变成真正的随机数?
1.引入头文件
#include <ctime>
2.添加随机数种子 作用:利用当前系统的时间生成随机数,防止每次随机数都一样
srand((unsigned int)time(NULL));
28.程序流程结构——循环结构——do...while循环
do{要循环执行的语句}while(循环结束条件)
do...while和while的区别:
do...while会先执行一次循环语句
demo:水仙花数
水仙花数是指一个三位数,其每一位上的数字的三次幂之和等于它本身
利用do...while语句,求出所有三位数中的水仙花数。
代码:
int main() {
//所有三位数:100~999
//百位数:数字/100 十位数:(数字%100)/10 个位数:(数字%100)%10
//判断:个位数三次方+十位数三次方+百位数三次方 = 数字本身,输出
int num =100;
int a =0;//百位数
int b =0;//十位数
int c =0;//个位数
do {
a = num/100;
b = (num%100)/10;
c = (num%100)%10;
if (a*a*a + b*b*b + c*c*c == num)
std::cout<<num<<"是水仙花数"<<std::endl;
num++;
}
while (num <1000);
}
运行结果:
153是水仙花数
370是水仙花数
371是水仙花数
407是水仙花数
29.程序流程结构——循环结构——for循环
格式: for(起始表达式;条件表达式;末尾循环体){循环语句}
for循环本质上和while、do...while类似,只是结构更为清晰代码量更少
demo:敲桌子
从1数到100.如果数字个位含有7,或者10位含有7,或者该数字是7的倍数,我们打印敲桌子,其余数字直接打印输出。
代码:
int main() {
int a =0;//个位
int b =0;//十位
for (int i =1; i <101; i++) {
a = i%10;
b = i/10;
if (a ==7 || b ==7 || i%7 ==0){
std::cout<<"敲桌子"<<std::endl;
}else
std::cout<<i<<std::endl;
}
}
运行结果:
1
2
3
4
5
6
敲桌子
8
9
10
11
12
13
敲桌子
15
16
敲桌子
18
19
20
敲桌子
22
23
24
25
26
敲桌子
敲桌子
29
30
31
32
33
34
敲桌子
36
敲桌子
38
39
40
41
敲桌子
43
44
45
46
敲桌子
48
敲桌子
50
51
52
53
54
55
敲桌子
敲桌子
58
59
60
61
62
敲桌子
64
65
66
敲桌子
68
69
敲桌子
敲桌子
敲桌子
敲桌子
敲桌子
敲桌子
敲桌子
敲桌子
敲桌子
敲桌子
80
81
82
83
敲桌子
85
86
敲桌子
88
89
90
敲桌子
92
93
94
95
96
敲桌子
敲桌子
99
100