C语言之多重循环

目录

二重循环

用break语句强制结束循环

显示图形

 绘制等腰直角三角形

多重循环

continue语句


将循环语句的循环体作为循环语句,就可以进行二重、三重循环。这样的循环称为多重循环。

我们先来了解二重循环

二重循环

在之前我们学习到的循环中的程序都比较简单,在一个循环中还可以嵌套另一个循环(俄罗斯套娃),根据所嵌套循环的多少,由二重循环、三重循环……统称为多重循环

我们用二重循环来编写一个显示9*9乘法表的程序:

#include<stdio.h>

int main()
{
	int i, j;
	
	for(i = 1; i <= 9; i++)
	{
		for(j =1 ; j <= 9; j++)
		{
			printf("%3d", i * j);
			//putchar('\n');大家把putchar放入内循环中可以试着猜猜它的显示形式
		}
		putchar('\n');
	}
	return 0;
}

 那么它是怎么来显示的呢?让我们来看看吧!

 外侧的for语句:是变量i从1——9依次递增,对应乘法表中的第一行、第二行……第九行,即纵方向的循环。

内侧的for语句:是变量j从1——9依次递增,对应乘法表中的第一列、第二列……第九列,

即横方向的循环。

当i=1时:执行j从1——9递增的操作,按3位(%3d)的宽度输出1*j。

当i=2时:执行j从1——9递增的操作,按3位(%3d)的宽度输出2*j。

当i=3时:执行j从1——9递增的操作,按3位(%3d)的宽度输出3*j。

………………………………………………………………………………

当i=9时:执行j从1——9递增的操作,按3位(%3d)的宽度输出9*j。

 在各循环中,内循环中的j从1——9分别执行了九次,内循环结束后,输出换行符(上面代码注释中的问题),为前进下一行做准备。

用break语句强制结束循环

让我们对上面程序进行改写,显示i*j<=40整数

for(i = 1; i <= 9; i++)
	{
		for(j =1 ; j <= 9; j++)
		{
			int seki = i * j;
			if(seki > 40)
			{
				break;
			}
			printf("%3d", i * j);
		}
		putchar('\n');
	}

 在本程序中使用的break语句在跳出循环时,只会跳出内侧循环,并不会跳出外侧循环。

显示图形

我们用*来显示出一个长方形

#include<stdio.h>

int main()
{
	int i, j;
	int height, width;
	
	printf("请输入长方形的高:");        scanf("%d", &height);
	printf("请输入长方形的宽:");        scanf("%d", &width);

	for(i = 1; i <= height; i++ )
	{
		for(j = 1; j <= width; j++)
		{
			putchar('*');
		}
		putchar('\n');
	}
	return 0;
}

我们继续来解释下

共计height个行,每行显示有width个*,这样就显示出了一个长方形。

 绘制等腰直角三角形

我们先来使用二重循环编写绘制直角在左下方的程序(边长的相等对应“*”的多少)

#include<stdio.h>

int main()
{
	int i, j, len;
	
	puts("生成直角在左下方的等腰直角三角形");
	
	printf("请输入短边:");
	scanf("%d", &len);
	
	for(i = 1; i <= len; i++)
	{
		for(j =1 ; j <= i; j++)
		{
			putchar('*');
		}
		putchar('\n');
	}
	return 0;
	
}

但是当我们想要显示直角在右下方的等腰直角三角形呢?怎么把*从右到左先显示呢?我们只需要输出空格就可以满足需求了,但在用putchar输出空格时也需得作为一个循环中的语句,这样就需要使用到三重循环了。

for(i = 1; i <= len; i++)
	{
		for(j = 1; j <= len - i; j++)
		{
			putchar(' ');//要把空格作为一个字符常量,所要记得输入一个空格哦!
		}
		for(j =1 ; j <= i; j++)
		{
			putchar('*');
		}
		putchar('\n');
	}

多重循环

在前面我们都是使用for语句来进行嵌套,当然我们也可以使用do语句、while语句来进行嵌套,实现多重循环

输入一个整数,显示整数个*

#include<stdio.h>

int main()
{
	int retry;
	
	do
	{
		int i, no;
		do
		{
			printf("请输入一个整数:");
			scanf("%d", &no);
			if(no <= 0)
			{
				puts("\a请不要输入负数和0");
			}
		}while(no <= 0);
		
		for(i = 1; i <= no; i++)
		{
			putchar('*');
		}
		putchar('\n');
		
		printf("是否继续输出?【YES---0/No---9】:");
		scanf("%d", &retry);
	}while(retry == 0);
	
	return 0;
}

continue语句


int main()
{
	int i, j;
	
	for(i = 1; i <= 9; i++)
	{
		for(j =1 ; j <= 9; j++)
		{
			int seki = i * j;
			if(seki % 10 == 4 || seki / 10 == 4)
			{
			putchar(' ');
					continue;
			}
		
			printf("%3d", i * j);
		}
		putchar('\n');
	}
	return 0;
}

大家可以试试把continue去掉后再次运行程序结果会有何不同。

continue 语句的作用是跳过循环体中剩余的语句而强制进入下一次循环。continue 语句只用在 while、for 循环中,常与 if 条件语句一起使用,判断条件是否成立。在理解中可以与break语句相反去理解。

也就是说,当遇到不满足的条件时,不会被中断,跳过去继续执行下一步;而break语句,在条件满足时就立即停止执行。

 最近大家大学都确定了放假时间了吗?放假早的同学们祝你们有个好假期,放假晚的同学不要太伤心了,希望咱们开学晚啊!

  在下方投票来公布你的放假时间吧!!!

  • 28
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

学海无涯.苦作舟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值