循环嵌套详解

循环嵌套

1.0 循环嵌套概念

对于一些程序,有时候我们用一次循环不够满足我们的目的,比如需要输出前n项和的阶乘,如果我们只用一次循环的话,是不能满足条件的。因为对于每个阶乘积我们都需要定义一个变量来存储,同理,对于前n项的和我们也需要定义一个变量来存储。这时,为了满足程序的要求,我们就需要用两个循环同时来进行程序的编写,而为了方便说明,就称两个或两个以上的循环同时使用时,为循环嵌套。

2.0 循环嵌套分类

对于循环嵌套可能很多人的第一理解就是两个for循环进行嵌套,其实不然,所有的循环都可以循环嵌套。

例如

do{
    do{
        
    }while();
}while();
for(){
    for(){
        
    }
}
while(){
	while(){
        
    }
}

而且不止这三种,也可以将两种不一样的循环一起使用,也是嵌套循环

for(){
while(){
    
}
}
do{
    while(){
        
    }
}while();

还有其他几种,但是都是一样的东西,换汤不换药,也就不一一列举了。但是就我们平常而言,用的较多的是for的循环嵌套,所以我们也就用for嵌套进行举例。

3.0嵌套的使用

  1. 对于嵌套的使用,我们要根据题目的要求然后了解计算的优先级,将优先级高的放入循环里边,对于优先级低的我们就将它放入循环外边即高放内,低放外。

  2. 而对于优先级可能又有所疑惑,其实优先级就是你需要先算的优先级就高,例如对于阶乘的和,我们肯定是先要算阶乘才能加然后再计算和。而阶乘自然优先级就高于和的优先级。所以对于嵌套,我们就需要将和的计算放到外部,然后将阶乘的计算放到内部。

  3. 分析完优先级之后,我们就需要取值范围,而for循环的三个条件一般都可以为

    for(初始值i;范围;i增减)
    
  4. 对于三个条件的编写,也需要根据程序进行内循环编写和外循环编写,以求前n项和阶乘为例,我们不知道n的大小,n是用户自己输入的值,故i是要小于n,又因为阶乘是从1开始计算,所以我们需要把i初值赋值为1,然后令i每次+1,即外部循环就为

    for(i=1;i<n;i++)
    
  5. 写完外部for的条件之后,还需要内部for的编写,对于内部的for循环,我们需要在定义一个j用来循环否则用i会与外循环矛盾。对于内部循环条件的编写,与外循环一样,而且是要基于外循环的基础上进行条件编写,如j并不是小于n,而是根据i的值,每次不大于i,故内循环的条件就可以写为

    for(j=1;j<=i;j++)
    
  6. 写完条件之后,我i们就需要在循环内写条件,而一般我们也是先写优先级高的再写优先级低的,即先写内循环再写外循环。对于这道题我们内循环要求的是计算出阶乘,故定义个变量fac,然后将每次相乘的积存入fac内。则可写为

    fac*=j;
    
  7. 对于外部循环的写法虽然跟内部一样,也需要了解需要干什么用,但是有一点需要注意的是,对于像fac这种在内循环中,但是由于阶乘每次都是从1开始相乘,故我们需要在每次内循环结束之后就要将fac赋值为1,所以我们直接在外循环赋值为

    int fac=1;
    
  8. 然后在观察外循环的作用,发现外循环是为了让每一项的乘积相加,即可以写为

    sum+=fac;
    
  9. 然后,这个程序就完成了。小编还有其他几个博客也是用嵌套循环写的,感兴趣的话可以看看

    [输出n阶分式的阶乘之和]((5条消息) 利用C语言输出n阶分式的阶乘之和_丶丶丶丶。的博客-CSDN博客_输出阶乘和)

  10. 本程序代码

    #include<stdio.h>
    int main()
    {
    	int i,j,sum,n;
    	printf("请输入n\n");
    	scanf("%d",&n);
    	for(i=1;i<=n;i++)	
    	{
    		
    		int fac=1;
    		for(j=1;j<=i;j++)
    		{
    			fac = fac*j;
    			
    		 } 
    		 sum =sum+ fac;
    		 
    	}
    	printf("得到的结果为%d\n",sum);
    	return 0; 
    } 
    
    
    
    

4.0 嵌套的优化

对于嵌套的内部我们也可以根据题目进行一些优化,比如如果只需要成立时输出一次,我们可以在输出时直接跳出循环可以根据条件利用continue或者break。例如可以看我之前博客里的数组求和

[找两个数之和等于目标数值]((5条消息) 力扣练习题之数组中找两个数之和等于目标数值详细讲解_丶丶丶丶。的博客-CSDN博客)

这个题目也是LeetCode中的入门题,有空可以看一看。

  • 8
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丶丶丶丶。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值