将循环语句的循环体作为循环语句,就可以进行二重、三重循环。这样的循环称为多重循环。
我们先来了解二重循环
二重循环
在之前我们学习到的循环中的程序都比较简单,在一个循环中还可以嵌套另一个循环(俄罗斯套娃),根据所嵌套循环的多少,由二重循环、三重循环……统称为多重循环。
#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。
………………………………………………………………………………
在各循环中,内循环中的j从1——9分别执行了九次,内循环结束后,输出换行符(上面代码注释中的问题),为前进下一行做准备。
用break语句强制结束循环
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;
}
我们继续来解释下
绘制等腰直角三角形
我们先来使用二重循环编写绘制直角在左下方的程序(边长的相等对应“*”的多少)
#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语句相反去理解。
最近大家大学都确定了放假时间了吗?放假早的同学们祝你们有个好假期,放假晚的同学不要太伤心了,希望咱们开学晚啊!
原文地址:https://blog.csdn.net/W06164932/article/details/134791768
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_44082.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!