C++016(循环嵌套(多重循环)、break、continue与循环嵌套)

知识回顾

  1. do-while循环语句
  2. break、continue语句

花店里新购入一批鲜花,五颜六色非常好看。其中有一些百合、红玫瑰和粉玫瑰。妈妈准备从中取出8支花组成一束花,你知道会有多少种不同的花色搭配吗?不同的搭配中,百合、红玫瑰、粉玫瑰各有几支?

三种循环语句


for (初始化;循环条件; 增量) {
循环体  
}

while( 循环条件 ) {
循环体
}

 do {
循环体
} while( 循环条件 );

循环体内根据情况也可以添加循环语句,构成循环嵌套

循环嵌套(多重循环)

在C++中,一个循环体内又包含另一个完整的循环结构称为循环的嵌套,又称多重循环常用的循环嵌套是双重循环,外层循环称为外循环,内层循环称为内循环for循环嵌套的格式如下


for(初始化;循环条件; 增量){
...
	for(初始化;循环条件; 增量) {
	...
	}
...
}
外循环执行一次,内循环全部执行,然后执行下一次外循环。直到外循环执行完毕,整个流程结束

嵌套的for循环

for(){
	for(){
        
    }
}

顺序的for循环

for(){

}
for(){

}

除了for循环嵌套格式外,while和do-while语句的循环体中也可以有循环嵌套其他常见的循环嵌套格式如下

双重循环的执行过程演示



for(int i=1;i<=4;i++){
		cout<<"外层循环"<<i<<endl;
	}
运行结果:
外层循环1
外层循环2
外层循环3
外层循环4



for(int i=1;i<=4;i++){
	cout<<"外层循环"<<i<<endl;
	for(int j=1;j<=4;j++){
		cout<<"    内层循环"<<j<<endl;
}
运行结果:
外层循环1
    内层循环1
    内层循环2
    内层循环3
    内层循环4
外层循环2
    内层循环1
    内层循环2
    内层循环3
    内层循环4
外层循环3
    内层循环1
    内层循环2
    内层循环3
    内层循环4
外层循环4
    内层循环1
    内层循环2
    内层循环3
    内层循环4



	}

外层循环一次,内层循环一圈

输出字符三角形

  1. 有几行?每行几个*?
  2. 重复次数明确,所以适合用for循环
  3. 规律:第i行有i个*
一共 20
行的编号i :1~ 20
第 i 行有 i 个*号
这一行*号的编号j :1~i
每行需要有1个换行符
第一步:循环输出20行,每行输出一个*、一个换行符
for(i=1;i<=20;i++)
	{
	
		printf("*");
		printf("\n");
	}
第二步:对每一行,再循环输出正确数量的*
	for(j=1;j<=i;j++)
		{
			printf("*");
		}
		printf("\n");
整体代码
#include<iostream>
using namespace std;
int main()
{
	int i,j;
	//第一步:循环输出20行,每行输出一个*、一个换行符
	for(i=1;i<=20;i++)
	{
	//第二步:对每一行,再循环输出正确数量的*	printf("*");
		for(j=1;j<=i;j++)
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
 } 

输出字符斜边(举一反三)

有几行?每行几个*?每行有几个空格?

行编号 空格数 *****
i=1 0 1
i=2 1 1
i=3 2 1
i=4 3 1

第 i 行有 :i -1个空格,1个,1个换行*

int i,j;
	for(i=1;i<=20;i++)
	{
		for(j=1;j<=i-1;j++)
		{
			printf(" ");
		}
		printf("*\n");
	}

下面代码能输出5行6列的*阵吗?



for(int i=1; i<= 6; i++ ){
	for(int j=1;j<= 5;j++)
		cout<<"*";
	cout<<endl;
}

用双重循环实现字符图案的打印
外循环做行数次的循环,内循环做列数次的循环

打印等腰三角形

【编程挑战 】编写一个程序,输入一个正整数n,输出组成的n层的等腰三角形。

【输入】一个正整数n,n<100

*【输出】*组成的n层的等腰三角形

【输入样例1】5

【输出样例1】

1.分析图形

共有几行?每行需要输出哪些符号?每种符号各有几个?

行编号 空格数 ***** 换行符
i=1 4 1 1
i=2 3 3
i=3 2 5
i=4 1 7
i=5 0 9

2.找规律

行编号和符号数之间的关系?

3.写出伪代码

对于输入的n,n行的等腰三角形的通用描述:

一共 n 行
行的编号i :1 ~ n
第 i 行有 n - i 个空格
第 i 行有 2*i - 1 个**号
号的编号j :1 ~ 2i - 1
每行用1个换行符结束


for(int i=1; i<=n; i++ ){
循环输出 n - i 个空格;
循环输出 2*i - 1个*;
输出换行符;
}


int i,j,n;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=n-i;j++)
		{
			printf(" ");
		}
		for(j=1;j<=2*i-1;j++)
		{
			printf("*");
		}
		printf("\n");
	}

【注意】建议不同层的循环使用不同的循环变量,可以提高代码易读性顺序(同层次)的循环可以用相同的循环变量

2.break与多重循环

break只能跳出它所在层的循环


for(初始化;循环条件; 增量){
	语句1;
	for(初始化;循环条件; 增量) {
		if(条件成立)
			break;
	}
	语句2;
}
当执行到内循环的break语句时,内循环立即终止,外循环不受影响

2.1内循环中的break语句


for(int i=1;i<=4;i++){
		cout<<"外层循环"<<i<<endl;
		for(int j=1;j<=4;j++){
if(j==3)
	 	  break;
		     cout<<"    内层循环"<<j<<endl;
		}
	}
运行结果
外层循环1
    内层循环1
    内层循环2

外层循环2
    内层循环1
    内层循环2
   
外层循环3
    内层循环1
    内层循环2
    内层循环3
    内层循环4
外层循环4
    内层循环1
    内层循环2
    内层循环3
    内层循环4


Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