for语句适合循环次数相对确定的一些场景。然而在某些特定的场景中,无法确定循环的具体次数,这个时候就更适合用while语句。语法如下:
while (condition)
{
// 循环体语句
}
condition是一个表达式,它的值为布尔类型(在C++中,非0值表示true,0值表示false)。只要condition的值为true,循环体中的语句就会被执行。每次执行完循环体后,会再次对condition进行判断。
假设我们要为某家公司开发一个克服软件,当客户打开软件时,需要根据菜单项选择需要的服务。参考代码如下:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int choice = -1;
while (choice != 3)
{
cout << "菜单选项:\n""1. 选项1\n""2. 选项2\n""3. 退出\n""请选择一个选项: ";
cin >> choice;
switch (choice)
{
case 1:
cout << "你选择了选项1\n";
break;
case 2:
cout << "你选择了选项2\n";
break;
case 3:
cout << "退出程序\n";
break;
default:
cout << "无效选项,请重新选择\n";
}
}
return 0;
}
注意:for与while两种循环没有好坏之分,看具体的应用场景,而且可以相互的替代和转换。比如输出1到100这个功能用那个循环都一样:
for循环:
for (int i = 1; i <= 100; i++)
{
cout << i << endl;
}
while循环:
int i = 1;
while (i <= 100)
{
cout << i << endl;
i++;
}
循环嵌套
在C++中,循环嵌套就是在一个循环内部再包含一个或多个循环。一个简单的for循环嵌套形式如下:
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 2; j++)
{
// 内部循环体语句
cout << "i = " << i << ", j = " << j << endl;
}
}
输出结果为:
i = 0, j = 0
i = 0, j = 1
i = 1, j = 0
i = 1, j = 1
i = 2, j = 0
i = 2, j = 1
外层for循环控制变量i从0到2变化,每一次外层循环执行时,内层for循环的控制变量j都会从0到1完整地循环一次。
循环嵌套有点像时钟的分针和秒针。外层循环式分针,内层循环式秒针。秒针(内层循环)跑的快,分针(外层循环)跑得慢。秒针跑一圈(内层循环完整执行一遍),分针才跑一步(外层循环执行一次)。
循环嵌套有非常多的应用场景:
场景1:假设一个学校有多个班级,每个班级有多个学生。我们可以用循环嵌套来输出所有学生。外层循环可以用来遍历每个班级,内层循环用来遍历每个班级中的学生。
场景2:一年有12个月,每个月有不同的天数。我们可以用循环嵌套来打印出每个月的日期。外层循环遍历月份,内层循环遍历每个月的日期。
场景3:围棋棋盘由19行19列组成。可以用外层循环来遍历每一行,内层循环遍历输出每一列。
例1:输出一个用星号组成的5行6列的长方形。
#include <bits/stdc++.h>
using namespace std;
int main()
{
for (int i = 0; i < 5; i++)//外层循环控制行
{
for (int j = 0; j < 6; j++)//内层循环控制列
{
cout << '*';
}
cout << endl;
}
return 0;
}
例2:输出n行的直角三角形。比如n=5,三角形如下:
*
**
***
****
*****
图形的特点:一共n行,每行星号的数量等于行的序号,也就是说第i行有i个星号。参考代码如下:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++)//外层循环控制行
{
for (int j = 1; j <= i; j++)//内层循环控制列
{
cout << '*';
}
cout << endl;
}
return 0;
}
例3:百鸡百钱问题。用100文钱买100只鸡,其中公鸡每只5文钱,母鸡每只3文钱,小鸡3只1文钱,问公鸡、母鸡、小鸡各买多少只?
#include <bits/stdc++.h>
using namespace std;
int main()
{
for (int i = 0; i < 20; i++)//外层循环模拟公鸡的数量
{
for (int j = 0; j < 33; j++)//内层循环模拟母鸡数量
{
int k = 100 - i - j; //计算小鸡的数量
if (k % 3 == 0 && i * 5 + j * 3 + k / 3 == 100)
cout << i << " " << j << " " << k << endl;
}
}
return 0;
}