if-else
功能:根據條件的真假,執行不同的程式碼塊。
範例:
#include <stdio.h>
int main() {
int x = 10;
if (x > 5) {
printf("x 大於 5\n");
} else if (x == 5) {
printf("x 等於 5\n");
} else {
printf("x 小於 5\n");
}
return 0;
}
if
會先進行(x > 5)的判斷,如果False,會進行後續的else if
判斷,並且else
用來捕捉剩餘的例外情況。功能:根據條件的值,選擇對應的執行分支。
範例:
#include <stdio.h>
int main() {
int choice = 2;
switch (choice) {
case 1:
printf("選擇了 1\n");
break;
case 2:
printf("選擇了 2\n");
break;
case 3:
printf("選擇了 3\n");
break;
default: //用來捕捉例外情況
printf("無效選擇\n");
}
return 0;
}
// 輸出 選擇了 2
switch
要注意一點,如果我們沒有在做完程式內容後添加break
關鍵字,則會執行後續分支。範例:
#include <stdio.h>
int main() {
int choice = 2;
switch (choice) {
case 1:
printf("選擇了 1\n");
break;
case 2:
printf("選擇了 2\n");
//break;
case 3:
printf("選擇了 3\n");
//break;
default:
printf("無效選擇\n");
//break;添加不添加都可
}
return 0;
}
/* 輸出
選擇了 2
選擇了 3
無效選擇
*/
其他用法:我們可以判斷一個區間作為條件式的判斷(有些編譯器可能不接受),如下所示:
#include <stdio.h>
int main() {
int choice = 8;
switch (choice) {
case 1 ... 3: //範圍1-3
printf("選擇了 1\n");
break;
case 4 ... 6: //範圍4-6
printf("選擇了 2\n");
break;
case 7 ... 9: //範圍7-9
printf("選擇了 3\n");
break;
default:
printf("無效選擇\n");
break;
}
return 0;
}
/* 輸出
選擇了 3
*/
我們先用一張圖來看一下迴圈怎麼運作的?迴圈很好理解,就像下圖中的流程圖所示,圖看懂的話,就了解迴圈了。
for
迴圈、while
迴圈、do-while
迴圈,接下來個別介紹:範例:
#include <stdio.h>
int main() {
for (int i = 1; i <= 5; i++) {
printf("i 的值是: %d\n", i);
}
return 0;
}
// 以上是一個簡單的示範
/* 輸出
i 的值是: 1
i 的值是: 2
i 的值是: 3
i 的值是: 4
i 的值是: 5
*/
其中,for迴圈的結構如下所示
for (int i = 1(初始化); i <= 5(條件判斷); i++(更新表達式)) {
// 內容
}
另外,更新表達式除了遞增,也可以遞減、或是做其他運算。
範例:
#include <stdio.h>
int main() {
int sum = 0, i, j;
for (i = 1; i <= 5; i++) {
for (j = 5; j >= i; j--) {
sum += i + j;
}
}
printf("sum = %d\n", sum);
return 0;
}
/* 輸出
sum = 90
*/
另外迴圈中,可以同時初始化多個變數。
範例:
#include <stdio.h>
int main() {
for (int i = 0, j = 10; i < 5; i++, j--) { // 初始化 i 和 j,並在每次迴圈執行後分別增加和減少
if(i+1==5) //最後一行執行完不換行
{
printf("i = %d, j = %d", i, j);
}
else
{
printf("i = %d, j = %d\n", i, j);
}
}
return 0;
}
/* 輸出
i = 0, j = 10
i = 1, j = 9
i = 2, j = 8
i = 3, j = 7
i = 4, j = 6
*/
範例2:
#include <stdio.h>
int main() {
for (int x = 0, y = 1; x + y <= 10; x++, y += 2) { // 初始化 x 和 y,並根據條件控制執行
printf("x = %d, y = %d, sum = %d\n", x, y, x + y);
}
return 0;
}
/* 輸出
x = 0, y = 1, sum = 1
x = 1, y = 3, sum = 4
x = 2, y = 5, sum = 7
x = 3, y = 7, sum = 10
*/
範例3:
#include <stdio.h>
int main() {
int i = 0; // 初始化變數 i,賦值為 0
// for 迴圈,初始化部分被省略,但不影響程式執行,因為 i 已在 main 中定義並初始化。是合法的
for (; i < 5; i++) {
// 這裡是空的迴圈主體,不做任何事,但迴圈一樣會繼續執行
}
// 迴圈結束後,輸出 i 的值
printf("%d", i); // 輸出變數 i 的值,數值為5
return 0; // 返回 0,表示程式執行成功
}
這邊簡單示範,依樣照著圖片的流程走,很容易就能知道輸出長甚麼樣:
#include <stdio.h>
int main() {
int x = 1;
while (x <= 5) {
printf("x 的值是: %d\n", x);
x++;
}
return 0;
}
/* 輸出
x 的值是: 1
x 的值是: 2
x 的值是: 3
x 的值是: 4
x 的值是: 5
*/
簡單示範: 要知道do-while
迴圈至少會執行一次迴圈內容,因為do-while
先執行後判斷。
範例1:
#include <stdio.h>
int main() {
int i = 0; // 初始化變數 i,值為 0
do {
printf("i = %d\n", i); // 每次都輸出 i 的值
i++; // i 遞增 1
} while (i < 5); // 當 i < 5 時繼續執行迴圈
return 0;
}
/* 輸出
i = 0
i = 1
i = 2
i = 3
i = 4
*/
範例2:
#include <stdio.h>
int main() {
int number;
do {
printf("請輸入一個正數: ");
scanf("%d", &number);
} while (number <= 0); // 如果輸入的數小於等於 0,則重複提示輸入
printf("您輸入的正數是: %d\n", number);
return 0;
}
/* 輸出
請輸入一個正數: -1
請輸入一個正數: 0
請輸入一個正數: 1
您輸入的正數是: 1
*/
break
和continue
break
用於強制跳出目前的迴圈或 switch
結構。
範例(找到第一個被 7 整除的數字):
#include <stdio.h>
int main() {
int number = 1;
while (1) { // 無限迴圈
if (number % 7 == 0) {
printf("Found a number divisible by 7: %d\n", number);
break; // 跳出迴圈
}
number++;
}
printf("Loop ended.\n");
return 0;
}
continue
用於跳過本次迴圈的剩餘部分,直接開始下一次迴圈。
範例(僅印出 1 到 10 中的奇數):
#include <stdio.h>
int main() {
int number;
for (number = 1; number <= 10; number++) {
if (number % 2 == 0) {
continue; // 偶數時跳過本次迴圈
}
printf("Odd number: %d\n", number);
}
printf("Loop ended.\n");
return 0;
}