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

news2024/9/22 7:40:45

 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:循环体就是输出符合条件的鸡只数和兔只数的组合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1997202.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java设计模式-建造者模式-一次性理解透

1. 建造者模式简介 今天我们将研究 Java 中的建造者模式&#xff08;Builder 模式&#xff09;。Builder 设计模式是一种创建型设计模式&#xff0c;也被称为生成器模式&#xff0c;类似于工厂模式和抽象工厂模式。 该模式用于创建复杂对象&#xff0c;允许用户创建不同类型的…

【Python】PyWebIO 初体验:用 Python 写网页

目录 前言1 使用方法1.1 安装 Pywebio1.2 输出内容1.3 输入内容 2 示例程序2.1 BMI 计算器2.2 Markdown 编辑器2.3 聊天室2.4 五子棋 前言 前两天正在逛 Github&#xff0c;偶然看到一个很有意思的项目&#xff1a;PyWebIo。 这是一个 Python 第三方库&#xff0c;可以只用 P…

100 Exercises To Learn Rust 挑战!准备篇

公司内部的学习会非常活跃&#xff01;我也参与了Rust学习会&#xff0c;并且一直在研究rustlings。最近&#xff0c;我发现了一个类似于rustlings的新教程网站&#xff1a;Welcome - 100 Exercises To Learn Rust。 rustlings是基于Rust的权威官方文档《The Rust Programming…

汽车免拆诊断案例 | 2010款劳斯莱斯古斯特车中央信息显示屏提示传动系统故障

故障现象  一辆2010款劳斯莱斯古斯特车&#xff0c;搭载N74发动机&#xff0c;累计行驶里程约为11万km。车主反映&#xff0c;起动发动机后组合仪表和中央信息显示屏均提示传动系统故障。用故障检测仪检测&#xff0c;发现发动机控制模块2&#xff08;DME2&#xff09;中存储…

SmartBI拓展包二开入门开发

前言 新接到一个项目拓展包三开的需求&#xff0c;没有相关经验&#xff0c;学习开发&#xff0c;本文尝试通过简单的定位以及指导&#xff0c;确定修改点 SmartBI帮助文档-拓展包开发 登录 http://localhost:18080/smartbi/vision/index.jsp后台配置 上传拓展包&#xff0…

MySQL和Redis的数据一致性

MySQL和Redis的数据一致性 多线程环境下的涉及读写的缓存才会存在MySQL和Redis的数据不一致问题 先删除缓存再更新数据库再延时删除缓存 线程一删除缓存线程一更新数据线程二开始查数据如果第二步线程一更新数据延时&#xff0c;那么线程二会重新从数据库加载数据&#xff0…

超好用的windows系统工具PowerToys

文章目录 Github地址基本介绍使用 Github地址 PowerToys 基本介绍 是windows官方好用的工具箱&#xff0c;包括各种工具 使用 要带上win键 此工具安装后每次运行电脑自启动&#xff0c;桌面没有快捷方式&#xff0c;只能右下角 窗口在上效果演示&#xff0c;会被蓝线框到…

基于GeoTools使用JavaFx进行矢量数据可视化实战

目录 前言 一、JavaFx展示原理说明 二、GeoTools的Maven依赖问题 三、引入Geotools相关的资源包 四、创建JavaFx的Canvas实例 五、JavaFx的Scene和Node的绑定 六、总结 前言 众所周知&#xff0c;JavaFx是Java继Swing之后的又一款用于桌面应用的开发利器。当然&#xff0…

江科大/江协科技 STM32学习笔记P22

文章目录 AD单通道&AD多通道ADC基本结构和ADC有关的库函数AD单通道AD.cmain.c连续转换&#xff0c;非扫描模式的AD.c AD多通道AD.cmain.c AD单通道&AD多通道 ADC基本结构 第一步&#xff0c;开启RCC时钟&#xff0c;包括ADC和GPIO的时钟&#xff0c;ADCCLK的分频器也需…

openvidu私有化部署

openvidu私有化部署 简介 OpenVidu 是一个允许您实施实时应用程序的平台。您可以从头开始构建全新的 OpenVidu 应用程序&#xff0c;但将 OpenVidu 集成到您现有的应用程序中也非常容易。 OpenVidu 基于 WebRTC 技术&#xff0c;允许开发您可以想象的任何类型的用例&#xf…

