|
楼主 |
发表于 2008-3-22 23:37:22
|
显示全部楼层
########################################
Statement:if switch while do-until for break continue unwind_protect try
########################################
if语句:
if语句有三种基本的形式:
第一种,判断一次,有两个可能的方向:
if (condition)
then-body
endif
condition是一个表达式,用于控制then-body语句是不是执行,如果condition的结果是true则执行。
condition可以是一个数或者是一个向量或者一个矩阵,
如果是一个数的话只有0被认为是false其余看作true,
如果是向量或矩阵的话则只有只有所有元素全部非零时看作true。
第二种,判断一次,但是有三个可能的方向:
if (condition)
then-body
else
else-body
endif
如果condition=true则then-body执行,否则else-body执行。
第三种,可以判断多次,自然也有很多方向:
if (condition)
then-body
elseif (condition)
elseif-body
else
else-body
endif
可以有很多个elseif语句,每个后面的condition=true以后则执行相应的body,如果都是false则执行最后else-body,
只能出现一个else语句,并且只能出现在最后。
########################################
switch语句:
switch语句同样是用来进行判断的,不同的是在进行多重判断的时候比上面介绍的if语句方便一些。
基本形式如下:
switch expression
case label
command_list
case label
command_list
...
otherwise
command_list
endswitch
关键词是switch,case,otherwise,endswitch
label可以是任何的表达式,但是只能有一个值,按照顺序先匹配expression的label对应的command_list会被执行。
至少有一个case label,otherwise语句是可选的。
########################################
while语句:
while主要用于生成循环,基本形式如下:
while (condition)
body
endwhile
执行while语句时,Octave会先判断condition的值,如果是true则执行body,否则不执行body,当执行一次循环以后会再次判断condition来决定是否再次循环。
########################################
do-until语句:
do-until语句也用来产生循环,但是和while语句是有区别的。区别在于这个语句是不停的执行body知道condition=true,并且每次执行一个body以后检查一次condition的值。
基本形式如下:
do
body
until (condition)
body是将要循环执行的语句,condition是是否进行下次训话的判断依据。
do-until和while的于别在于:do-until至少执行一次body,但是while可能一次都不执行body。
########################################
for语句:
for也是用来形成循环的,和上面不同的是for形成的循环次数是已经确定了的,基本形式如下:
for var=expression
body
endfor
body是循环体,expression是任何的合法表达式,var是可能有几种形式,可能是一个值也可能是一个indexed variable。如果expression的值是一个结构,那么var也可能是一个list。
下面这段代码用于生成斐波那奇数,i=3:10指定了循环的次数。
fib = ones (1, 10);
for i = 3:10
fib (i) = fib (i-1) + fib (i-2);
endfor
########################################
break语句:
break语句用于从循环中跳出,
当执行break语句时程序从循环之中跳出来,计算机会停止循环,并执行循环语句后面的部分。
下列代码用来寻找一个给定整数的最小公约数,并且确定素数。
num = 103;
div = 2;
while (div*div <= num)
if (rem (num, div) == 0)
break; %如果if的表达式值为true则开始执行break,从循环语句中跳出来。
endif
div++;
endwhile
%如果一直没有找到最小公约数那么就是一个素数
if (rem (num, div) == 0)
printf ("Smallest divisor of %d is %d\n", num, div)
else
printf ("%d is prime\n", num);
endif
When the remainder is zero in the first while statement, Octave immediately breaks out of the loop. This means that Octave proceeds immediately to the statement following the loop and continues processing. (This is very different from the exit statement which stops the entire Octave program.)
Here is another program equivalent to the previous one. It illustrates how the condition of a while statement could just as well be replaced with a break inside an if:
num = 103;
div = 2;
while (1)
if (rem (num, div) == 0)
printf ("Smallest divisor of %d is %d\n", num, div);
break;
endif
div++;
if (div*div > num)
printf ("%d is prime\n", num);
break;
endif
endwhile
########################################
continue语句:
continue语句很像break语句,都是用于循环语句中,
不过和break的区别是continue并不跳出整个循环,只是进入下一次循环。
########################################
unwind_protect语句:
########################################
try语句:
########################################
Continuation Lines:
在Octave里面,多数的语句以一个换行符为结尾,但是你想输入一个很长的语句那应该怎么办呢?
如果你有一条语句比较长,在一行里面放着比较困难,你就可以用两行或者更多行来写,但是你必须告诉Octave这两行或者这三行是一个语句,方法是在行为输入...或者是\。
比如下面两条的语句是等价的:
x=long_variable_name1...
+long_variable_name2\
+long_variable_name3
x=long_variable_name1+long_variable_name2+long_variable_name3
######################################## |
|