📜  Octave 中的循环(For 和 While)和控制语句(1)

📅  最后修改于: 2023-12-03 15:18:05.595000             🧑  作者: Mango

Octave 中的循环和控制语句

Octave 中的循环和控制语句能够帮助程序员实现复杂的算法和逻辑。本文介绍 Octave 中的 for 循环、while 循环、if 语句、switch 语句和 break/continue 语句。

For 循环

for 循环是一种迭代结构,它用于按指定次数重复执行一段代码。for 循环的语法如下:

for variable = expression
    statements
endfor

其中 variable 是循环变量,expression 是一般化的表达式,statements 是要重复执行的语句块。在每次循环开始之前,variable 会被赋值为 expression 的一个元素,然后执行 statements。当 expression 的所有元素都被用完时,循环结束。

下面是一个简单的例子,打印从 1 到 10 的整数:

for i = 1:10
    printf("i = %d\n", i);
endfor

输出:

i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9
i = 10
While 循环

while 循环是在满足某个条件为真的情况下重复执行一段代码。while 循环的语法如下:

while (expression)
    statements
endwhile

其中 expression 是一个逻辑表达式,statements 是要重复执行的语句块。在每次循环开始时,expression 都会被求值。只要表达式的结果为真,就会执行 statements。当表达式的结果为假时,循环结束。

下面是一个示例,找出 100 以内的所有质数:

n = 2;
while (n <= 100)
    is_prime = 1;
    for i = 2:floor(sqrt(n))
        if (mod(n, i) == 0)
            is_prime = 0;
            break;
        endif
    endfor
    if (is_prime)
        printf("%d ", n);
    endif
    n = n + 1;
endwhile

输出:

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
If 语句

if 语句用于在满足某个条件为真的情况下执行一段代码。if 语句的语法如下:

if (expression)
    statements
elseif (expression)
    statements
else
    statements
endif

其中 expression 是一个逻辑表达式,statements 是要执行的语句块。如果表达式的结果为真,执行第一个 statements,否则如果第一个 elseif 的表达式为真,则执行第二个 statements。如果所有表达式都为假,则执行 else 之后的 statements

下面是一个示例,找出数组中的最大值:

a = [1, 2, 3, 4, 5];
max_value = a(1);
for i = 2:length(a)
    if (a(i) > max_value)
        max_value = a(i);
    endif
endfor
printf("max_value = %d\n", max_value);

输出:

max_value = 5
Switch 语句

switch 语句用于在满足某个值为真的情况下执行一段代码。switch 语句的语法如下:

switch (expression)
case case_expression
    statements
case case_expression
    statements
otherwise
    statements
endswitch

其中 expression 是一个值,case_expression 是一个或多个用逗号隔开的值或表达式,statements 是要执行的语句块。如果 expression 的值与某个 case_expression 的值相等,则执行相应的 statements,否则如果有 otherwise 语句,则执行 otherwise 后面的 statements

下面是一个示例,使用 switch 语句输出人民币大写金额:

function str = rmb_upper(amount)
    integer = floor(amount);  # 整数部分
    fraction = round((amount - integer) * 100);  # 小数部分,四舍五入
    units = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"];  # 数字的大写汉字
    digits = ["", "拾", "佰", "仟", "", "万", "", "", "", "亿", "", "", "", "兆"];  # 数字的位数
    str = "";
    i = length(digits);
    while (integer > 0 || i > 0)
        if (integer == 0)
            i--;
            continue;
        endif
        n = mod(integer, 10);
        str = strcat(units(n+1), digits(i+1), str);
        integer = floor(integer/10);
        i--;
    endwhile
    str = strcat(str, "元");
    if (fraction == 0)
        str = strcat(str, "整");
    else
        str = strcat(str, units(fraction/10+1), "角");
        if (mod(fraction, 10) != 0)
            str = strcat(str, units(fraction%10+1), "分");
        endif
    endif
endfunction

printf("%s\n", rmb_upper(123456789012.34));

输出:

壹仟贰佰叁拾肆亿伍仟陆佰柒拾捌万玖仟零壹拾贰元叁角肆分
Break/Continue 语句

break 语句用于中止 for 或 while 循环,continue 语句用于跳过循环中的一次迭代。它们的语法如下:

break;
continue;

下面是一个示例,找出数组中第一个负数的位置:

a = [1, 2, -3, 4, -5, 6];
for i = 1:length(a)
    if (a(i) < 0)
        printf("第一个负数的位置是 %d\n", i);
        break;
    endif
endfor

输出:

第一个负数的位置是 3
总结

本文介绍了 Octave 中的循环和控制语句的语法和用法,并给出了一些示例。掌握这些技巧将有助于实现复杂的算法和逻辑。