专栏首页程序员小助手MQL5从入门到精通【第四章】(二)循环语句

MQL5从入门到精通【第四章】(二)循环语句

# 循环语句

程序中除了条件判断,就属循环用的多。为什么?同样的动作,你做一万次,累不累呀?用个循环,装一个变量,让计算机自己算去。您还别说,计算机就爱这个循环操作,那是他的老本行啊。【CPU执行周期了解下】

MQL5中提供了3中循环方式,while, do - while, for。

## while语句

这是MQL内最简单的循环句子。判断条件成立,一直执行下去。说的不明白,看例子:

bool c = true;
int count = 1;
while(c==true) // 当然成立
{
    Print(count);
    if(count == 5) c = false; // 注意,就靠这个赋值操作,while循环得以终止
    count ++;
}

这是在while内部使用判断,然后修改循环标志位c,终结了while循环。您也可以使用下面的方式:

int count = 1;
while(count <= 5)
{
    Print(count);
    count ++;
}

因为count自加,那么到6的时候,while内的判断条件编程 6 <= 5,不成立,终止了while。也成功跳出了循环。

优化之后的程序,少了一个变量,少了一句条件判断和赋值,代码量减少了2行。效率丝毫不差,代码更易阅读了。所以下方代码更好。

## do-while语句

while语句是判断条件为假,直接退出,不执行。下面说一说 do - while。这个与while略不同。是直接执行,先执行再判断。看例子:

int count = 1;
do
{
    Print(count); // 输出: 1, 2, 3, 4, 5
    count++;
}
while(count < 5)

看到了吗,如果想要输出与while相同的语句,此处的判断变为 count < 5,没有判断=。因为先执行了do语句块。输出count=5后,执行了count++,此时count=6。接着while执行判断 count < 5,不成立,退出。如果条件写成 count <= 5,那就会多输出一个6。

您记清楚这一点区别了吗?

如果让我说,更倾向于while语句直接来,符合直觉,写起来结构也比do-while简洁。

## for语句

这个放最后介绍,其实是程序里第一受欢迎的语句。无论哪种编程语言,无一例外均提供了for循环的实现,而且,与c最早发明的用法,基本无二。

for(int count = 1; count <= 5; count++){
    Print(count);
}

第一个表达式,在循环开始前无条件求值(并执行)一次;

第二个表达式,在每次循环开始前求值。如果值为TRUE,则继续循环,执行嵌套的循环语句。如果值为FALSE,则终止循环。

第三个表达式,在每次循环之后被求值(并执行)。

这个for循环丧心病狂到什么地步,这是哪个表达式,可以一个都不用写,单纯写个分号就可以。

for(;;){}

请问这个玩意儿能干什么?等价于 while(true){},等价于 do{}while(true)。无限循环!

书归正传。

for循环很好用,良心之作,遵循其定义方式,您可以写出万花筒式的操作语句:

for(int a = 1, b = 2; a <= 5; a++, b += 2)
{
    Print("a=",a," b=",b); // 输出: "a=1 b=2", "a=2 b=4", ...
}

第一个表达式,初始化 a=1,b=2

第二个表达式,如果满足,for循环结束。

第三个表达式,让每次a = a+1, b = b + 2。

所以基于上述分析,输出结果也确切可期。

## break语句

手动跳出循环,或者提前跳出循环,就是break了。名字与其含义相同。

for(int count = 1; count <= 5; count++)
{
    if(count == 3) break;
    Print(count); // 输出: 1, 2
}

当循环进行到count = 3时,break,跳出整个循环。

## continue语句

上面的break终止了循环并跳出,那有没有说这轮循环我不用执行某些语句,让for接续执行下一轮呢?有的,continue就是做这个的。

int count = 1;
while(count <= 5)
{
    if(count == 3) continue;
    Print(count); // 输出: 1, 2, 4, 5
    count++
}

还是这个例子。=3的时候,这一轮可以不用执行。那么直接continue,告诉for,下一个吧,这轮到这儿就可以了。

以上语句可灵活使用,共同控制程序运行。

本文分享自微信公众号 - 程序员小助手(mql45ea),作者:walles

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • PHP自带的DateTime类,Carbon扩展类,真正的“相见恨晚!”

    PHP有一个名为DateTime的类,可以帮助您读取、写入、比较或计算日期和时间。除了DATETIME之外,PHP中还有许多与日期和时间相关的函数,但它为大多数...

    程序员小助手
  • 3分钟短文 | PHP判断null,别再 == 了,你真控制不住

    PHP 程序中很多地方会用到判断是否为空,比如字符串为空,数组为空,对象为空,或者其他数据类型为默认空值。

    程序员小助手
  • 3分钟短文 | PHP位运算和逻辑运算,一个符号写两遍这么简单?

    我们经常在程序流程中进行逻辑判断,与或非,用的是炉火纯青,相信你也不少用。那么在PHP中,有两个操作符非常接近,就是 | 和 ||,那么他们有什么区别呢?

    程序员小助手
  • python3--基础综合练习题

    允许用户最多尝试3次,3次都没猜对的话,就直接退出,如果猜对了,打印恭喜信息并退出

    py3study
  • kaggle-2美国人口普查年收入50K分类

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/d...

    bear_fish
  • python选择排序简单实现

    py3study
  • Wireshark的HTTP请求包和响应包如何对应

    以Wireshark2.6.3版本为例,如下图所示,红框中的803是一次HTTP的GET请求包,绿框中的809、810两条记录都是响应包,究竟哪个是803的响应...

    程序员欣宸
  • 线性代数01 线性的大脑

    作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载。

    Vamei
  • 数值分析读书笔记(3)求解线性代数方程组的迭代法

    考虑方程组Ax=b,其中A属于n*n维的矩阵空间,b和x属于n维向量空间,一般来说我们需要从这个隐式的方程组转变成显示的等价方程,一般具有形式

    Mezereon
  • 牺牲时间换取更少的空间,牺牲空间换取更快的时间!

    我们都知道,遍历一个list(列表)有两种方式,一种是直接输出list的对象,还有一种是使用for去迭代。这两者的区别,我将从时间和空间两方面来考虑,为了明显一...

    不可言诉的深渊

扫码关注云+社区

领取腾讯云代金券