天天看點

C語言:三種常用基本結構

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等等,隻不過是文法可能會稍微不一樣,但原理性的東西都一樣。

繼續閱讀