概述
循环嵌套
1.0 循环嵌套概念
对于一些程序,有时候我们用一次循环不够满足我们的目的,比如需要输出前n项和的阶乘,如果我们只用一次循环的话,是不能满足条件的。因为对于每个阶乘积我们都需要定义一个变量来存储,同理,对于前n项的和我们也需要定义一个变量来存储。这时,为了满足程序的要求,我们就需要用两个循环同时来进行程序的编写,而为了方便说明,就称两个或两个以上的循环同时使用时,为循环嵌套。
2.0 循环嵌套分类
对于循环嵌套可能很多人的第一理解就是两个for循环进行嵌套,其实不然,所有的循环都可以循环嵌套。
例如
do{
do{
}while();
}while();
for(){
for(){
}
}
while(){
while(){
}
}
而且不止这三种,也可以将两种不一样的循环一起使用,也是嵌套循环
for(){
while(){
}
}
do{
while(){
}
}while();
还有其他几种,但是都是一样的东西,换汤不换药,也就不一一列举了。但是就我们平常而言,用的较多的是for的循环嵌套,所以我们也就用for嵌套进行举例。
3.0嵌套的使用
-
对于嵌套的使用,我们要根据题目的要求然后了解计算的优先级,将优先级高的放入循环里边,对于优先级低的我们就将它放入循环外边即高放内,低放外。
-
而对于优先级可能又有所疑惑,其实优先级就是你需要先算的优先级就高,例如对于阶乘的和,我们肯定是先要算阶乘才能加然后再计算和。而阶乘自然优先级就高于和的优先级。所以对于嵌套,我们就需要将和的计算放到外部,然后将阶乘的计算放到内部。
-
分析完优先级之后,我们就需要取值范围,而for循环的三个条件一般都可以为
for(初始值i;范围;i增减)
-
对于三个条件的编写,也需要根据程序进行内循环编写和外循环编写,以求前n项和阶乘为例,我们不知道n的大小,n是用户自己输入的值,故i是要小于n,又因为阶乘是从1开始计算,所以我们需要把i初值赋值为1,然后令i每次+1,即外部循环就为
for(i=1;i<n;i++)
-
写完外部for的条件之后,还需要内部for的编写,对于内部的for循环,我们需要在定义一个j用来循环否则用i会与外循环矛盾。对于内部循环条件的编写,与外循环一样,而且是要基于外循环的基础上进行条件编写,如j并不是小于n,而是根据i的值,每次不大于i,故内循环的条件就可以写为
for(j=1;j<=i;j++)
-
写完条件之后,我i们就需要在循环内写条件,而一般我们也是先写优先级高的再写优先级低的,即先写内循环再写外循环。对于这道题我们内循环要求的是计算出阶乘,故定义个变量fac,然后将每次相乘的积存入fac内。则可写为
fac*=j;
-
对于外部循环的写法虽然跟内部一样,也需要了解需要干什么用,但是有一点需要注意的是,对于像fac这种在内循环中,但是由于阶乘每次都是从1开始相乘,故我们需要在每次内循环结束之后就要将fac赋值为1,所以我们直接在外循环赋值为
int fac=1;
-
然后在观察外循环的作用,发现外循环是为了让每一项的乘积相加,即可以写为
sum+=fac;
-
然后,这个程序就完成了。小编还有其他几个博客也是用嵌套循环写的,感兴趣的话可以看看
[输出n阶分式的阶乘之和]((5条消息) 利用C语言输出n阶分式的阶乘之和_丶丶丶丶。的博客-CSDN博客_输出阶乘和)
-
本程序代码
#include<stdio.h> int main() { int i,j,sum,n; printf("请输入nn"); 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("得到的结果为%dn",sum); return 0; }
4.0 嵌套的优化
对于嵌套的内部我们也可以根据题目进行一些优化,比如如果只需要成立时输出一次,我们可以在输出时直接跳出循环可以根据条件利用continue或者break。例如可以看我之前博客里的数组求和
[找两个数之和等于目标数值]((5条消息) 力扣练习题之数组中找两个数之和等于目标数值详细讲解_丶丶丶丶。的博客-CSDN博客)
这个题目也是LeetCode中的入门题,有空可以看一看。
最后
以上就是醉熏高跟鞋为你收集整理的循环嵌套详解循环嵌套的全部内容,希望文章能够帮你解决循环嵌套详解循环嵌套所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复