通過goto語句學習if...else、switch語句並簡單優化


goto語句在C語言中實現的就是無條件跳轉,第二章一上來就介紹goto語句就是要通過goto語句來更加清楚直觀的了解控制結構。

我理解的goto語句其實跟switch語句有相似之處,都是進行跳轉。不同的是goto語句是進行無條件的跳轉,執行到這一句的時候直接就跳轉了,而switch語句是要進行一個判斷之后才能進行跳轉。例如:

下面是用switch語句寫的一個程序

 1 #include <stdio.h>
 2  int main(void)
 3  {
 4  char score;
 5  scanf("%c",&score);
 6  switch(score){
 7  case 'A':
 8  printf("excellent\n");
 9  break;
10  case 'B':
11 printf("good\n");
12  break;
13  case 'C':
14  printf("pass\n");
15  break;
16  default:
17 printf("fail\n");
18 }
19  return 0;
20  }

 

下面是用偽代碼寫的用goto語句實現上面switch語句的功能。

 

 1 #include <stdio.h>
 2 int main(void)
 3 {
 4     code * lab[] = { lab_a,lab_b,lab_c };
 5     char score;
 6     scanf("%c", &score);
 7     if (score>'C')
 8         goto lab_default;
 9     score -= ’A’;/*score減去A的值為目的標號在跳轉表數組中的下標*/
10     goto_lab[score];
11 lab_a:
12     printf("excellent\n");
13     goto done;
14 lab_b:
15     printf("good\n");
16     goto done;
17 lab_c:
18     printf("pass\n");
19     goto done;
20 lab_default:
21     printf("fail\n");
22 done:
23     return 0;
24 }

 

 

從上面兩個程序中我們可以看出來switch語句是要與()內的score進行判斷來進行跳轉的,如果是’A’,跳轉到printf(“”excellent\n);等等,而goto語句是執行到lab[score]這一句的時候,直接跳轉去執行lab[score]:。從這就可以看出來goto語句是無條件的跳轉。switch語句和if…else語句都屬於分支結構,但是兩者之間是有差別的,如下用goto語句寫的if…else循環。

 1 #include <stdio.h>
 2 int main(void)
 3 {
 4 int a,b;
 5 int t;
 6 scanf(“%d%d”,&a,&b);
 7 t=a>b;
 8 if(t==1)
 9 goto true;
10 printf(“a is lower than b\n”);
11 goto done;
12 true:
13 printf(“a is higher than b\n”);
14 done:
15 return 0;
16 }

 

 

if…else語句和switch語句記性對比會發現,switch語句需要提前定義一個數組,這就是一個標號數組,也就是switch語句的跳轉表,根據case后邊的標號直接去執行標號對應的程序,而if…else語句需要多次比較才會找到要執行的程序。這樣對比就會發現switch語句的執行速度要比if…else快,但是通過對比也發現switch語句需要額外的存儲空間去存儲標號數組。不同的控制結構對於執行程序的效率影響很大,因此需要注意對於控制結構的優化。

if…else語句是要先判斷再執行,需要進行對比之后才能進行執行。根據它的這個特點我們可以進行優化,盡量少進行判斷就執行,比如統計一篇英文文章字母的個數和標點符號的個數。如果先判斷是不是標點符號,再判斷是否是英文字母的話,每統計一個英文字母都要進行兩次判斷,英文文章中出現英文字母的概率最大,因此先判斷是否是英文字母就能提高這個程序的效率。

對於條件分支比較多的程序,一般來說switch語句的效率會高一點,但是在有些情況下if..else語句會更合適一點,特別是在與數字進行比較的時候,比如判斷是否10~100之間時,用if…else語句會好一點。也就是說在一個區間范圍內進行對比的時候,if…else語句會更方便一點。

總的來說了解了if…else語句和switch語句的本質,注意對分支結構的優化,在以后的編程中對於提高程序的效率有很大的幫助。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM