虽说是多层,事实上 for 循环嵌套的层数也不能太多。通常为两个 for 循环的嵌套,超过两个的极少使用。

与单个 for 循环相比,多个 for 循环的嵌套在逻辑上更复杂一点,但并不难懂。

直接给大家写一个程序:

#include <stdio.h>int main(void){int i, j;for (i=0; i<4; ++i){printf("问世间情是何物, 直教生死相许\n");for (j=0; j<3; ++j){printf("两情若是久长时, 又岂在朝朝暮暮\n");}}return 0;}

输出结果是:

问世间情是何物, 直教生死相许

两情若是久长时, 又岂在朝朝暮暮

两情若是久长时, 又岂在朝朝暮暮

两情若是久长时, 又岂在朝朝暮暮

问世间情是何物, 直教生死相许

两情若是久长时, 又岂在朝朝暮暮

两情若是久长时, 又岂在朝朝暮暮

两情若是久长时, 又岂在朝朝暮暮

问世间情是何物, 直教生死相许

两情若是久长时, 又岂在朝朝暮暮

两情若是久长时, 又岂在朝朝暮暮

两情若是久长时, 又岂在朝朝暮暮

问世间情是何物, 直教生死相许

两情若是久长时, 又岂在朝朝暮暮

两情若是久长时, 又岂在朝朝暮暮

两情若是久长时, 又岂在朝朝暮暮

=============

其实,多层 for 循环嵌套的执行过程与单个 for 循环的执行过程是一模一样的。多层 for 循环的嵌套只不过是将单个 for 循环大括号中的“语句”换成了 for 循环而已。

下面看看上面程序中两个 for 循环嵌套是怎么执行的。

1) 首先求解表达式 1,即给变量 i 赋初值,i=0;表达式 1 只执行这一次,下面都不会再执行了。

 2) 然后求解表达式 2,即 0<4 成立,则执行 for 循环中的内嵌语句:

printf("问世间情是何物, 直教生死相许\n");for (j=0; j<3; ++j){printf("两情若是久长时, 又岂在朝朝暮暮\n");}

====================

首先 “printf("问世间情是何物,直教生死相许\n")”,然后执行内部 for 循环,对这个 for 循环再次应用“单个 for 循环”的执行过程:

★ 首先求解表达式 1,即给变量 j 赋初值,j=0。

★ 然后求解表达式 2,即 0<3 成立,则执行 for 循环中的内嵌语句,即 “printf("两情若是久长时,又岂在朝朝暮暮\n");”。

★ 然后执行表达式 3,变量 j 自加 1,即变量 j 由 0 变为 1。

★ 然后求解表达式 2,即 1<3 成立,则执行 for 循环中的内嵌语句,即“printf("两情若是久长时,又岂在朝朝暮暮\n");”。

★ 然后执行表达式 3,变量 j 自加 1,即变量 j 由 1 变为 2。

★ 然后求解表达式 2,即 2<3 成立,则执行 for 循环中的内嵌语句,即“printf("两情若是久长时,又岂在朝朝暮暮\n");”。

★ 然后执行表达式 3,变量 j 自加 1,即变量 j 由 2 变为 3。

★ 然后求解表达式 2,即 3<3 不成立,则内部的循环结束。对内部的 for 而言循环是结束了,但对外部的 for 而言,“for 循环的执行”过程才执行到表达式 3。

3) 然后执行表达式 3,变量 i 自加 1,即变量 i 由 0 变为 1。

4) 然后再求解表达式 2……

……

就这样一直循环下去,直到外层循环结束,整个循环才结束。

总之,不管是单个 for 循环还是多个 for 循环的嵌套,它们的执行过程是一样的。只不过如果是“多个 for 循环的嵌套”,则其执行过程也是嵌套的。

for循环嵌套编程练习

1、求出 1!+2!+3!+…+n!的和。

对于这个程序前面用一个for编程也可以实现,但是逻辑性太强,现在再用for循环嵌套编程实现一下:

#include <stdio.h>int main(void){int n = 0;  //存储1!+2!+3!+…+n!中n的值int i = 0, j = 0;  //循环变量int m = 1;  //用于计算每个数的阶乘unsigned long sum=0;  /*阶乘的值往往很大, 定义成long型。虽然如此, 下面输入的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 <stdio.h>int main(void){int w, e, s;  //w代表wushi;e代表ershi;s代表shifor (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 <stdio.h>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循环嵌套我们就学习到这里。

如果你还想更深入的学习以及其他知识,不管你是转行也好,初学也罢,进阶也可~

【值得关注】我的 编程学习交流俱乐部 !【点击进入】

C语言入门资料:

C语言必读书籍:

