docxtemplater模板语法循环嵌套 循环语句的嵌套使用_c语言

  • 三种循环语句可互相嵌套,层数不限。
  • 外层循环可包含两个以上内循环,但不能相互交叉。
  • 嵌套的循环控制变量不能相同。

例1.编程求解1!+2!+……...+10!

问题分析:

采用双重for循环,整体共有10部分,对每一部分分别求阶乘。定义变量m用来存储每一部分的阶乘,sum用来存储各个部分之和。每次求阶乘后,m的值都会发生变化,所以在每部分进行阶乘前,需要对m重新赋值。所以m=1,需要放在第一重循环中,第二重循环前。

 代码如下:

#include<stdio.h>
 void main()
 {
    int i,j,sum=0,m;
    for(i=1;i<=10;i++)
       {
         m=1;
         for(j=1;j<=i;j++)
             m=m*j;
         sum=sum+m;
        }
     printf("结果是:%d",sum);
 }

例2.打印输出如下所示左下三角形式的九九乘法表。

docxtemplater模板语法循环嵌套 循环语句的嵌套使用_嵌套_02

 问题分析:

根据计算机输出操作的特点,考虑采用双重for循环实现逐行输出每一列乘法表达式。

1.对乘法表进行整体分析。输出的乘法表共占9行,每一行表达式的个(列)数等于行数。因此,设定两个整型变量i和j,分别代表行号和列号则i∈[1,9],j∈[1,i]。

2.对每行每列的乘法表达式进行逐个分析,第i行第j列乘法表达式的被乘数等于行号i,乘数等于列号j。

3.为了实现图片中的排列形式,故每一行结束后,都需要换行。即第一重循环每进行一次,就需要输出一次换行符。

docxtemplater模板语法循环嵌套 循环语句的嵌套使用_#include_03

代码如下:

#include<stdio.h>
 void main()
 {
    int i,j;
    for(i=1;i<=9;i++)
       {
         for(j=1;j<=i;j++)
             printf("%d*%d=%d ",i,j,i*j);
          printf("\n");
        } 
 }

例3.给定1、2、3、4四个数字,输出所有由它们构成的无重复数字的三位数。

问题分析:

本例在1、2、3、4四个数字构成的三位数中找出那些无重复数字的三位数,这是典型的可以用穷举法求解的问题。三位数的百位、十位、个位都允许填入这4个数字。每一位用一个循环语句实现,则需要三层循环的嵌套,第一层测试百位,第二层测试十位,第三层测试个位,每一层循环4次。若用循环变量i,j,k分边表示百位、十位和个位的数字,则每个循环变量的取值是1、2、3、4。在最里层循环中,条件(i!=j&&i!=k&&j!=k)满足了题中的要求(无重复数字),表达式i*100+j*10+k形成了一个三位数。

docxtemplater模板语法循环嵌套 循环语句的嵌套使用_嵌套_04

 代码如下:

#include<stdio.h>
 void main()
 {
    int i,j,k;
    for(i=1;i<=4;i++)
       for(j=1;j<=4;j++)
          for(k=1;k<=4;k++)
             if(i!=k&&i!=j&&j!=k)
             printf("%d%d%d ",i,j,k);
 }

例4.实现以下图形的输出。

docxtemplater模板语法循环嵌套 循环语句的嵌套使用_嵌套_05

问题分析:

观察图形,找出规律。定义行数i,空格随着行数增加,每次减一。星号随着行数增加,有2i-1的规律。通过第一重循环来控制行数,通过两个并列的循环,分别来控制空格和星号。

docxtemplater模板语法循环嵌套 循环语句的嵌套使用_问题分析_06

代码如下:

#include<stdio.h>
 void main()
 {
    int i,j,k;
    for(i=1;i<=4;i++)
      {
       for(j=1;j<=4-i;j++)
          printf(" ");
       for(k=1;k<=2*i-1;k++)
          printf("*");
       printf("\n");
      }
 }

例5.用循环的嵌套编程实现输出所有的“水仙花数”。

问题分析:

如果要用循环的嵌套来实现,我们自然的就可以想到用三个循环来表示百位,十位,个位。进而表示100到999之间的所有数。

docxtemplater模板语法循环嵌套 循环语句的嵌套使用_#include_07

代码如下:

#include<stdio.h>
 void main()
 {
    int i,j,k,n;
    printf("水仙花数是:");
    for(i=1;i<=9;i++)
       for(j=0;j<=9;j++)
           for(k=0;k<=9;k++)
              {
               n=100*i+10*j+k;
               if(n==i*i*i+j*j*j+k*k*k)
                 printf("%d ",n);
               }  
 }

对比:

docxtemplater模板语法循环嵌套 循环语句的嵌套使用_c语言_08

docxtemplater模板语法循环嵌套 循环语句的嵌套使用_问题分析_09

求水仙花数需要得知两个条件:某个数 和 这个数的个,十,百位。如果通过循环,则可以得到所有三位数,故通过三位数求每个位上的数。而循环的嵌套,则是先得知每个位上的数,来求所有的三位数。