Make
each
day
count
for 敘述是⼀種執行特定次數的迴圈,語法如下:
for (初始計數值; 條件運算式; 更新計數值){
重複作業區塊;
}
int i, total;
for(i = 1; i <= 10; i++){
total += i;
}
如果重複作業區塊只有單行敘述,則可以省略大括號
for(i = 1; i <= 10; i++)
total += i;
計數迴圈for 1/3
4
條件運算式 重複作業區塊
true
false
更新計數值
初始計數值
結束
Make
each
day
count
計算 1 到 50 偶數和
int i, even_sum=0;
for(i = 1; i <= 50; i++){
if (i % 2 == 0) even_sum += i;
}
printf("1到50偶數和為%dn", even_sum);
計數迴圈for 2/3
5
Make
each
day
count
for 迴圏的次數計數也可採用倒數方式
計算 1 到 50 奇數和
int i, odd_sum = 0;
for(i = 50; i >= 1; i--){
if (i % 2 != 0) odd_sum += i;
}
printf("1到50奇數和為%dn", odd_sum);
計數迴圈for 3/3
6
Make
each
day
count
在數論中,水仙花數 (Narcissistic number),也被稱自戀數、自冪數,
用來描述⼀個N位非負整數,其各位數字的N次方和等於該數本身
153是⼀個「水仙花數」,因為153 1 5 3
1634是⼀個「水仙花數」,因為1634 1 6 3 4
列出所有4位數 (1000~9999) 的自戀數
Lab 尋找4位數的自戀數 1/2
7
Make
each
day
count
參考程式
int i, j, k, l, n;
printf("4位數的自戀數:n");
for(n = 1000; n < 10000; n++){
i = n / 1000; //分解出千位數
j = n / 100 % 10; //分解出百位數
k = n / 10 % 10; //分解出十位數
l = n % 10; //分解出個位數
if (n == i*i*i*i + j*j*j*j + k*k*k*k + l*l*l*l)
printf("%-5dn", n);
}
Lab 尋找4位數的自戀數 2/2
8
Make
each
day
count
while 迴圈是在程式區塊的開頭檢查條件,如果條件為 true 才允許進
入迴圈執行,如果⼀直為 true,就持續重複執行迴圈,直到條件 false
為止,語法如下:
while(條件運算式){
重複作業區塊;
}
請注意!在重複作業區塊中⼀定要有程式敘述用來更改條件值到達結束條
件,以便結束迴圈的執行,不然,就會造成無窮迴圈,迴圈永遠不會結束
前測式迴圈while 1/2
9
條件運算式 重複作業區塊
true
false
結束
Make
each
day
count
計算 1 加到多少時的總和會大於等於 255,因為迴圈執行次數需視運
算結果而定,迴圈執行次數未定,我們可以使用 while 條件迴圈來執
行加總計算
int i = 0, sum = 0;
while(sum < 255){
i++;
sum += i;
}
printf("1加到%d時的總和會大於等於255n", --i);
前測式迴圈while 2/2
10
Make
each
day
count
int x, y, r;
int a, b, lcm;
printf("輸入二整數(空白分隔):");
scanf("%d %d", &x, &y);
a = x;
b = y;
while (y != 0) {
r = x % y;
x = y;
y = r;
}
printf("%d與%d的最大公因數為%dn", a, b, x);
printf("%d與%d的最小公倍數為%dn", a, b, a * b / x);
Lab 計算GCD與LCM 4/4
14
Make
each
day
count
do/while 迴圈類似 while 迴圈也是⼀種條件迴圈,只是 while 括號的
條件是在迴圈程式區塊的最後,語法如下:
do {
重複作業區塊;
} while(條件運算式);
注意!因為是程式敘述,所以在 while(條件運算式)括號後需加上「;」分
號
後測式迴圈do/while 1/3
15
條件運算式
重複作業區塊
true
false
結束
必須加分號
Make
each
day
count
do/while 和 while 條件迴圈的主要差異在迴圈條件檢查時機:
while 迴圈在程式區塊開頭先檢查條件,條件為 true 時,才執行之後程式
區塊的程式碼,重複執行直到條件為 false 為止
有可能 while 迴圏的重複作業區塊部份⼀次也不會被執行
do/while 迴圈會先執行程式區塊的程式碼後才在程式區塊後測試條件,執
行次數是持續執行直到條件為 false 為止
do/while 迴圏的重複作業區塊部份⾄少會被執行⼀次
後測式迴圈do/while 2/3
16
Make
each
day
count
for 迴圈與 while 迴圈都是先檢查條件再決定是否執行迴圏程式碼,因
此彼此可以改寫
計算10!,使用for迴圏
int n, factorial = 1;
for(n = 1; n <= 10; n++){
factorial *= n;
}
printf("10!值為%dn", factorial);
計算10!,使用 while 迴圏
int n, factorial = 1;
n = 1;
while(n <= 10){
factorial *= n;
n++;
}
printf("10!值為%dn", factorial);
改寫迴圈 1/2
18
Make
each
day
count
參考程式
int n, i, sum;
int mn, mx;
printf("輸入起始值:");
scanf("%d", &mn);
printf("輸入結束值:");
scanf("%d", &mx);
printf("從%d到%d之間的完美數有:", mn, mx);
for(n = mn; n <= mx; n++){
for(i = 1, sum = 0; i <= n / 2; i++)
if(n % i == 0) sum = sum + i;
if(sum == n) printf("%d ", n);
}
Lab 尋找完美數 2/2
26