當前位置:才華齋>IT認證>計算機等級>

C語言程式的結構

計算機等級 閱讀(9.92K)

C語言的運算子包含的範圍很廣泛,共有34種運算子。C語言把括號、賦值、強制型別轉換等都作為運算子處理。下面是小編整理的關於C語言程式的結構,希望大家認真閱讀!

C語言程式的結構

  (1)順序結構

順序結構的程式設計是最簡單的,只要按照解決問題的順序寫出相應的語句就行,它的執行順序是自上而下,依次執行。

例如:a = 3,b = 5,現交換a,b的值,這個問題就好像交換兩個杯子水,這當然要用到第三個杯子,假如第三個杯子是c,那麼正確的程式為:

c = a;

a = b;

b = c;

執行結果是a = 5,b = c = 3如果改變其順序,寫成:

a = b;

c = a;

b =c;

則執行結果就變成a = b = c = 5,不能達到預期的目的,初學者最容易犯這種錯誤。順序結構可以獨立使用構成一個簡單的完整程式,常見的輸入、計算,輸出三步曲的程式就是順序結構,例如計算圓的面積,其程式的語句順序就是輸入圓的'半徑r,計算s = 3.14159*r*r,輸出圓的面積s。

不過大多數情況下順序結構都是作為程式的一部分,與其它結構一起構成一個複雜的程式,例如分支結構中的複合語句、迴圈結構中的迴圈體等。

  (2) 分支結構

順序結構的程式雖然能解決計算、輸出等問題,但不能做判斷再選擇。對於要先做判斷再選擇的問題就要使用分支結構。分支結構的執行是依據一定的條件選擇執行路徑,而不是嚴格按照語句出現的物理順序。分支結構的程式設計方法的關鍵在於構造合適的分支條件和分析程式流程,根據不同的程式流程選擇適當的分支語句。

分支結構適合於帶有邏輯或關係比較等條件判斷的計算,設計這類程式時往往都要先繪製其程式流程圖,然後根據程式流程寫出源程式,這樣做把程式設計分析與語言分開,使得問題簡單化,易於理解。程式流程圖是根據解題分析所繪製的程式執行流程圖。

學習分支結構不要被分支巢狀所迷惑,只要正確繪製出流程圖,弄清各分支所要執行的功能,巢狀結構也就不難了。巢狀只不過是分支中又包括分支語句而已,不是新知識,只要對雙分支的理解清楚,分支巢狀是不難的。下面我介紹幾種基本的分支結構。

  ①if(條件){分支體}

這種分支結構中的分支體可以是一條語句,此時“{}”可以省略,也可以是多條語句即複合語句。它有兩條分支路徑可選,一是當條件為真,執行分支體,否則跳過分支體,這時分支體就不會執行。如:要計算x的絕對值,根據絕對值定義,我們知道,當x>=0時,其絕對值不變,而x<0時其絕對值是為x的反號,因此程式段為:if(x<0)x=-x;

if(條件)

{分支1}

else

{分支2}

這是典型的分支結構,如果條件成立,執行分支1,否則執行分支2,分支1和分支2都可以是1條或若干條語句構成。

如:求ax^2+bx+c=0的根

分析:因為當b^2-4ac>=0時,方程有兩個實根,否則(b^2-4ac<0)有兩個共軛復根。其程式段如下:

main()

{

int a,b,c,d,x,y;

printf("Please put the number of a,b&c from the quadratic equation of one variable one by onen");

scanf("%d%d%d",&a,&b,&c);

d=b*b-4*a*c;

if(d<0)

{

printf("NO Root!Wrong!n");

}

else

{

y=-b-sqrt(d)/2*a;

x=-b+sqrt(d)/2*a;

printf("The 1st equation root=%dnThe 2nd equation root=%d",y,x);

}

}

③IF巢狀分支語句:

其語句格式為:

if(條件1) {分支1}

else if(條件2) {分支2}

else if(條件3) {分支3}

……

else if(條件n) {分支n}

else {分支n+1}

FOR巢狀,其語句格式為:

for(初值A;範圍A;步長A)

