📅  最后修改于: 2023-12-03 15:18:05.595000             🧑  作者: Mango
Octave 中的循环和控制语句能够帮助程序员实现复杂的算法和逻辑。本文介绍 Octave 中的 for 循环、while 循环、if 语句、switch 语句和 break/continue 语句。
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 (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 (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 (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 语句用于中止 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 中的循环和控制语句的语法和用法,并给出了一些示例。掌握这些技巧将有助于实现复杂的算法和逻辑。