分支和循環都可以讓程序中的語句不再從上到下執行,具有這種特性的語句,叫做流程控制語句。
### if分支
分支語句可以在程序執行的時候從幾組語句中選擇一組執行。
在編寫程序的時候,如果遇到多種可能性,任何時候只能選擇一種可能性,這種情況下就可以采用分支解決。
if關鍵字可以用來編寫分支。
if分支里需要為每種可能性編寫專門的處理語句。
每組語句需要一個配對的邏輯表達式。
如果某個邏輯表達式結果為真就執行它對應的語句,其他語句就被忽略了。
只有不可能同時出現多種可能性才可以使用一個分支解決。
如果多種可能性中必然有一種可能性會出現,就可以省略最后一組語句的邏輯表達式和if關鍵字。
/*
if分支演示
*/
#include <stdio.h>
int main(){
int num = 0;
printf("請輸入一個整數:");
scanf("%d", &num);
if (num >= 0){
printf("非負數\n");
}else if (num < 0){
printf("負數\n");
}
return 0;
}
編寫if語句的時候應該把簡單邏輯寫在前面,復雜邏輯寫在后面。
不可以將if分支當做無關的語句。
### switch ... case
使用switch ... case語句也可以編寫分支。
如果一個分支里包含有限個整數,每個整數需要使用專門的語句處理,這種分支可以采用switch ... case格式編寫。
/*
switch ... case 格式練習
*/
#include <stdio.h>
int main(){
int season = 0;
printf("請輸入一個整數:");
scanf("%d", &season);
switch (season) {
case 0:
printf("春天\n");
break;
case 1:
printf("夏天\n");
break;
case 2:
printf("秋天\n");
break;
case 3:
printf("冬天\n");
break;
default:
printf("無法識別的數字。\n");
break;
}
return 0;
}
因為在case的語法塊中,是無法退出后面的代碼的,因此就需要在每個case中加入一個break,break就是代表著退出當前switch語法塊。
### for 循環
for 循環里可以讓一個變量一次代表一組數字,用一組語句分別處理它所代表的每個數字。
這種變量叫做循環變量。
/*
for循環演示
*/
#include <stdio.h>
int main(){
int num = 0;
for (num = 1; num <= 5;num++){
printf("%d ", num);
}
printf("\n");
return 0;
}
如果小括號中間的邏輯表達式沒有寫表示邏輯表達式的結果永遠為真,這種循環不能正常結束,所以叫做死循環。
/*
for循環演示
*/
#include <stdio.h>
int main(){
int num = 0;
for (num = 1;;num++){
printf("%d\n", num);
}
return 0;
}
for循環小括號里最前和最后的部分可以是用逗號連接的多條語句。
/*
for循環演示
*/
#include <stdio.h>
int main(){
int num = 0, num1 = 0;
for (num = 1, num1 = 9;num <= num1;num++, num1--){
printf("%d X %d = %d\n", num, num1, num * num1);
}
return 0;
}
C99規范里允許在小括號中臨時聲明變量,這種變量只能在循環里使用。
/*
for循環演示
*/
#include <stdio.h>
int main(){
for (int num = 1;num <= 5;num++){
printf("%d\n", num);
}
return 0;
}
### goto
goto語句也是流程控制語句。
它可以把任何一條語句指定成下一條語句。
goto語句作用很大,但是副作用也很大,因此一般情況下不應該使用goto語句。
### 多重循環
循環里面還可以包含其他循環,這種循環叫做多重循環。
如果一個問題,可以分解成幾個小問題,每個小問題可以采用類似的循環解決,這種問題就可以采用多重循環編寫。
/*
多重循環演示
*/
#include <stdio.h>
int main(){
int num = 0, num1 = 0;
for (num = 1;num <= 5;num++){
for (num1 = 5;num1 >= num;num1--){
printf("%d", num1);
}
printf("\n");
}
return 0;
}
### while 循環
while關鍵字也可以用來編寫循環,這種循環通常用來解決事先不知道次數的循環。
/*
while 循環演示
*/
#include <stdio.h>
int main(){
int num = 1;
while (num <= 5){
printf("%d ", num);
num++;
}
printf("\n");
return 0;
}
程序反復執行大括號里面的語句,知道邏輯表達式結果為假。
while循環也可以實現死循環。這個時候要提供一個永遠為真的邏輯表達式。
while循環在小括號里的邏輯為假的時候,是不執行大括號里面的語句的。
### do...while 循環
do...while循環必須在小括號后面用分號結束。
do...while循環也是交替執行邏輯表達式的計算和大括號里的語句,但是第一步是先執行大括號里的語句。
do...while循環大括號里的語句至少會執行一次。
/*
while 循環演示
*/
#include <stdio.h>
int main(){
int num = 1;
do {
printf("lanyulei\n");
} while (num == 0);
return 0;
}
### break和continue
**break**
可以在循環里使用`break;`語句終止循環的執行, 使用`continue;`語句退出本次循環。
當執行完break;語句后循環里的所有語句都不再執行,循環變量也不會再改變。
如果循環是采用break;語句結束的,循環結束后循環變量應該落在數字范圍內。
如果編寫循環時不知道循環要重復的次數,就可以寫死循環,在循環里合適的時候用break;語句結束循環。
**continue**
循環里可以是用continue;語句直接跳到循環大括號的末尾,中間的語句這次循環都不執行。