作者:88943w | 来源:互联网 | 2023-09-04 22:45
虽说是多层,事实上for循环嵌套的层数也不能太多。通常为两个for循环的嵌套,超过两个的极少使用。与单个for循环相比,多个for循环的嵌套在逻辑上更复杂一点,但并不难懂
虽然说是多层,但实际上for循环嵌套的层数不能太多。 通常是两个for循环的嵌套,很少使用超过两个的。
与单个for循环相比,多个for循环的嵌套在逻辑上要复杂一些,但也不是很难理解。
我直接给大家写程序:
# #包括stdio.h
int main (语音) )。
{
英特尔,j;
for(I=0; i4; I ) )
{
printf (当问到世间之情是什么时,直接告诉我生死并答应(n ) );
for(j=0; j3; j )日本
{
printf (如果两情相悦,朝暮暮吗(n ) );
}
}
返回0;
{1}输出结果如下所示。
询问世间之情是什么,直接告诉我生死并答应
在漫长的时间里,两种感情,是走向黄昏吗
在漫长的时间里,两种感情,是走向黄昏吗
在漫长的时间里,两种感情,是走向黄昏吗
询问世间之情是什么,直接告诉我生死并答应
在漫长的时间里,两种感情,是走向黄昏吗
在漫长的时间里,两种感情,是走向黄昏吗
在漫长的时间里,两种感情,是走向黄昏吗
询问世间之情是什么,直接告诉我生死并答应
在漫长的时间里,两种感情,是走向黄昏吗
在漫长的时间里,两种感情,是走向黄昏吗
在漫长的时间里,两种感情,是走向黄昏吗
询问世间之情是什么,直接告诉我生死并答应
在漫长的时间里,两种感情,是走向黄昏吗
在漫长的时间里,两种感情,是走向黄昏吗
在漫长的时间里,两种感情,是走向黄昏吗
=============
其实,多层for循环的嵌套执行过程和单一for循环的执行过程一模一样。 多层for循环的嵌套只是将单个for循环大括号中的“语句”替换为for循环。
让我们看看上面的程序如何执行两个for循环的嵌套。
1 )先解式1。 即,对变量I赋予初始值,i=0; 表达式1只执行一次,以后不再执行。
2 )然后,当求解式2,即04成立时,执行for循环内的嵌入语句。
printf (当问到世间之情是什么时,直接告诉我生死并答应(n ) );
for(j=0; j3; j )日本
{
printf (如果两情相悦,朝暮暮吗(n ) );
}
===================
首先“printf ()世间之情是什么,直接告诉我生死并约定(n ) )”,然后执行内部的for循环,将“单一for循环”的执行过程再次应用于该for循环。
首先求解式1,即赋予变量j初始值,设为j=0。
然后,式2、即03成立时,执行for循环中的嵌入语句、即“printf (两情相悦时,朝暮(n ) )”。
然后执行公式3,将变量j递增1。 也就是说,变量j从0变为1。
然后,如果式2,即13成立,则执行for循环中的嵌入语句,即“printf ()两情相悦时,朝暮(n )”。
然后执行公式3,将变量j加1。 也就是说,变量j从1变为2。
然后,如果式2、即23成立,则执行for循环中的嵌入语句,即“printf ()两情长时,朝暮(n ) )”。
然后执行公式3,将变量j加1。 也就是说,变量j从2变为3。
然后解式2,即如果33不成立,内部循环就结束。 对内部的for来说循环结束了,但对外部的for来说,“for循环的执行”过程执行到了式3。
3 )然后执行公式3,将变量I加1。 也就是说,变量I从0变为1。
4 )然后解算式2……
.
这样持续循环直到外侧循环结束,整个循环结束。
总之,无论是单个for循环还是嵌套多个for循环,执行过程都是相同的。 但是,在“多个for循环的嵌套”的情况下,其执行过程也是嵌套的。
for循环嵌套编程练习 1、求出 1!+2!+3!+…+n!的和。这个程序之前一个for编程也可以实现,但是逻辑性太强了,现在再用for循环嵌套编程实现一下:
# #包括stdio.h
int main (语音) )。
{
int n=0; //储存装置1! 2! 3! … n! 中n的值
int i=0,j=0; //循环变量
int m=1; //用于计算各数量的阶乘
无符号长和=0; /*阶乘的值大多很大,被定义为lo
ng型。虽然如此, 下面输入的n的值也不能太大, 不然long也放不下*/
printf("请输入n的值:");
scanf("%d", &n);
for (i=1; i<=n; ++i)
{
for (j=1; j<=i; ++j) //求一个数的阶乘
{
m = m*j;
}
sum = sum + m; //求完之后就立即把它加到sum中
m = 1;
}
printf ("sum = %ld\n", sum);
return 0;
}
==========
输出结果是:
请输入n的值:10
sum = 4037913
我们看到 n 的值仅为 10 结果就这么大,要再大点 long 类型肯定是存放不了的。此外,有人可能会纠结这样的问题,程序开头定义那么多变量,可是我写的时候怎么知道后面要用到哪些变量呢?
其实,这些变量都不是刚开始写程序的时候就定义的,大多数情况下都是“善良的白开水开始知道定义哪些变量那么就定义上,如果不知道那就不定义,等到后面需要用再回到前面进行定义”,这才是正常的逻辑。
2、求出用 50元、20元 和 10元换算 100元有几种方式?
思路:用穷举法, 将所有可能的情况都列出来, 用 for 循环可以实现穷举
分析:100 元单用 50 换算, 最多需要两张;用 20 元换算, 最多需要五张;用 10 元换算最多需要十张
#include
int main(void)
{
int w, e, s; //w代表wushi;e代表ershi;s代表shi
for (w=0; w<=2; ++w)
{
for (e=0; e<=5; ++e)
{
for (s=0; s<=10; ++s)
{
if (100 == 50*w+20*e+10*s)
{
printf("%d %d %d\n", w, e, s);
}
}
}
}
return 0;
}=========
输出结果是:
0 0 10
0 1 8
0 2 6
0 3 4
0 4 2
0 5 0
1 0 5
1 1 3
1 2 1
2 0 0
3、“百钱买百鸡”是中国古代一个著名的枚举法题目。
所谓枚举就是将所有可能的情况全部列出来的意思。for 循环嵌套是实现枚举的一种手段,上面的换算也是一种枚举。假设公鸡 5 元一只,母鸡 3 元一只,小鸡 1 元 3 只,现在给你 100 元,要你买回 100 只鸡,求出公鸡、母鸡、小鸡分别为多少只。
#include
int main(void)
{
int x, y, z; //x、y、z 分别表示公鸡、母鸡、小鸡
for (x=0; x<20; ++x)
{
for (y=0; y<33; ++y)
{
z = 100 - x - y; //小鸡也可以用循环,但是能用二层循环解决的就不要用三层。
if ((0 == z%3) && (100 == 5*x + 3*y + z/3)) //将 0==z%3 放前面更好,因为 && 是“短路与”,前面不成立后面就不会执行了,所以把计算量小的放前面。
{
printf("x = %d, y = %d, z = %d\n", x, y, z);
}
}
}
return 0;
}==========
输出结果是:
x = 0, y = 25, z = 75
x = 4, y = 18, z = 78
x = 8, y = 11, z = 81
x = 12, y = 4, z = 84
==================================
for循环嵌套我们就学习到这里。
如果你还想更深入地学习以及其他知识,不管你是转行也好,初学也罢,进阶也可~
【值得关注】我!