目录
Hello,大家好
今天我胡某人又来偷车了我们继续走在从入门到放弃的的路上吧~
8.1 循环举例
有时候,我们需要重复做事情,举个栗子:
重复打印n个@,没有空格,没有换行
输入n(0 < n <= 100)
输出n个@
比如,输入:
3
输出:
@@@
咋办?
凉拌
肯定不行,所以需要用循环,开始正文吧!
8.2 for循环
看:
for (<初始化控制变量语句>; <条件表达式>; <语句>) {
语句块
}
有点蒙?别着急,慢慢来:
循环循环,对吧,然后我们看看上面那道题:
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
for (int i = 1 /*控制变量*/; i <= n /*条件表达式*/; i++ /*语句*/) {
cout << '@'; //语句块
}
return 0;
}
我们输入
3
输出
@@@
i叫循环控制变量,而且!!!重点来了
8.2.1 循环控制变量的特殊性
我们来代入一下,就明白了
好比说,
你来一家舞蹈班,你在那可以穿它们的衣服,也可以穿自己买的衣服,但是出了舞蹈班,你只能穿你自己的衣服。
你来到循环,你可以用循环控制变量 ,也可以用外部变量 ,但是出了循环,你只能用外部变量。
对吧,看:
第一种情况
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
//调用i
}
可以的
第二种情况
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
//调用n
}
也是可以的
第三种情况
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
//...
}
//调用n
还是可以的
第四种情况
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
//...
}
//调用i
会报错
8.2.2 五花八门的for循环
8.2.2.1 死循环
for (;;) {
//...
}
或者
for (;1;) {
//...
}
for (;true;) {
//...
}
只要电脑没事,程序会一直进行下去,直到你把电脑关了或者关闭程序了。
8.2.2.2 没语句块
for (/*...*/; /*...*/; /*...*/);
它没有语句块,只是判条件,做语句,判条件,做语句,判条件,做语句。。。不成立就停
8.3 while循环
看格式
while (<条件表达式>) {
语句块
}
它的逻辑就是少了初始化控制变量语句和更新语句的for循环,有时我们会用到
可以用while改一下上面的程序:
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int i;
while (i <= n /*条件表达式*/) {
cout << '@'; //语句块
i++;
}
return 0;
}
8.4 do-while循环
跟while很一样,看格式:
do {
语句块
} while(<条件表达式>);
但是,如果跟while一样,
我要它干什么?
(还多打个do)
所以,我们说一下,
while和for都是第一次先上来看条件,成立再做事
do-while不一样,它上来不管三七二十一先执行一遍语句块,再看条件
所以,
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int i;
do {
i++; //语句块
cout << '@';
} while (i <= n /*条件表达式*/);
return 0;
}
但是,我们测试一下,就会发现
我输3,它打4个
我输120,它打121个
我们用do-while这种循环时,注意把运行的次数减1:
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int i;
do {
i++; //语句块
cout << '@';
} while (i <= (n - 1) /*条件表达式*/);
return 0;
}
这样就正常了~
8.3 循环嵌套
有时候,我们因为亿些原因,需要把循环多套几个,这时候怎么办呢?
先插个知识点:因为作用域的原因,循环控制变量不能在所有循环全叫i,所以根据约定俗成,第一层i,第二层j,第三层k,以此类推
我们看这个:
百钱买百鸡
题目描述
百钱买百鸡问题。鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
输入
无
输出
输出各种鸡翁、鸡母、鸡雏的数量,依次由小到大,每种情况各占一行,每行三个数之间用一个空格隔开。
样例输入
无
样例输出
无
我们一看,吖!还是文言文啊,翻译成现代文如下:
一百M买一百鸡问题。公鸡一只值五块钱,母鸡一只值三块钱,小鸡三只值一块钱,一百M买一百只鸡,问公鸡、母鸡、小鸡各几只?
首先!!!我们分析一下
于是我们在最里层小鸡的循环里套一个if,有两个条件要同时满足
- i + j + k == 100
- 5 * i + 3 * j + k / 3 == 100
分析完成后,就阔以敲:
#include <iostream>
using namespace std;
int main() {
for (int i = 0; i <= 20; i++) {
for (int j = 0; j <= 33; j++) {
for (int k = 0; k <= 99; k += 3) {
if (i + j + k == 100 && 5 * i + 3 * j + k / 3 == 100) {
cout << i << ' ' << j << ' ' << k << endl;
}
}
}
}
return 0;
}
输出如下:
0 25 75
4 18 78
8 11 81
12 4 84
自己算一下,是不是这样的~
循环学完了,简单吗?
不懂就问
拜~
允许转载,请注明出处