10/09/2006

3.5 While 迴圈

while與for最大不同點在於前者係依某種條件結束迴圈,故無法如for執行時可預知其迴圈數目。While 迴圈之其型式如下:



while expression
{statements};
end




在while後面之expression只要其評估結果為真,此迴圈會繼續執行,因此無法確知其執行次數,為此有時必須另設計數器計算次數。有時為使其形成永久迴圈,亦可採用while 1,…end之型式,使迴圈永遠有效。此時必須有特殊狀況才能跳出,或停電關機才能終止。前面之例子中,已有示範如何使用while...end這個迴圈。茲再以計算前N個自然數和之例說明:


% cumsumx.m for demonstration
N = 50;
n = 0;
sum = 0; %先設定儲存變數
while N>=n, %只要n 小於50,下面之指令陳述繼續執行
n = n+1;
sum = sum+n;
end
sum

sum=

1275


上面程式執行後,其值應為1275。此小程式中可以得知大寫的N與小寫的n是兩個不相干的變數。故大小寫的變數不能混淆,否則會有很大的麻煩。

下面的範例為利用while…end計算一台機器所能處理之最小值。這個最小值因電腦軟體不同而異,在MATLAB中有一個常數eps是直接可以拿來使用,如:

>>eps

eps=

2.2204e-016

此處用程式亦可計算該值:


% epsilon.m for demonstration
eps =1;
while (1+eps) >1
eps=eps/2;
end
eps=eps*2;

>>epsilon
eps = 2.2204e-016

其結果相同。此處之while…end則是評估(1+eps) >1之真偽決定結果,直到eps小到電腦無法分辨其大小為止。