標籤:
C語言中的程式結構有三種,分別是順序結構、選擇結構和迴圈結構。
一、按照語句的先後順序執行的程式結構,稱為順序結構。
下面以一個求三角形面積的例子進行說明,其代碼如下:
例1.1
1 #include<stdio.h> 2 int main() 3 { 4 int width,height,s; 5 printf("請輸入三角形的底寬:\n"); 6 scanf("%d",&width); 7 printf("請輸入三角形的高:\n"); 8 scanf("%d",&height); 9 s=width*height/2;10 printf("三角形的面積為:s=%d\n",s);11 return 0;12 }
程式在執行時,需先輸入三角形的底寬(6行),再輸入高(8行),程式往下執行,計算三角形的面積(9行),最後將面積顯示出來(10行)。這是按照語句的先後順序執行的。
二、根據某種條件的成立與否而採用不同的程式段進行處理的程式結構,稱為選擇結構。
通常選擇結構有兩個分支,條件為真,執行甲程式段,否則執行乙程式段。有時,兩個分支還不能完全描述實際問題(例如將學產生績根據分數高低分成A,B,C,D,E等多個等級),需要分成多個分支,這樣的程式結構稱為多分支選擇結構。
1、if簡單語句
其文法形式如下:
if(運算式)
{語句1}
功能:計算運算式的值,若為“真”,則執行語句1,否則將跳過語句1,執行if語句的下一條語句。
例2.1
1 #include<stdio.h> 2 int main() 3 { 4 int age; 5 scanf("%d",&age); 6 if(age>18) 7 { 8 printf("您已經是成年人了!"); 9 }10 re&turn 0;11 }
上述程式中,首先定義了整型變數age,在輸入age的值之後,根據age的值的大小,來判斷是否為成年人。運行代碼時,假如輸入的數值大於18歲,則輸出”您已經是成年人了!“,否則直接退出程式。
2、if—else語句
其文法形式如下:
if(運算式)
{語句1}
else
{語句2}
功能:計算運算式的值,若運算式的值為”真“執行語句1,並跳過語句2,繼續執行if—else語句的下一條語句,若運算式為假,跳過語句1,執行語句2,然後繼續執行if—else語句 的下一條語句。
例2.2
1 #include<stdio.h> 2 int main() 3 { 4 int age; 5 scanf("%d",&age); 6 if(age>18) 7 { 8 printf("您已經是成年人了!"); 9 }10 else11 {12 printff("您還是未成年人了!");13 }14 re&turn 0;15 }
上述程式與例2.1相比,多了一條語句。在運行代碼時,假如輸入的數值大於18歲,則輸出”您已經是成年人了!“,否則輸出”您還是未成年人!“。
3、嵌套的if語句
在if語句和if—else語句形式中,語句1或語句2可以是任意合法語句。若它們也是if語句,就構成嵌套的if語句。嵌套形式有多種,下面介紹幾種。
嵌套形式1 嵌套形式2 嵌套形式2
if(運算式1) if(運算式1) if(運算式1)
{ { {語句1}
if(運算式2) if(運算式2) else if(運算式2)
{語句1} {語句1} {語句2}
else } else
{語句2} else {語句3}
} {語句2}
else
{語句3}
例2.3:求下列分段函數
當x>0時,y=x+1;當x=0時,y=x;當x<0時,y=x-1;
利用嵌套形式1:
1 #include<stdio.h> 2 int main() 3 { 4 int x,y; 5 scanf("%d",&x); 6 if(x>=0) 7 { 8 if(x>0) 9 {10 y=x+1;11 }12 else13 { 14 y=x;15 }16 }17 else18 {19 y=x-1;20 }21 printf("x=%d,y=%d\n",x,y);22 return 0;23 }
利用嵌套形式2:
1 #include<stdio.h> 2 int main() 3 { 4 int x,y; 5 scanf("%d",&x); 6 y=x; 7 if(x>=0) 8 { 9 if(x>0)10 {11 y=x+1;12 }13 }14 else15 {16 y=x-1;17 }18 printf("x=%d,y=%d\n",x,y);19 return 0;20 }
利用嵌套形式3:
1 int main() 2 { 3 int x,y; 4 scanf("%d",&x); 5 if(x>0) 6 { 7 y=x+1; 8 } 9 else if(x=0)10 {11 y=x;12 }13 else 14 {15 y=x-1;16 }17 printf("x=%d,y=%d\n",x,y);18 return 0;19 }
4、switch語句
其形式如下:
switch()
{
case 常量運算式1:語句1
case 常量運算式2:語句2
……
case 常量運算式n:語句n
default: 語句n+1
}
主意:switch語句常與break連用,break的功能為終止它所在的switch語句。
例2.4根據學產生績的高低劃分等級,代碼如下:
1 #include<stdio.h> 2 int main() 3 { 4 int x; 5 printf("請輸入學產生績:\n"); 6 scanf("%d",&x); 7 switch(x/10) 8 { 9 case 10: 10 case 9:11 printf("A");12 break;13 case 8:14 printf("B");15 break;16 case 7:17 printf("C");18 break;19 case 6:20 printf("D");21 break;22 case 5:23 case 4:24 case 3:25 case 2:26 case 1:27 case 0:28 printf("E");29 break;30 default:31 printf("無效資料!");32 }33 return 0;34 }
上述程式中,先定義一個整型變數x,在輸入x的值後,根據x所在的範圍,確定成績的等級。運行代碼時,假如輸入85,則輸出"B",這表示該學產生績等級為B。若該switch語句中,沒有break語句,則程式會繼續執行下面語句,輸出B、C、D、E。
三、控制一個代碼塊多次執行,知道某個條件被滿足的程式結構,稱為迴圈結構。
C語言中,while語句、do—while語句和for語句是直接控制迴圈過程的迴圈語句。
1、while語句
其文法形式如下:
while(運算式)
{迴圈體語句}
功能:首先計算運算式的值,若為”真“,則執行迴圈體語句,執行完畢後,再計算運算式的值,若仍為”真“,則重複執行迴圈體語句。直到運算式的值為”假“時,結束while語句的執行,繼續執行while語句後面的語句。
下面以求1+2+3+……+100的和為例,說明while迴圈語句的用法。
例3.1
1 #include<stdio.h> 2 int main() 3 { 4 int s,i; 5 s=0; 6 i=1; 7 while(i<=100) 8 { 9 s=s+i;10 i++;11 }12 return 0;13 }
2、do—while語句
其文法形式如下:
do
{迴圈體語句}
while(運算式);
功能:首先執行迴圈體語句,然後檢測迴圈控制條件運算式的值,若為”真“,則重複執行迴圈體語句,否則退出迴圈。
下面以求1+2+3+……+100的和為例,說明do—while迴圈語句的用法。
例3.2
1 #include<stdio.h> 2 int main() 3 { 4 int s,i; 5 s=0,i=1; 6 do 7 { 8 s=s+i; 9 i++;10 }while(i<=100);11 return 0;12 }
3、for語句
其文法形式如下:
for(運算式1;運算式2;運算式3)
{迴圈體語句}
功能:首先計算運算式1的值,然後檢測運算式2的值,若其為“真”,則執行迴圈體語句,執行完畢後,在計算運算式3。然後,再測試運算式2的值是否為“真”,若為“真”,繼續執行迴圈體語句,若為“假”,則終止迴圈。
下面以求1+2+3+……+100的和為例,說明for迴圈語句的用法。
例3.3
1 #include<stdio.h> 2 int main() 3 { 4 int i,s; 5 s=0; 6 for(i=1;i<=100;i++) 7 { 8 i++; 9 }10 return 0;11 }
從例3.1、3.2和3.3可以看出三種迴圈語句可以相互轉化。但是它們也有各自的側重點,應當根據不同的需求,選取適宜的語句。
- while語句和for語句屬於“當型”迴圈,即“先判斷,後執行;而do—while語句屬於“直到”迴圈,即“先執行,後判斷”。
- 實際運用中,for語句多用於迴圈次數明確的問題,而無法確定迴圈次數的問題採用while語句或do—while語句比較自然。
- for語句的三個運算式有多種變化,例如省略部分運算式或全部運算式,甚至把迴圈體也寫進運算式3中,迴圈體為空白語句,以滿足迴圈語句的文法要求。
4、迴圈嵌套
迴圈結構的迴圈體語句可以是任何合法的C語句。若一個迴圈結構的迴圈體中包含了另一個迴圈語句,則構成了迴圈嵌套,稱為多重迴圈。
下面以用*輸出一個矩形為例,說明迴圈嵌套的用法。
例3.4
1 #include<stdio.h> 2 int main() 3 { 4 int i,j; 5 int width,height; 6 printf("輸入矩形的長和寬:\n"); 7 scanf("%d%d",&width,&height); 8 for(i=1;i<=width;i++) //i控制矩形的長 9 {10 for(j=1;j<=height;j++) //j控制矩形的寬11 {12 printf("*");13 }14 printf("\n"); //一行*輸出後換行15 }16 return 0;17 }
上述程式中,首先申請四個變數,分別為i,j,width和height。i和j均作為迴圈控制變數,分別控制矩形的寬和高,當輸入width和height的值時,矩形的寬和高就確定了,最後利用for語句將矩形輸出來。
假如width=5,height=2,則輸出結果如下:
*****
*****
C語言中的程式結構