C語言作為一種廣泛使用的編程語言,其核心控制結構包括循環和分支語句。這些結構不僅構成了程序的基本邏輯框架,還直接影響程序的執行效率和可讀性。本文將深入探討C語言中的循環和分支語句,通過實例分析幫助讀者更好地理解和應用這些控制結構。
循環語句是C語言中用于重復執行某段代碼的結構。常見的循環語句包括for、while和do-while。
for循環for循環是一種常用的循環結構,適用于已知循環次數的情況。其基本語法如下:
for (初始化表達式; 條件表達式; 更新表達式) {
// 循環體
}
實例分析:
#include <stdio.h>
int main() {
for (int i = 0; i < 5; i++) {
printf("i = %d\n", i);
}
return 0;
}
輸出:
i = 0
i = 1
i = 2
i = 3
i = 4
分析:
int i = 0;:初始化表達式,定義并初始化循環變量i。i < 5;:條件表達式,當i小于5時,繼續執行循環。i++:更新表達式,每次循環結束后,i自增1。printf("i = %d\n", i);:循環體,輸出當前i的值。while循環while循環適用于循環次數未知,但循環條件明確的情況。其基本語法如下:
while (條件表達式) {
// 循環體
}
實例分析:
#include <stdio.h>
int main() {
int i = 0;
while (i < 5) {
printf("i = %d\n", i);
i++;
}
return 0;
}
輸出:
i = 0
i = 1
i = 2
i = 3
i = 4
分析:
int i = 0;:初始化循環變量i。while (i < 5):條件表達式,當i小于5時,繼續執行循環。printf("i = %d\n", i);:循環體,輸出當前i的值。i++:更新表達式,每次循環結束后,i自增1。do-while循環do-while循環與while循環類似,但do-while循環至少執行一次循環體。其基本語法如下:
do {
// 循環體
} while (條件表達式);
實例分析:
#include <stdio.h>
int main() {
int i = 0;
do {
printf("i = %d\n", i);
i++;
} while (i < 5);
return 0;
}
輸出:
i = 0
i = 1
i = 2
i = 3
i = 4
分析:
int i = 0;:初始化循環變量i。do { ... } while (i < 5);:循環體至少執行一次,然后根據條件表達式決定是否繼續循環。printf("i = %d\n", i);:循環體,輸出當前i的值。i++:更新表達式,每次循環結束后,i自增1。分支語句用于根據條件選擇執行不同的代碼塊。常見的分支語句包括if、if-else、switch。
if語句if語句用于在滿足條件時執行某段代碼。其基本語法如下:
if (條件表達式) {
// 代碼塊
}
實例分析:
#include <stdio.h>
int main() {
int a = 10;
if (a > 5) {
printf("a is greater than 5\n");
}
return 0;
}
輸出:
a is greater than 5
分析:
int a = 10;:定義并初始化變量a。if (a > 5):條件表達式,當a大于5時,執行代碼塊。printf("a is greater than 5\n");:代碼塊,輸出a大于5的信息。if-else語句if-else語句用于在滿足條件時執行某段代碼,否則執行另一段代碼。其基本語法如下:
if (條件表達式) {
// 代碼塊1
} else {
// 代碼塊2
}
實例分析:
#include <stdio.h>
int main() {
int a = 3;
if (a > 5) {
printf("a is greater than 5\n");
} else {
printf("a is less than or equal to 5\n");
}
return 0;
}
輸出:
a is less than or equal to 5
分析:
int a = 3;:定義并初始化變量a。if (a > 5):條件表達式,當a大于5時,執行代碼塊1。printf("a is greater than 5\n");:代碼塊1,輸出a大于5的信息。else { ... }:當a不大于5時,執行代碼塊2。printf("a is less than or equal to 5\n");:代碼塊2,輸出a不大于5的信息。switch語句switch語句用于根據變量的值選擇執行不同的代碼塊。其基本語法如下:
switch (表達式) {
case 常量1:
// 代碼塊1
break;
case 常量2:
// 代碼塊2
break;
...
default:
// 默認代碼塊
}
實例分析:
#include <stdio.h>
int main() {
int a = 2;
switch (a) {
case 1:
printf("a is 1\n");
break;
case 2:
printf("a is 2\n");
break;
case 3:
printf("a is 3\n");
break;
default:
printf("a is not 1, 2, or 3\n");
}
return 0;
}
輸出:
a is 2
分析:
int a = 2;:定義并初始化變量a。switch (a):根據a的值選擇執行不同的代碼塊。case 1::當a等于1時,執行代碼塊1。printf("a is 1\n");:代碼塊1,輸出a等于1的信息。break;:跳出switch語句。case 2::當a等于2時,執行代碼塊2。printf("a is 2\n");:代碼塊2,輸出a等于2的信息。break;:跳出switch語句。case 3::當a等于3時,執行代碼塊3。printf("a is 3\n");:代碼塊3,輸出a等于3的信息。break;:跳出switch語句。default::當a不等于1、2或3時,執行默認代碼塊。printf("a is not 1, 2, or 3\n");:默認代碼塊,輸出a不等于1、2或3的信息。為了更好地理解循環和分支語句的應用,下面通過一個綜合實例進行分析。
實例:
編寫一個程序,要求用戶輸入一個整數,判斷該整數是否為素數(質數),并輸出結果。
代碼實現:
#include <stdio.h>
int main() {
int num, i, flag = 0;
printf("Enter a positive integer: ");
scanf("%d", &num);
if (num <= 1) {
printf("%d is not a prime number.\n", num);
return 0;
}
for (i = 2; i <= num / 2; i++) {
if (num % i == 0) {
flag = 1;
break;
}
}
if (flag == 0) {
printf("%d is a prime number.\n", num);
} else {
printf("%d is not a prime number.\n", num);
}
return 0;
}
分析:
輸入處理:
printf("Enter a positive integer: ");:提示用戶輸入一個正整數。scanf("%d", &num);:讀取用戶輸入的整數并存儲在變量num中。邊界條件處理:
if (num <= 1):如果num小于等于1,直接輸出num不是素數,并結束程序。素數判斷:
for (i = 2; i <= num / 2; i++):從2開始遍歷到num的一半,檢查num是否能被i整除。if (num % i == 0):如果num能被i整除,設置flag為1,并跳出循環。結果輸出:
if (flag == 0):如果flag為0,說明num是素數,輸出相應信息。else:否則,輸出num不是素數的信息。示例運行:
Enter a positive integer: 29
29 is a prime number.
Enter a positive integer: 15
15 is not a prime number.
在實際編程中,循環和分支語句經常需要嵌套使用,以實現更復雜的邏輯。
實例:
編寫一個程序,輸出1到100之間的所有素數。
代碼實現:
#include <stdio.h>
int main() {
int i, j, flag;
for (i = 2; i <= 100; i++) {
flag = 0;
for (j = 2; j <= i / 2; j++) {
if (i % j == 0) {
flag = 1;
break;
}
}
if (flag == 0) {
printf("%d ", i);
}
}
return 0;
}
分析:
外層循環:
for (i = 2; i <= 100; i++):遍歷2到100之間的所有整數。內層循環:
for (j = 2; j <= i / 2; j++):檢查當前整數i是否為素數。if (i % j == 0):如果i能被j整除,設置flag為1,并跳出內層循環。結果輸出:
if (flag == 0):如果flag為0,說明i是素數,輸出i。示例運行:
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
在循環中,有時需要提前結束循環或跳過某次循環。C語言提供了break和continue語句來實現這些功能。
break語句break語句用于立即終止當前循環,跳出循環體。
實例分析:
#include <stdio.h>
int main() {
int i;
for (i = 0; i < 10; i++) {
if (i == 5) {
break;
}
printf("i = %d\n", i);
}
return 0;
}
輸出:
i = 0
i = 1
i = 2
i = 3
i = 4
分析:
for (i = 0; i < 10; i++):循環從0到9。if (i == 5):當i等于5時,執行break語句。break;:立即終止循環,跳出循環體。continue語句continue語句用于跳過當前循環的剩余部分,直接進入下一次循環。
實例分析:
#include <stdio.h>
int main() {
int i;
for (i = 0; i < 10; i++) {
if (i == 5) {
continue;
}
printf("i = %d\n", i);
}
return 0;
}
輸出:
i = 0
i = 1
i = 2
i = 3
i = 4
i = 6
i = 7
i = 8
i = 9
分析:
for (i = 0; i < 10; i++):循環從0到9。if (i == 5):當i等于5時,執行continue語句。continue;:跳過當前循環的剩余部分,直接進入下一次循環。在實際編程中,合理使用循環和分支語句可以提高程序的執行效率和可讀性。以下是一些優化建議:
減少循環次數:
提前終止循環:
break語句提前終止循環,避免不必要的迭代。避免嵌套過深:
使用switch語句代替多重if-else:
switch語句可以提高代碼的可讀性和執行效率。C語言中的循環和分支語句是構建程序邏輯的基礎。通過本文的實例分析,讀者可以更好地理解和應用這些控制結構。在實際編程中,合理使用循環和分支語句,可以提高程序的執行效率和可讀性。希望本文的內容能夠幫助讀者在C語言編程中更加得心應手。
注: 本文中的代碼實例均在GCC編譯器下測試通過,讀者在實際編程中可根據需要進行調整和優化。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。