首页 > 编程语言 >C++ 中的 for 循环条件拆解

C++ 中的 for 循环条件拆解

时间:2023-10-19 21:32:15浏览次数:33  
标签:循环体 变量 一个 循环 C++ 拆解 表达式 布尔

引子

CSP-J真题中,for循环后面括号内的几个表达式组形式特别……

C++ 中的 for 循环条件拆解_for循环


for循环的格式
for (表达式一; 表达式二; 表达式三)
{
    循环体;
}

示例代码:循环输出1-100

for (int i = 1; i <= 100; i++)
{
    cout << i << " ";
}
for循环的执行顺序

①表达式一(只执行一次) ②表达式二 ③循环体 ④表达式三 ②表达式二 ③循环体 ……

【④-②-③】 不断重复执行,直到②为假。


拆分解释

表达式一:变量初始化表达式

表达式二:执行循环的条件(关系表达式)

表达式三:累加(累减),累计作用

三个表达式一般配合使用,但是特殊情况下,有可能会出现如题比较特别的形式。但是不管何种形式,for后面的括号内必然是三个表达式,包含空表达式即只有一个分号。两个分号分隔出来三个表达式。

表达式一

如果表达式一中的变量已经在前面定义了,那么表达式一可以空着,就是空表达式,空表达式只有一个分号结尾,但是必须有分号结尾。

如题,表达式一,是一个空表达式。

表达式二

表达式二是一个条件,是一个关系表达式,它的结果是布尔类型,所以只要符合结果是布尔类型的表达式就可以作为表达式二(一个变量加一个分号也组成一个表达式)。

既然表达式二是一个布尔类型,那么根据隐式转换为布尔类型“非零即真”的原则,只要结果为0,就是假,那么结束循环;否则都是真,继续执行循环。

如题,表达式二是一个数值变量n,那么当n的值为0时,结束循环;只要n的值不为0,就继续执行循环体。n的值是根据什么得出的呢,是根据表达式三的计算结果。

表达式三

表达式三是一个累计控制的表达式,可以对循环条件造成影响。

如题通过表达式三算出来n的值,直到结果为0的时候,表达式二就为假,那么就不执行循环了。

总结

除了题目中这样的写法,还有很多变体。

如题这种非常规的写法,日常中极少用到,日常遇到类似的功能,使用while循环或者do-while循环实现就可以。

这些非常规写法,也就是会出现在竞赛类的题目中。所以我们日常中不要这样写,但要明白各种变体表现的是什么意思。









标签:循环体,变量,一个,循环,C++,拆解,表达式,布尔
From: https://blog.51cto.com/u_15965130/7942300

相关文章

  • C++零基础教程(函数重载)
    (文章目录)前言本篇文章来讲解函数重载,函数重载在C++中是非常重要的一个概念。一、概念讲解C++中的函数重载是指在同一个作用域中定义多个具有相同名称但参数列表不同的函数。函数重载允许使用相同的函数名来表示执行类似但具有不同参数类型或参数数量的操作。这样做可以提高......
  • LM拟合 C++
    未完成#include<iostream>#include<vector>#include<array>#include<ctime>#include<random>usingnamespacestd;voidCalc_J_fx(vector<array<double,2>>&data, double&k, vector<double......
  • C++
    1.什么是引用?简单来说就是给一个变量起别名。(本质是一个指针常量)当编译器遇到int&a=b;时,自动转成int*consta=&b,然后遇到a时编译成*a用法:数据类型&引用名=变量名inta=10;int&b=a;//b与a代表同一个数据注意①引用必须要初始化。int&b;//错误②引用一旦初始化后,就不能再更改......
  • C++ 模板特化与偏特化:解析与应用
    引言在C++中,模板是一种非常强大的特性,它们允许我们编写通用、可重用的代码。但有时,我们需要为某些特定的数据类型或类提供特殊的实现,这时就需要使用到模板特化(TemplateSpecialization)和模板偏特化(PartialTemplateSpecialization)。本文将深入探讨这两者的概念、用法和注意事项......
  • Day18_有参装饰器_迭代器_可迭代对象___iter__()方法__next__()方法_for循环原理_自定
    1.Day17复习无参装饰器模版: 2.Day17复习装饰器的补充: 3.有参函数的知识储备: 4.有参装饰器不用语法糖,使用套用的方式从数据源取数据: 5.有参装饰器不用语法糖,使用套用的方式二从数据源取数据: 6.有参装饰器语法糖: 7.有参装饰器模板: 8.迭代器的介绍和为何存在迭......
  • 《动手学深度学习 Pytorch版》 9.4 双向循环神经网络
    之前的序列学习中假设的目标是在给定观测的情况下对下一个输出进行建模,然而也存在需要后文预测前文的情况。9.4.1隐马尔可夫模型中的动态规划数学推导太复杂了,略。9.4.2双向模型双向循环神经网络(bidirectionalRNNs)添加了反向传递信息的隐藏层,以便更灵活地处理此类信息。9......
  • 万字长文:拆解银行数智运营之困!
    近日,由轻金融特别策划并推出的采访报道中,轻金融与京东金融实战团队进行了一次深入交流,双方深度解析了银行数智运营体系之破局、开局、布局问题。以下为采访内容正文:重剑无锋,大巧不工。丰富的业务场景、庞大的客户群体、倍增的交易规模,造就了中国金融机构数字化转型的重剑模式。该模......
  • 多源最短路径的原理及C++实现
    时间复杂度O(n3),n是端点数。核心代码template<classT,TINF=1000*1000*1000>classCNeiBoMat{public:CNeiBoMat(intn,constvector<vector<int>>&edges,boolbDirect=false,boolb1Base=false){m_vMat.assign(n,vector<int>......
  • 存在负权边的单源最短路径的原理和C++实现
    负权图此图用朴素迪氏或堆优化迪氏都会出错,floyd可以处理。负环图 但floyd无法处理负权环,最短距离是无穷小。在环上不断循环。经过k条边的最短距离(可能有负权变)贝尔曼福特算法(bellman_ford)就是解决此问题的。原理循环k次,循环第i次时,m_vDis表示各点最多经过i-1条边的最短距离;v......
  • 堆优化迪氏最短单源路径原理及C++实现
    时间复杂度O(ElogE),E是边数。适用与稀疏图。使用前提边的权为正。可以非连通,非连通的距离为-1。原理优选队列(小根堆)记录两个数据:当前点到源点距离,当前点。先处理距离小的点;如果距离相等,先处理谁都可以。可以用pair记录,不用重写小于。优先队列只记录如下情况的距离:一,{0,源点}。二,......