当前位置: 首页 > news >正文

C语言程序设计-[11] 循环结构嵌套

 1、循环结构嵌套形式

上面三种循环语句结构可以相互嵌套,组合非常灵活。循环嵌套需要记住最重要的一点:”外循环执行一次,内循环要完整执行一遍,要通过实例加深对这一句话的理解。

注1:一个循环结构由四个要素构成:循环初始条件、循环判定条件、循环体和循环修正条件。循环初始条件就是循环结构的一些变量定义和初始化值设置。循环判定条件就是循环的判定表达式。循环体就是循环执行部分。循环修正条件就是为了进入下一轮循环,需要改变循环条件。

注2:不管怎么嵌套,仍然只需要分析出每一层循环结构的四要素,然后套用各种循环语句结构形式就行。因此,最为关键的还是分析出每一层循环结构的四要素,还要注意内层和外层的关系。

2、循环结构嵌套示例

对于求解1+(1+2)+(1+2+3)+...+(1+2+3+...+n)。

对于这个问题,首先分析层的四个要素如下:

循环初始化条件:i=1, sum=0;  //从上面问题来看,主要有要加的项(对于第一项,i=1)和加的结果(在加之前结果为0,即sum=0)。

循环判断条件:i<=n;  //从上面问题来看,要加的项有n项,也就是小于等于n,即i<=n,这个n没有指定值,就需要赋值或者输入。

循环体: sum+=t;  // 从上面问题来看,对于每一项t,都要加进sum中,即sum+=t,其中t由内层计算得到的

循环修正条件: i++;   //从上面问题来看,每一项都要加进sum,所以i要+1,即i++。

这时,我们可以写下如下代码:

#include "stdio.h"int main()
{int i,j,n;long t,sum=0;   scanf("%d",&n);for(i=1;i<=n;i++)  //外层循环的初始条件、判定条件和修正条件 {...;           //内层循环部分,计算t,目前缺失 sum+=t;        //外层循环的循环体 }printf("sum=%ld",sum);return 0;
}

内层就是为了计算每一项得到结果t,而对第n项是1+2+3+...+n,这样内层的四个要素如下:

循环初始化条件:j=1, t=0;  //从上面问题来看,主要有要加的数(对于第一个数,i=1)和加的结果(在加之前结果为0,即t=0)。

循环判断条件:j<=i;  //这里要建立与外层的关系,这里的i是指第i项。从上面问题来看,第i项是1+2+3+...+i,也就是j小于等于i,即j<=i。

循环体: t+=j;  // 从上面问题来看,对于每一个数j,都要加进t中,即t+=j。

循环修正条件: j++;   //从上面问题来看,每一个数都要加进t,所以j要+1,即j++。

这时,套用for语句循环结构形式,则内层循环代码如下:

t=0;for(j=1;j<=i;j++)   //内层循环的初始条件、判定条件和修正条件t+=j;           //内层循环的循环体 

这样最终代码和结果如下:

#include "stdio.h"int main()
{int i,j,n;long t,sum=0;   scanf("%d",&n);for(i=1;i<=n;i++)  //外层循环的初始条件、判定条件和修正条件 {t=0;for(j=1;j<=i;j++)   //内层循环的初始条件、判定条件和修正条件t+=j;           //内层循环的循环体 sum+=t;        //外层循环的循环体 }printf("sum=%ld",sum);return 0;
}

注:不管是两重、三重还是更多重的循环嵌套,都可以这样分析和编写代码,从最外层开始,逐步内层实现,而且外层循环变量可以用于内层循环判定条件,以建立内层与外层的关系。当然,也有内外层变量没有明显约束关系,只有“外层执行一轮次而内层执行所有轮次”的循环嵌套关系。例如:鸡兔问题。

问题:鸡和兔共30只,有90条腿,问鸡多少只?兔多少只?

#include "stdio.h"int main()
{int ji,tu;for(ji=0;ji<30;ji++)for(tu=0;tu<23;tu++){if(ji+tu==30 && ji*2+tu*4==90)printf("ji=%d,tu=%d\n",ji,tu);}return 0;
}

注1:外循环就是循环鸡的只数,内循环就是循环兔的只数(4*23=88,所以兔最多22只)。

注2:循环体就是输出符合条件的鸡只数和兔只数的组合。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • uniapp 对于scroll-view滑动和页面滑动的联动处理
  • 什么是前端微服务,有何优势
  • 解决戴尔台式电脑休眠后无法唤醒问题
  • JS中关于为什么调用构造函数要使用new的详细解读
  • stm32程序调试方式(OLED显示屏调试以及Keil调试模式)
  • lwip 3. 网线拔掉后 lwip_recvfrom不能返回
  • ECMAScript 6 入门 学习 日志笔记 2024/8/6 13:59
  • 【Transformer】关于RNN以及transformer的相关介绍
  • uniapp3.0实现图片上传公用组件上传uni-file-picker,uni.uploadFile
  • Mac电脑装不了软件怎么办 苹果电脑软件安装失败解决办法 安装macos空间不足
  • 【开源社区】Elasticsearch(ES)中空值字段 null_value 及通过exists查找非空文档
  • 【MySQL】全面剖析索引失效、回表查询与索引下推
  • 【开端】web系统中返回状态码组织管理
  • 回顾Python
  • 在树莓派上安装udhcpd的步骤
  • 【mysql】环境安装、服务启动、密码设置
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Javascript编码规范
  • Javascript弹出层-初探
  • React16时代,该用什么姿势写 React ?
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • spring学习第二天
  • underscore源码剖析之整体架构
  • yii2权限控制rbac之rule详细讲解
  • 关于extract.autodesk.io的一些说明
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 马上搞懂 GeoJSON
  • 前端面试之闭包
  • 算法---两个栈实现一个队列
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 一文看透浏览器架构
  • 在Mac OS X上安装 Ruby运行环境
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​批处理文件中的errorlevel用法
  • ​如何使用QGIS制作三维建筑
  • #{}和${}的区别?
  • #if #elif #endif
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (09)Hive——CTE 公共表达式
  • (1)常见O(n^2)排序算法解析
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (C++)八皇后问题
  • (Forward) Music Player: From UI Proposal to Code
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (补)B+树一些思想
  • (二)测试工具
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (黑马C++)L06 重载与继承
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致