回归预测|基于黏菌优化LightGBM的数据回归预测Matlab程序SMA-LightGBM 多特征输入单输出

回归预测|基于黏菌优化LightGBM的数据回归预测Matlab程序SMA-LightGBM 多特征输入单输出 文章目录 前言回归预测|基于黏菌优化LightGBM的数据回归预测Matlab程序 多特征输入单输出 SMA-LightGBM 一、SMA-LightGBM模型1. **LightGBM**2. **黏菌智能优化算法&#xff08;SMA&…

知识中台是什么?它如何实现高效知识管理?

引言 在信息化浪潮席卷全球的今天&#xff0c;企业面临的不仅是市场的激烈竞争&#xff0c;更是知识爆炸带来的管理挑战。如何在浩瀚的信息海洋中提炼出有价值的知识&#xff0c;并将其快速转化为企业的核心竞争力&#xff0c;成为了每个企业必须深思的问题。在此背景下&#…

二叉树的重要概念

前言&#xff1a; 二叉树是树形结构的一个重要类型&#xff0c;一般的树也可以转化成二叉树来解决问题。在数据结构的系统中&#xff0c;树形结构也是信息存储和遍历的重要实现&#xff0c;二叉树的最大特点就是一个根包含着左右子树的形式&#xff0c;许多具有层次关系的问题…

单元测试注解:@ContextConfiguration

ContextConfiguration注解 ContextConfiguration注解主要用于在‌Spring框架中加载和配置Spring上下文&#xff0c;特别是在测试场景中。 它允许开发者指定要加载的配置文件或配置类的位置&#xff0c;以便在运行时或测试时能够正确地构建和初始化Spring上下文。 基本用途和工…

【开源社区】Elasticsearch(ES)中空值字段 null_value 及通过exists查找非空文档

文章目录 0、声明1、问题描述2、问题剖析2.1 NULL或者空值类型有哪些2.2 案例讲解&#xff1a;尝试检索值为 null 的字段2.3 解决思路 3、使用 null_value 的诸多坑&#xff08;避免生产事故&#xff09;3.1 null_value 替换的是索引&#xff0c;并不会直接替换源数据3.2 不支持…

LVS(Linux Virtual Server)详解

LVS&#xff08;Linux Virtual Server&#xff09;是一个用于负载均衡的开源软件项目&#xff0c;旨在通过集群技术实现高性能、高可用的服务器系统。它运行在Linux操作系统上&#xff0c;并且可以利用内核级的资源来提高性能和稳定性。 思维导图 LVS的工作原理 LVS主要基于Ne…

IDEA 2022.1.4用前需知

目录 一、配置国内源 二、正确再次创建新项目方式 IDEA 2022.1.4下载地址 一、配置国内源 1、查看本地仓库地址 2、设置国内源-添加Setting.xml文件内容 3、修改目录&#xff08;考虑到当前硬盘空间大小&#xff0c;英文目录名&#xff09; 1&#xff09;创建你要移动过去…

xCat部署及分发操作系统

一、环境准备 此次安装部署均在VMware虚拟机上运行。系统采用通用稳定的centos7系统,移植到其他(linux)系统应该问题不大。软件服务器的VMware虚拟机的创建部分就跳过了. 1.1服务器的配置 IP主机名配置备注192.168.11.10master4C/8G/60GXcat/DNS/DHCP/NTP/TFTP192.168.11.11n…

【超音速专利 CN109636858A】锂电池涂布图像采集标定方法、系统、设备及存储介质

申请号CN201811276578.4公开号&#xff08;公开&#xff09;CN109636858A申请日2018.10.30申请人&#xff08;公开&#xff09;广州超音速自动化科技股份有限公司(超音速人工智能科技股份有限公司)发明人&#xff08;公开&#xff09;赵兵锁(张); 张俊峰(张); 梁土伟 相关术语…

读零信任网络:在不可信网络中构建安全系统14流量信任

1. 流量信任 1.1. 网络流的验证和授权是零信任网络至关重要的机制 1.2. 零信任并非完全偏离已知的安全机制&#xff0c;传统的网络过滤机制在零信任网络中仍然扮演着重要的角色 2. 加密和认证 2.1. 加密和认证通常是紧密相关的&#xff0c;尽管其目的截然不同 2.1.1. 加密提…