循环的嵌套

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呱呱呱~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值