• IDL学习:语法基础-程序控制


            程序控制时任何编程语言比不可少的重要部分。本博客主要讲解IDL语言中的循环语句条件语句跳转语句

    1. 条件语句

            IDL条件语句有三种:If、Case 和 Switch。本节针对这三种条件语句进行具体的讲解。

    1.1 If语句

            If语句的功能是用来判断是某满足条件(为“真”),若满足则执行。语法为:

    第一类语法(单行命令):

    IF expression THEN statement [ ELSE statement ]

    第二类语法(多行命令):

    IF expression THEN BEGIN

       statements

    ENDIF [ ELSE BEGIN

       statements

    ENDELSE ]

    第一类 if 语句实例: 

    1. >>IF 4 Gt 2 THEN Print,'4大于2'
    2. 4大于2
    1. >>IF 1 Gt 2 THEN Print,'真:运行' Else Print,'假:运行'
    2. 假:运行

    第二类 If 语句实例:

            注:由于是多行语句,且彼此关联,因此无法使用IDL控制台运行,需要建立一个Pro文件来编译运行,下面丢一个为Pro文件,第二个为运行结果。

    1. PRO Test02
    2. IF (4 GT 2) THEN BEGIN
    3. Print,'4大于2'
    4. Print,'条件为真'
    5. ENDIF
    6. IF ~(4 GT 2) THEN BEGIN
    7. Print,'4大于2'
    8. Print,'条件为真'
    9. ENDIF ELSE BEGIN
    10. Print,'4大于2'
    11. Print,'条件为假'
    12. ENDELSE
    13. END
    1. >>.compile -v 'D:\Code\IDL\My_Program\Test\test02.pro'
    2. % Compiled module: TEST02.
    3. >>test02
    4. % Compiled module: TEST02.
    5. 4大于2
    6. 条件为真
    7. 4大于2
    8. 条件为假

    1.2 Case语句

            Case 条件语句的功能是运行满足表达式的现有条件

    CASE 表达式 OF

        情况1: statement(s)

        ...

        情况n: statement(s)

    [ ELSE: statement(s) ]

    ENDCASE

    注:statement(s)可以是语句,也可语句块。当时语句块的是否,需要用Begin和End。

    情况n: Begin

            语句块

    End

    例子1:

    1. PRO Test02
    2. ;Print,'请输入一个省,例如江西省'
    3. A = '江西省'
    4. CASE (A) OF
    5. '江西省': Print,'输入的是江西省'
    6. '福建省': Print,'输入的是福建省'
    7. '台湾省': Print,'输入的是台湾省'
    8. ELSE: BEGIN
    9. END
    10. ENDCASE
    11. END

            注:ELSE不能省略!很多人为了便捷,常常会省略ELSE,也因此造成运行错误(编译不出错),例如:

    1. PRO Test02
    2. ;Print,'请输入一个省,例如江西省'
    3. A = 'Aa省'
    4. CASE (A) OF
    5. '江西省': Print,'输入的是江西省'
    6. '福建省': Print,'输入的是福建省'
    7. '台湾省': Print,'输入的是台湾省'
    8. ENDCASE
    9. END

            错误原因是:案例声明未找到匹配项。Case代码中由于没有可以满足表达式的情况,同时也没有Else,因此会报错!

    例子2:

    1. PRO Test02
    2. ;Print,'请输入一个省,例如江西省'
    3. A = '某某省'
    4. CASE (A) OF
    5. '江西省': BEGIN
    6. Print,'江西省……'
    7. Print,'江西位于……'
    8. END
    9. '福建省': BEGIN
    10. Print,'福建省……'
    11. Print,'福建位于……'
    12. END
    13. '台湾省': BEGIN
    14. Print,'台湾省……'
    15. Print,'台湾位于……'
    16. END
    17. ELSE: BEGIN
    18. Print,'祖国'
    19. Print,'我爱我的祖国'
    20. END
    21. ENDCASE
    22. END

    1.3 Switch语句

             Switch语句类似于Case语句,不同的是,Switch是从满足表达式的那个条件开始运行,一直到最后。语法如下:

    Switch 表达式 OF

        情况1: statement(s)

        ...

        情况n: statement(s)

    [ ELSE: statement(s) ]

    ENDSwitch

    注:statement(s)可以是语句,也可语句块。当时语句块的是否,需要用Begin和End。

    情况n: Begin

            语句块

    End

    1. PRO Test02
    2. ;Print,'请输入一个省,例如江西省'
    3. A = '福建省'
    4. Switch (A) OF
    5. '江西省': BEGIN
    6. Print,'江西省……'
    7. Print,'江西位于……'
    8. END
    9. '福建省': BEGIN
    10. Print,'福建省……'
    11. Print,'福建位于……'
    12. END
    13. '台湾省': BEGIN
    14. Print,'台湾省……'
    15. Print,'台湾位于……'
    16. END
    17. ELSE: BEGIN
    18. Print,'祖国'
    19. Print,'我爱我的祖国'
    20. END
    21. ENDSwitch
    22. END

            运行结果为:

    2. 循环语句

               IDL循环语句有四种:For循环、ForEach循环、While循环以及Repeat循环。

    2.1 For 循环

            For循环是任何编程语言比不可少的程序控制,是最常见的循环方式。

    FOR variable = init, limit [, Increment] DO statement

    FOR variable = init, limit [, Increment] DO BEGIN

       statements

    ENDFOR

    注:Increment表示步长,可以不写,则默认为1

            例如:循环计算1+2+……+8。

    1. PRO Test02
    2. StartNum = 0 ; 开始值
    3. EndNum = 8 ; 结束值
    4. Step = 1 ; 步长(可以不写,默认为1
    5. Sum = 0
    6. FOR index = StartNum, EndNum,Step DO BEGIN
    7. Sum = Sum + index
    8. ENDFOR
    9. Print,Sum
    10. END

            例如:循环计算1~8中奇数的和,只需改变步长即可。 

    1. PRO Test02
    2. StartNum = 0 ; 开始值
    3. EndNum = 8 ; 结束值
    4. Step = 2 ; 步长(可以不写,默认为1
    5. Sum = 0
    6. FOR index = StartNum, EndNum,Step DO BEGIN
    7. Sum = Sum + index
    8. ENDFOR
    9. Print,Sum
    10. END

    2.2 ForEach 循环

            IDL8.0版本之后才有的,也是十分便捷的。FOREACH 语句为输入集(可以是数组、列表或哈希表)的每个元素执行一个或多个语句。 在 FOREACH 循环中,元素的值和(可选)元素对应的索引或键是可用的。

    FOREACH Element, Variable [, Index] DO Statement

    FOREACH Element, Variable [, Index] DO BEGIN

    statements

    ENDFOREACH

    注:如果 Variable 是数组或列表 ,则可选 Index 设置为与当前循环索引对应的整数。 如果 Variable 是哈希表 ,则 Index 设置为当前键值对对应的键。

    下面三段代码都来自官方教程,Variable 分别是数组、列表、哈希表。

    1. >>array = [1, 3, 5, 7, 9, 11, 13, 15]
    2. >>
    3. >>FOREACH element, array, index DO PRINT, 'Index ', index, ' Value = ', element
    4. Index 0 Value = 1
    5. Index 1 Value = 3
    6. Index 2 Value = 5
    7. Index 3 Value = 7
    8. Index 4 Value = 9
    9. Index 5 Value = 11
    10. Index 6 Value = 13
    11. Index 7 Value = 15
    1. PRO Test02
    2. list = List(77.97, 'Galactic', [2, 7, 1, 8, 2])
    3. FOREACH element, List DO BEGIN
    4. Print, 'Value = ', element
    5. ENDFOREACH
    6. END

    运行结果为:

    1. PRO Test02
    2. planets = Hash('Mercury', 0.3e24, 'Venus', 5e24, $
    3. 'Earth', 6e24, 'Mars', 0.65e24, 'Jupiter', 1900e24, $
    4. 'Saturn', 570e24, 'Uranus', 87e24, 'Neptune', 100e24, $
    5. 'Pluto', 0.7e24)
    6. FOREACH mass, planets, key DO Print, key, mass
    7. END

    2.3 While循环

            While 循环是任何编程语言比不可少的程序控制,是最常见的循环方式。

    WHILE expression DO statement

    WHILE expression DO BEGIN

       statements

    ENDWHILE

    注:While循环时,容易陷入死循环(判别式一直为真),使用时,需注意!

    1. PRO Test02
    2. A = 5
    3. WHILE A Gt 0 DO BEGIN
    4. A = A-1
    5. Print,A
    6. ENDWHILE
    7. END

    2.4 Repeat 循环

             Repeat循环需要一直运行,直到满足条件采退出循环,常用于计算时结果需要达到某一种精度才符合要求,结束循环。

    REPEAT statement UNTIL expression

    REPEAT BEGIN

       statements

    ENDREP UNTIL expression

    例如:从1一直往上加,直到结果大于100才停止。

    1. PRO Test02
    2. Sum = 0
    3. i = 0
    4. REPEAT BEGIN
    5. i = i+1
    6. Sum = Sum+i
    7. ENDREP UNTIL (Sum GT 100)
    8. Print,'当加到',i,'时,结果为',Sum,'大于100'
    9. END

    3. 跳转语句

            跳转语句的功能是当执行时跳转至某一位置处。IDL语言中共有三种跳转语句:Break、Continue、GoTo。

    3.1 Break 中断跳转

            Break 表示结束循环。即当运行至这里时,就会马上结束循环。

    1. PRO Test02
    2. FOR i = 0L, 8 DO BEGIN
    3. IF (i EQ 4) THEN BEGIN
    4. BREAK
    5. ENDIF
    6. Print,i
    7. ENDFOR
    8. END

    3.2 Continue 继续跳转

            Continue表示结束本次循环,进入下一次循环。

    1. PRO Test02
    2. FOR i = 0L, 8 DO BEGIN
    3. IF (i EQ 4) THEN BEGIN
    4. CONTINUE
    5. ENDIF
    6. Print,i
    7. ENDFOR
    8. END

    3.3 Goto 进入跳转

            直接跳转到程序特定的一个位置(有具体的标签处), 语法如下:    

            Goto,标签

            ……

            标签:语句                                                   

    1. PRO Test02
    2. FOR i = 0L, 8 DO BEGIN
    3. IF (i EQ 4) THEN BEGIN
    4. Goto,MyLable
    5. ENDIF
    6. Print,i
    7. ENDFOR
    8. MyLable:Print,'Goto跳转至这里'
    9. END

       

  • 相关阅读:
    flutter实践:慎用Expanded
    Anaconda & Jupyter
    牛客练习赛#84 F 莫比乌斯反演+杜教筛+技巧+斐波那契数列和gcd的结论+矩阵快速幂
    python基本语法
    hadoop分布式文件系统
    HTTP RESTFul RPC
    单片机学习笔记---直流电机驱动(PWM)
    Windows10/11:CLion配置WSL(ubuntu)终端完美解读
    Mysql索引详解(图文并茂)
    shell编程基础
  • 原文地址:https://blog.csdn.net/weixin_41649786/article/details/126926817