目录
二重循环
用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语句,在条件满足时就立即停止执行。
最近大家大学都确定了放假时间了吗?放假早的同学们祝你们有个好假期,放假晚的同学不要太伤心了,希望咱们开学晚啊!
在下方投票来公布你的放假时间吧!!!