前面我们讲的是单个 for 循环的使用,最后再跟大家讲一下多层 for 之间的嵌套使用。虽说是多层,事实上 for 循环嵌套的层数也不能太多。通常为两个 for 循环的嵌套,超过两个的极少使用。

与单个 for 循环相比,多个 for 循环的嵌套在逻辑上更复杂一点,但并不难懂。直接给大家写一个程序:

# include

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

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

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

c语言两个for语句并列执行_for循环嵌套,C语言for循环嵌套详解相关推荐

  1. c语言两个for语句并列执行_for的用法详解,C语言for循环完全攻略

    for 循环语句的一般形式为: for (表达式1; 表达式2; 表达式3) { 语句; } 首先要强调两点: 1) 表达式1.表达式2和表达式3之间是用分号;隔开的,千万不要写成逗号. 2) for ...

  2. c语言两个for语句并列执行_C语言for循环(for语句)详解

    除了while循环,C语言中还有 for 循环,它的使用更加灵活,完全可以取代 while 循环. 上节我们使用 while 循环来计算1加到100的值,代码如下: #include int main ...

  3. c语言两个for语句并列执行_c语言中for循环 和嵌套for循环

    for循环:for( ; ; )里面是bai3个语句,两个分号.第一个语句是开始前执行,第二个语句是判断真假,如果真,就执行后面(大括号内)的代码.第三个语句是每次执行完毕后执行的东西,通常第三个语句 ...

  4. c语言两个for语句并列执行_c语言两个for循环套用

    展开全部 这两个bai代码是不一样的 第一个代du码,下面zhi这个循环的顺序是:dao先j循环从0开始版 然后权k循环连续循环3次 然后继续j循环以此类推.#include int main() { ...

  5. c语言两个for语句并列执行_C语言两个for语句如何并列编写?

    画数据流图和用例图 某高校欲开发一个成绩管理系统,记录并管理所有选修课程的学生的平时成绩和考试成绩,其主要功能描述如下: 1.每门课程都有3到6个单元构成,每个单元结束后会进行一次测试,其成绩作为这门 ...

  6. 计算机能直接执行的语言程序是,计算机能够直接执行的程序是什么语言

    可执行程序. 1.可执行程序(executable program,EXE File)是指一种可在操作系统存储空间中浮动定位的特殊程序.在MS-DOS和MS-WINDOWS下,此类文件扩展名为.exe ...

  7. JavaScript循环语句for,while,与break,continue配合案例详解

    目录 for循环 语法: for循环案例 1.简单的for循环 2.使用for循环打印星星 3.使用for循环打印等腰三角形 4.倒三角,与拼成菱形 5.输出1000以内的水仙花数 6.输出九九乘法表 ...

  8. mysql执行计划命令_【MySQL】EXPLAIN命令详解--解释执行计划

    具体参考: 原文如下: 在工作中,我们用于捕捉性能问题最常用的就是打开慢查询,定位执行效率差的SQL,那么当我们定位到一个SQL以后还不算完事,我们还需要知道该SQL的执行计划,比如是全表扫描,还是索 ...

  9. C语言学习5:机器数、真值、原码、反码和补码详解

    目录 1.前言 2.机器数 3.真值 4.原码 5.反码 6.补码 1.前言 上篇博文中,笔者介绍了计算机存储器存储容量大小的常用单位 .在未来,我们还会接触到各种各样的数据类型,并且这些数据在运算的 ...

最新文章

  1. MFC中OnInitDialog自动生成
  2. [web 安全] php随机数安全问题
  3. windows server 2008 iis 添加ssl证书
  4. OpenCV:OpenCV目标检测Hog+SWindow源代码分析
  5. sku设计mysql_基于spring boot拥有完整sku和下单流程的完全商城
  6. pandas.Series.quantile
  7. 【译】你不知道的Chrome调试工具技巧 第七天:异步console的趣味小窍门
  8. php微信支付回调验证
  9. 怎么做 空间杜宾模型_利用STATA创建空间权重矩阵及空间杜宾模型计算命令
  10. 计算机网络马宏伟应用层作业,计算机基础知识及试题4.doc
  11. flowplayer
  12. 幂级数展开求积分_蛮力硬推定积分基本公式
  13. 伦斯勒理工学院计算机科学专业强吗,伦斯勒理工大学CS专业好吗?
  14. 别在直接背3500个英语单词了,支你一招,看过来
  15. 正态总体参数的假设检验
  16. springmvc测试类中如何引入controller与service,request,respon
  17. MPLS virtual private network PE-CE之间的路由协议(OSPF)
  18. 一键安装java程序_一键配置java环境工具
  19. 转:各种文本格式转换的网站
  20. ThingsBoard安装

热门文章

  1. 如何下载新东方的在线视频小计-已成功crack
  2. PI 实时数据库的ODBC配置
  3. 深度学习了40万个表情,一大波AI 表情包来了
  4. kali2022安装配置、换源、输入法安装
  5. IGBT反并联二极管的功能
  6. pom.xml上显示删除线
  7. 微信输入法要来了?“微信键盘”商标申请注册中
  8. 智能家居的智能锁:如何确保家庭安全?
  9. 使用正则表达式获取两个特定词之间的数据(Python代码)
  10. web自动化测试(1):再谈UI发展史与UI、功能自动化测试