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,則輸出結果如下:
*****
*****