for循环嵌套,C语言for循环嵌套详解!编程使我快乐!相关推荐

  1. c语言do循环函数,C语言do-while循环

    本篇文章帮大家学习c语言do-while循环,包含了C语言do-while循环使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. 要执行程序或代码的一部分几次或多次,我们可以 ...

  2. python中循环语句只有for和while两种_Python循环语句之while,for语句详解

    下面为大家分享一篇Python 循环语句之 while,for语句详解,具有很好的参考价值,希望对大家有所帮助.一起过来看看吧 Python中有两种循环,分别为:for循环和while循环. for循 ...

  3. go结构体初始化_go嵌套匿名结构体的初始化详解

    go匿名结构体 嵌套匿名结构体的 示例代码片. type debugConfig struct { MaxQueueDepth int `json:"maxQueueDepth"` ...

  4. c语言菜单选择如何用字符形式,【创客天地】计算机二级C语言、VB考试详解分析...

    原标题:[创客天地]计算机二级C语言.VB考试详解分析 01 马上就要迎来计算机二级考试了,你准备好了吗?今天助手君准备了一点C语言干货,希望对即将考试的你有所帮助.(上期刚刚推了office,有需要 ...

  5. c语言写扫雷新手详解

    c语言写扫雷新手详解 一.用到的知识点 1.分支语句 2.循环语句 3.二维数组 4.最好分块,使代码的功能更加独立,思维逻辑更加清楚,此程序我写了:test.c用来存放我的主函数,game.h用来定 ...

  6. C语言:JSON格式详解

    C语言:JSON格式详解 C语言:cJSON库用法详解 C语言:使用cJSON库构造JSON C语言:使用cJSON库解析JSON字符串 JSON 简介 JSON全称 JavaScript Objec ...

  7. 【原创-更新完毕】|日历拼图游戏的解决方案(C语言-进阶应用)-详解连载2

    [原创]|日历拼图游戏的解决方案(C语言-进阶应用)-详解连载1_zhuyi8120的博客-CSDN博客 [原创]|日历拼图游戏的解决方案(C语言-进阶应用)-详解连载3_zhuyi8120的博客-C ...

  8. c语言背包问题装字母,C语言动态规划之背包问题详解

    01背包问题 给定n种物品,和一个容量为C的背包,物品i的重量是w[i],其价值为v[i].问如何选择装入背包的物品,使得装入背包中的总价值最大?(面对每个武平,只能有选择拿取或者不拿两种选择,不能选 ...

  9. C语言:最大公约数详解

    C语言:最大公约数详解 Hello!小伙伴们大家好,几天不见了,今天给大家分享一下C语言中求最大公约数的三种方法.在开始分享前,让我们先来看看什么是最大公约数:最大公约数,也称最大公约数.最大公因子, ...

  10. c语言for表达式1的作用,C语言for语句用法详解

    C语言for语句用法详解 C语言是一门高级计算机编程语言,设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言.下面小编给大家介绍C语言f ...

最新文章

  1. 自然语言处理(NLP)之用深度学习实现命名实体识别(NER)
  2. CTFshow 爆破 web24
  3. Python能做什么事?为什么人工智能一定要学Python?
  4. sdch: chrome支持的新HTTP传输压缩算法
  5. 其中一个页签慢_Word中如何快速定位到页、行、表格、公式,查找与替换方法...
  6. AUTOSAR从入门到精通100讲(十四)-一文详解CAN总线错误帧
  7. Microsoft ScriptControl 控件使用指南
  8. Linux中 print用法,linux之find中的-print0和xargs中-0用法
  9. 【kafka】支持超高并发的kafka网络设计
  10. Selenium UI自动化测试(一)环境配置
  11. 通过IF({1,0}和VLOOKUP函数实现Excel的双条件多条件查找的方法
  12. 【教程】生态环境影响评价技术应用及典型实践案例分析
  13. iOS实现一个简单的视频播放器
  14. Redis-使用场景
  15. 7z文件格式及其源码的分析(三)
  16. 返回链表的中间结点,若中间有两个结点,则返回后一个结点(两种方法)
  17. Iphone的Wallet中如何移除电子登机牌凭证
  18. 分布式系统-共识协议
  19. 2023东莞理工学院计算机考研信息汇总
  20. 用计算机术语赞美老师,【用一句话赞美各个学科】_赞美各学科老师的对联

热门文章

  1. 任务栏的小喇叭不见了怎么办?
  2. 我的实践:通过蚂蚁、蜜蜂二分类问题了解如何基于Pytorch构建分类模型
  3. 蓝桥杯 prev37 分巧克力
  4. 微信8.0新版本上线,这些新功能你知道吗?
  5. 基于凌鸥平台的两电阻采样无感FOC PMSM方案
  6. 基于java的HashMap遍历
  7. 微信聊天的一个创新方向
  8. 怎么画龙的画奶奶帮我擦java,怎么一步一步教孩子用蜡笔简单画一条龙(步骤图解)...
  9. matlab 白噪声模块,simulink中白噪声设置
  10. 如何快速拆分Excel表格呢