一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。
三种循环可互相嵌套。
以下形式都合法:


例题1:阅读以下程序,写出程序的输出结果。
#include <stdio.h>
int main ( )
{int i,j;
for (i=1;i<=3;i++)
{for (j=1;j<=4;j++)
printf("*");
printf("\n"); }
return 0;
}

例题2: 输出阶梯形式的九九乘法表。

解题思路:
九九乘法表呈三角形,共9行。第一行有1列,第2行有两列,每行式子的个数和行号相符。在这种行号和列号都在变化的情况,要用到循环的嵌套,外层循环控制行数,内层循环控制列数(因为列的变化比行快)。
#include <stdio.h>
int main( )
{ int i,j;
printf("*************九九乘法表***************\n");
for(i=1;i<=9;i++)
{for(j=1;j<=i;j++)
printf("%d*%d=%-3d ",j,i,j*i);
printf("\n"); }
return 0;
}
例题:3:输出以下4*5的矩阵。

解题思路:
用两重循环来处理
用外循环来控制行
用内循环控制列
按矩阵的格式(每行5个数据)输出
#include <stdio.h>
int main()
{ int i,j;
for (i=1;i<=4;i++)
{ for (j=1;j<=5;j++)
printf ("%5d",i*j);
printf("\n");
}
return 0;
}
例题4: 把1元5角钱人民币兑换成1分、2分和5分的硬币(每一种都要有)共100枚,问共有多少种兑换方案?每种方案各换多少枚?
解题思路:
若设5分硬币枚数为x,2分硬币枚数为y,1分硬币枚数为z,则有:x+y+z=100,5x+2y+z=150,由于每种硬币都要有,故5分硬币最多可换29枚,2分硬币最多可换72枚,1分硬币可换100-x-y枚,x,y,z只需满足第2个方程即可。这里用一个两层循环,外层控制x的变化,内层控制y的变化。
#include <stdio.h>
int main( )
{
int x,y,z,count=0;
printf("5分 2分 1分\n");
for(x=1;x<=29;x++)
for(y=1;y<=72;y++)
{
z=100-x-y;
if(5*x+2*y+z==150)
{ count++;
printf("%-5d%-5d%-5d\n",x,y,z); }
}
printf("兑换方案共%d种\n",count);
return 0;
}
例题5:
输出如图所示图案,图案的最大宽度值(水平方向*号的个数)由键盘输入,要求最大的宽度值必须为奇数。

解题思路:
设最大宽度值为width,根据图案的规律,输出的总行数为width+width-1,图案应分两部分考虑 ,上半部分有width行,*号个数随行数在递增;下半部分有width-1行,每行分成左右两个部分,左边空格个数在递增,右边*号个数随行数在递减。对于整个图形要用循环控制行数,对于每一行要分别用循环控制空格的列数和*号的列数,所以,用循环的嵌套形式来实现。
int main( )
{ int i,j,width;
scanf("%d",&width);
for(i=1;i<=width;i++)
{
for(j=1;j<=i;j++)
printf("*");
printf("\n"); }
for(i=1;i<width;i++)
{
for(j=1;j<=i;j++)
printf(" ");
for(j=1;j<=width-i;j++)
printf("*");
printf("\n"); }
return 0;
}

