什么是for循环嵌套?
学习while循环时我们已经接触过while的循环嵌套,那么for循环嵌套又是如何呢?
其实,for循环嵌套与while循环嵌套类似,都是在有一个whlie(for)循环的基础上,再不断嵌入一个新的循环。但是要注意的一点是外循环执行一次,内循环全部执行一次(外循环执行一次时,内循环要全部执行完毕一次)。所以在使用for循环嵌套时,一定要注意for循环嵌套的执行次数,不要多了也不能少了。下图是for循环嵌套的一个大致框架。
下面用一道例题来进行分析
例:利用for循环输入一个任意字符,输出一个等腰三角形。
具体代码如下:
需要注意的是,由于vs编译器自身问题,在使用scanf时不能直接使用,需要将scanf改成scanf-s,或者百度一下解决方法,此处不过多介绍。
题目要求输入一个字符,从而输出一个等腰三角形。首先,通过i来控制行数,视为外循环。j1来控制空格数,视为内循环,j2控制字符数,也是内循环。当i=1时,外循环执行一次,内循环j1则会执行4-i(i=1)即3次,打印三个空格;内循环j2则执行2*i(i=1)-1即1次,打印一个字符。以此类推,从而生成一个等腰三角形。
相信各位看到这里肯定已经对for循环的嵌套有了一定的了解了,那么我们接着来看以下几道例题,如果都能自己写出来,那么恭喜你,你已经掌握了for循环嵌套了!
题一:输入一个字符,输出一个倒置的等腰三角形
例:
代码如下:
#include <stdio.h>
#include <string.h>
int main()
{
int i, j1,j2;
char a;
printf("输入:");
scanf_s("%c", &a);//输入字符
printf("输出:\n");
for (i = 4; i >=1; i--)//i改为倒过来的行数
{
for (j1 = 1; j1 <=4-i; j1++)//j1控制空格
{
printf(" ");
}
for (j2 = 1; j2 <=2*i-1; j2++)//j2控制字符数
{
printf("%c", a);
}
printf("\n");//换行
}
return 0;
}
其实我们不难发现,相较于正置的等腰三角形,倒置只是将外循环进行了改变,而内循环是不变的。其实我们只需改变i这个行数就行了,只需要将正序行数1,2,3,4改为倒序行数4,3,2,1就可以了。也就是说原本第四行变成了现在的第一行。
题二:输出九九乘法表
例:
代码如下:
#include <stdio.h>
#include <string.h>
int main()
{
int i, j, k;
for (i = 1; i <=9; i++)//i控制行数
{
for (j = 1; j <= i; j++)
{
k = j * i;//k为表达式
printf("%d*%d=%d ", i, j, k);//注意输出表达式
}
printf("\n");//输出换行
}
return 0;
}
咋一看题目似乎无从下手,但其实相较于三角形的代码,九九乘法表反而更加简单。
那么,本编文章到此就结束了,你是否已经掌握了for循环嵌套呢?
扩展
这里留下一个问题,如何用for循环结构输入任意行数,来得到一个任意行数的等腰三角形呢?
(答案后面补上)