C语言之循环的嵌套

cbb58547a8064a1582e5e0b6d51bb260.jpg

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

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

问题分析:

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

ad4f07a4ee794d99b6d17b67460e81c2.jpg

 代码如下:
#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.打印输出如下所示左下三角形式的九九乘法表。

9466c4411c0740f8960bd35702e010b1.jpg

 问题分析:

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


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


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

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

d34ec02f1d5649f1bb1b3f6f97bff5b1.jpg

代码如下:

#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形成了一个三位数。

ee4bf3dc8ce147e8a0bee64d00dc1725.jpg

 代码如下:

#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.实现以下图形的输出。

ffa93da90e924b4b8c8822af992d4c25.jpg

问题分析:

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

95510e448b5b4cb9be048465083e3932.jpg

代码如下:

#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之间的所有数。

b6e1c813ccae40d9b1bb7d17c07e3abc.jpg

代码如下:

#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);
              }  
}

对比:

bdb5676a51ab48ea8a9ced0566eb6595.jpg

6f006d23a5f3405ba6b08d816671986f.jpg

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

 

 

 

C语言双重for循环是指在程序中使用两个嵌套的for循环。在双重for循环中,外层循环控制内层循环的执行次数,内层循环在外层循环每次执行时都会完整地执行一次。通过双重for循环,我们可以实现对二维数组的遍历、多次嵌套的操作以及其他需要重复执行的任务。 在引用中,我们可以看到一个三层for循环的例子。该程序通过三层嵌套循环输出了三层的循环变量i、j、k的值,以及相应的循环提示信息。外层循环每次执行一次,中层循环在外层循环每次执行时都会完整地执行三次,内层循环在中层循环每次执行时都会完整地执行三次。 在引用中,我们可以看到一个双层for循环的例子。该程序使用两个嵌套的for循环输出了循环变量i、j的值以及相应的循环提示信息。外层循环在每次执行时,会完整地执行一次内层循环,内层循环在外层循环每次执行时都会完整地执行三次。 在引用中,我们可以看到一个嵌套的for循环的例子,其中外层循环控制内层循环的执行次数。该程序输出了循环变量i、j、k的值以及相应的循环提示信息。外层循环在每次执行时,内层循环会根据外层循环的当前值限制内层循环的执行次数。 总之,C语言的双重for循环是一种常用的循环结构,可以用来实现对二维数组的遍历和其他需要多次嵌套的操作。通过控制外层循环和内层循环循环条件,我们可以灵活地控制循环的执行次数和顺序。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [C语言-多层for循环详解](https://blog.csdn.net/weixin_45571585/article/details/126698216)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [C语言基础语法第三章流程控制 双层for循环示列](https://blog.csdn.net/Taylorswift_TS/article/details/130554436)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值