{

for(初值B;範圍B;步長B)

{

迴圈體

}

}

FOR巢狀例子:九九乘法表

main()

{

int a,b,c;

for(a=1;a<=9;a++)

{

for(b=1;b<=a;b++)

{

c=b*a;

printf("%dx%d=%d ",b,a,c);

}

printf("n");

}

}

巢狀分支語句雖可解決多個入口和出口的問題,但超過3重巢狀後,語句結構變得非常複雜,對於程式的閱讀和理解都極為不便,建議巢狀在3重以內,超過3重可以用下面的語句。

  ④switch開關語句

該語句也是多分支選擇語句,到底執行哪一塊,取決於開關設定,也就是表示式的值與常量表達式相匹配的那一路,它不同if…else語句,它的所有分支都是並列的,程式執行時,由第一分支開始查詢,如果相匹配,執行其後的塊,接著執行第2分支,第3分支……的塊,直到遇到break語句;如果不匹配,查詢下一個分支是否匹配。這個語句在應用時要特別注意開關條件的合理設定以及break語句的合理應用。

  (3)迴圈結構:

迴圈結構可以減少源程式重複書寫的工作量,用來描述重複執行某段演算法的問題,這是程式設計中最能發揮計算機特長的程式結構,C語言中提供四種迴圈,即goto迴圈、while迴圈、do?Cwhile迴圈和for迴圈。四種迴圈可以用來處理同一問題,一般情況下它們可以互相代替換,但一般不提倡用goto迴圈,因為強制改變程式的順序經常會給程式的執行帶來不可預料的錯誤,在學習中我們主要學習while、do…while、for三種迴圈。

常用的三種迴圈結構學習的重點在於弄清它們相同與不同之處,以便在不同場合下使用,這就要清楚三種迴圈的格式和執行順序,將每種迴圈的流程圖理解透徹後就會明白如何替換使用,如把while迴圈的例題,用for語句重新編寫一個程式,這樣能更好地理解它們的作用。特別要注意在迴圈體內應包含趨於結束的語句(即迴圈變數值的改變),否則就可能成了一個死迴圈,這是初學者的一個常見錯誤。

在學完這三個迴圈後,應明確它們的異同點:用while和do…while迴圈時,迴圈變數的初始化的操作應在迴圈體之前,而for迴圈一般在語句1中進行的;while迴圈和for迴圈都是先判斷表示式,後執行迴圈體,而do…while迴圈是先執行迴圈體後判斷表示式,也就是說do…while的迴圈體最少被執行一次,而while迴圈和for就可能一次都不執行。

另外還要注意的是這三種迴圈都可以用break語句跳出迴圈,用continue語句結束本次迴圈,而goto語句與if構成的迴圈,是不能用break和 continue語句進行控制的。

順序結構、分支結構和迴圈結構並不彼此孤立的,在迴圈中可以有分支、順序結構,分支中也可以有迴圈、順序結構,其實不管哪種結構,我們均可廣義的把它們看成一個語句。在實際程式設計過程中常將這三種結構相互結合以實現各種演算法,設計出相應程式,但是要程式設計的問題較大,編寫出的程式就往往很長、結構重複多,造成可讀性差,難以理解,解決這個問題的方法是將C程式設計成模組化結構。

  (4)模組化程式結構

C語言的模組化程式結構用函式來實現,即將複雜的C程式分為若干模組,每個模組都編寫成一個C函式,然後通過主函式呼叫函式及函式呼叫函式來實現一大型問題的C程式編寫,因此常說:C程式=主函式+子函式。 因此,對函式的定義、呼叫、值的返回等中要尤其注重理解和應用,並通過上機除錯加以鞏固。

  三.掌握一些簡單的演算法

程式設計其實一大部分工作就是分析問題,找到解決問題的方法,再以相應的程式語言寫出程式碼。這就要求掌握演算法,根據我們的《C程式設計》教學大綱中,只要求我們掌握一些簡單的演算法,在掌握這些基本演算法後,要完成對問題的分析就容易了。如兩個數的交換、三個數的比較、選擇法排序和冒泡法排序,這就要求我們要清楚這些演算法的內在含義。