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 else 11 { 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 else 13 { 14 y=x; 15 } 16 } 17 else 18 { 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 else 15 { 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可以看出三種循環語句可以相互轉化。但是它們也有各自的側重點,應當根據不同的需求,選取適宜的語句。
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,則輸出結果如下:
*****
*****