失踪人口回归
上次在acwing活跃已经是上次了(bushi
那我就在写(shui)一片基础到不能在基础的教程吧
话说真的有人看吗
上次讲过了if条件语句,这次说一说循环
在c+ +程序中,循环非常常用,读入可能会用,输出可能会用,大量的算法也需要在循环中实现,所以,学好循环非常重要,这次,我们主要说一说for
和while
两种方式
for循环
for循环是c++中最常用的循环方式,一般在固定次数的循环时使用
一般格式: for(int i = 0; i < n; i++) {}
(i变量名不固定,n可以是任意整型变量)
其中小括号中的内容是循环进行的条件,主要作用是规定循环的次数,最后的大括号中填入每次需要循环的代码
首先解读小括号中的内容:
小括号中共有三条指令int i = 0
i < n
i++
首先,定义一个int类型的变量i(这个变量只在循环中生效,退出循环后不再存在)并初始化为0;第二条表示i的大小限制在[HTML_REMOVED]=n时停止循环; 第三条表示每循环一次让i的值+ +,同时结合第二条可以看出,只要循环内部不对i进行处理,循环的次数其实就是n次(i从零开始每次循环加一,加到n时跳出循环,即循环n次后跳出)
举例如下
#include <iostream>
using namespace std;
int main() {
int a = 0, n = 5;
for (int i = 0; i < n; i++) {
a++;
}
return 0;
}
如果上面的文字都看过的话,这条代码应该很容易理解:循环5次,每次令a的值加一,所以程序结束时,a最后的值为5
同理,上面的循环代码还可以写成这样:
for (int i = n; i > 0; i--) {
}
这样
for (int j = n - 1; j >= 0; j--) {
}
等等......
那么,你能说出这个程序的正确输出吗?
#include <iostream>
using namespace std;
int main() {
int a = 0, n = 10;
for (int i = 0; i * i <= n; i += 2) {
a++;
}
cout << a << endl;
return 0;
}
正确答案:2
for循环的嵌套
看过了简单的for循环,我们还要提一下多个for循环嵌套的情况:
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
}
}
就像上面的代码,我们有些时候需要进行两层套在一起的循环,上面的代码便是进行了n*n次的循环,每一层的写法都和单层一样,唯一需要注意的是一整个循环中每一层的变量名字都不能相同,第一层用了i,第二层就需要换成另一个名字,如j。
二层循环的代码通常在打印字符矩阵和存储二维变量时较为常用。比如:
打印一个2*2的‘#’字符矩阵
代码实现:
#include <iostream>
using namespace std;
int main() {
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
cout << "#";
}
cout << endl;
}
return 0;
}
我们得到的结果便是:
##
##
while循环
相比较for循环,while循环在长相上就显得简单了很多:
while(){}
同样的,小括号中是循环的条件,大括号中是循环的指令,但与for循环不同的是,while循环的循环条件一般是一个判断语句,只要小括号中的条件成立,便执行循环中的命令,比如:
#include <iostream>
using namespace std;
int main() {
int a = 0;
while (a < 5) {
a++;
}
return 0;
}
在这条代码中,我们先初始化一个变量a并赋值为0,接着便进入while循环,循环的条件是只要a<5就循环,每次让a的值加一,这样只有当a的值加到5时,才能跳出循环。
while循环的用处也很多,最常见的应该算是不确定组数的数据读入是使用,比如:
int a;
while(cin >> a) {
a++;
cout << a;
}
上面的代码意思便是,只要读入一个整数,就将这个数字加一并输出,即每读入一次,执行一次加一并输出的命令。
所以,显然,while循环更适合不知道具体循环次数时使用,同时,我们还要注意的是,如果不给while循环一个恰当的退出条件,你的程序可能永远不会自己结束。比如:
#include <bits/stdc++.h>
using namespace std;
int main() {
while(1) {
/*执行的语句*/
}
return 0;
}
这个程序由于没有任何退出循环的条件,所以他永远都在循环中无法跳出。
说到退出循环,我们就不得不引出下一个内容:
break
break语句通常用在循环语句和开关语句中。当break语句用于do-while、for、while循环语句中时,可使程序终止循环。而执行循环后面的语句,通常break语句总是与if语句联在一起。即满足条件时便跳出循环。
#include <bits/stdc++.h>
using namespace std;
int main() {
int a = 0;
while (1) {
a++;
if (a == 5) {
break;
}
}
return 0;
}
在上面的程序中,while循环的条件仍为“1”,所以本应永远不会跳出,但是由于当a==2时进入if条件句执行了break
指令,所以当a==5时就跳出了循环,程序可以正常退出。
同样,当两层循环运行时,每个break只能跳出自己所在一层的循环,不会影响更高层次的循环。
do-while循环
最后我们再来看一看这种不太常用的循环,他与while循环唯一的区别是,先运行,再检测循环条件:
do {
//循环内容
} while (/*循环条件*/);
鉴于其他内容与上面两种循环无差,在这里就不再赘述。
自测
题目描述
给出n(n≤100)和n个整数a_i(0≤a≤1000),求这 n 个整数中最小值是什么。
输入样例
8
1 9 2 6 0 8 1 7
输出样例
0
答案
#include <iostream>
using namespace std;
int main() {
int n, a, ans = 1005; //注意由于我们要取最小值,所以ans应提前赋一个大于范围的值,本题范围为1000,所以设为1005
cin >> n;
for (int i = 0; i < n; i++) { //我们需要读入n个数字,所以循环n次,每次读入一个a并比较a是不是目前的最小值
cin >> a[i];
if (a[i] < ans) { //如果a是目前的最小值(比已知的最小值还小)
ans = a[i]; //把最小值更新为a
}
}
cout << ans << endl; //输出最后留下的最小值
return 0;
}
我不是人前排资瓷