C語言包括三種基本結構:順序結構、分支結構、循環結構。
其實不隻是C語言,很多程式設計語言都支援這三種基本結構。
1、順序結構: 程式由上往下一路執行下來。
參考代碼:
#include <stdio.h>
int main()
{
printf("Code 1\n");
printf("Code 2\n");
// other code ...
printf("Code n\n");
return 0;
}
運作結果:
Code 1
Code 2
Code n
2、分支結構: 根據設定的條件讓程式執行時選擇不同的語句執行。其中,包含 if 和 switch 兩種語句。
2.1、if 可以與 else if 和 else 搭配,參考代碼:
#include <stdio.h>
int main()
{
int a = 10;
// 單個if語句
if(a >= 10)
{
printf("1: a >= 10\n");
}
// if與else搭配
if(a >= 10)
{
printf("2: a >= 10\n");
}
else
{
printf("3: a < 10\n");
}
// "if"、"else if"與"else"搭配:
// "if"必須要有,"else if"語句可以沒有或者有多個,"else"可以沒有
if(a > 10)
{
printf("4: a > 10\n");
}
else if(10 == a)
{
printf("5: a == 10\n");
}
else
{
printf("6: a < 10\n");
}
return 0;
}
運作結果:
1: a >= 10
2: a >= 10
5: a == 10
注意:C語言中規定if-else的配對原則是else字句與其之前最近的未被配對的if結合。 例如以下代碼:
#include <stdio.h>
int main()
{
int x = 0;
int y = 1;
if(x)
if(!x)
y = 10;
else
y = 0;
printf("y = %d\n", y);
return 0;
}
輸出的結果是:
結果或許不是你想要的,這是因為else是與其之前最近未被配對的if結合,它不像Python一樣靠縮進(Tab鍵)來确定配對關系。
以上代碼的的搭配關系實際效果是:
#include <stdio.h>
int main()
{
int x = 0;
int y = 1;
if(x)
{
if(!x)
y = 10;
else
y = 0;
}
printf("y = %d\n", y);
return 0;
}
其實為避免發生類似錯誤,根據實際情景,可适量使用花括号“{ }”來将語句包含起來,不僅關系明确,還友善以後需求進行增加或減少某些代碼。
2.2、switch選擇結構
參考代碼:
#include <stdio.h>
int main()
{
int x = 1;
switch(x)
{
case 0:
printf("x = 0\n");
break;
case 1:
printf("x = 1\n");
break;
case 2:
printf("x = 2\n");
break;
default:
printf("x = 其他\n");
break;
}
printf("switch語句結束!\n");
return 0;
}
輸出結果:
x = 1
switch語句結束!
注意:
① 由于存在資料的精度問題,switch的參數不能為實型;
② 每個條件後面需要檢查是否需要break語句,否則不會跳出switch語句直至執行到break語句或switch執行完畢。當然,break語句不是必須的,反而有時故意不加上break來實作預想效果。
③ 末尾最好加上default語句,即使不需要處理任何事情。如果不加上别人看你的代碼還有可能以為你忘記了哈哈。
例如以下代碼:
#include <stdio.h>
int main()
{
int x = 1;
switch(x)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日");
break;
case 6:
case 7:
printf("周末\n");
break;
default:
printf("錯誤\n");
break;
}
return 0;
}
輸出結果:
工作日
3、循環結構: 通常用來處理重複處理某段代碼。C語言中包含三種常見用法和一種不推薦的goto:
① for循環
for(語句1; 語句2; 語句3)
{
語句4;
// 其他代碼
}
for語句執行的順序是:1243 243 243 2(不符合條件跳出)
語句1通常用來做某些初始化,可以省略,但後面分号“;”不可以省略;
語句2起到判斷作用,如果為真執行方括号“{}”裡面的語句,假則退出循環;
語句3通常用來更新條件;
語句4是循環執行的代碼;
② while循環(先判斷後執行)
while(判斷條件)
{
// 需要重複處理的代碼
}
③ do-while循環(先執行一次之後再判斷)
do{
// 需要重複處理的代碼
}while(判斷條件);
例如以下代碼:
#include <stdio.h>
int main()
{
int x = 0;
int y = 0;
int z = 0;
for(x = 0; x < 3; x++)
{
printf("for循環\n");
}
while(y < 3)
{
printf("while循環\n");
y++; // 别忘了更新y的值
}
do{
printf("do-while循環\n");
z++; // 别忘了更新z的值
}while(z < 3); // 别忘了有分号“;”
return 0;
}
運作結果:
for循環
for循環
for循環
while循環
while循環
while循環
do-while循環
do-while循環
do-while循環
注意:使用循環的時候記得更新條件,也就是上面更新x, y, z的值,否則可能一直循環執行不跳出。
④ goto
goto語句的争論比較激烈。它是無條件跳轉語句,正是因為它的限制很弱,它的功能就很強大,不過它使得代碼的可讀性就變差,是以很久以前就有人主張去掉goto語句。
例如以下代碼:
#include <stdio.h>
int main()
{
int i = 0;
label:
i++;
if(i < 3)
{
printf("i = %d\n", i);
goto label; // 跳到label處執行
}
return 0;
}
運作結果:
i = 1
i = 2
其實這三種結構不隻是C語言中的文法,大多數程式設計語言都支援,如C++、Java等等,隻不過是文法可能會稍微不一樣,但原理性的東西都一樣。