目录
二重循环
用break语句强制结束循环
显示图形
绘制等腰直角三角形
多重循环
continue语句
将循环语句的循环体作为循环语句,就可以进行二重、三重循环。这样的循环称为多重循环。
我们先来了解二重循环
在之前我们学习到的循环中的程序都比较简单,在一个循环中还可以嵌套另一个循环(俄罗斯套娃),根据所嵌套循环的多少,由二重循环、三重循环……统称为多重循环。
我们用二重循环来编写一个显示9*9乘法表的程序:
#include
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分别执行了九次,内循环结束后,输出换行符(上面代码注释中的问题),为前进下一行做准备。
让我们对上面程序进行改写,显示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
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
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
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;
}
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语句,在条件满足时就立即停止执行。
最近大家大学都确定了放假时间了吗?放假早的同学们祝你们有个好假期,放假晚的同学不要太伤心了,希望咱们开学晚啊!
在下方投票来公布你的放假时间吧!!!