結構化程序的三種基本結構可以用框圖和流程線表示,但當程序較複雜時,流程線自然會增多,從而導致程序的結構不清晰,不便於閱讀。美國學者I.Nassi和B.Shneiderman於1973年提出了一種新的繪製流程圖的方法N-S圖,它是以這兩位學者名字的首字母命名的。N-S圖的重要特點就是完全取消了流程線,這樣算法被迫隻能從上到下順序執行,從而避免了算法流程的任意轉向,保證了程序的質量。
3.結構化程序設計方法
結構化程序設計強調程序結構的規範化,提倡清晰的結構。當麵臨一個複雜的問題時,人們往往不可能一開始就能了解問題的全部細節,更不用說立刻寫出一個結構清晰、算法正確的程序。那怎樣才能得到一個結構化的程序呢?一般采取以下四種方法:自頂向下、逐步細化、模塊化、結構化編碼。從這四個方法可以看出,結構化程序設計的基本思想是將一個完整的、較複雜的問題分解成若幹相對獨立的、較簡單的子問題。若這些子問題還較複雜,可再分解它們,然後針對分解後的子問題逐一進行分析、求解和編碼。
具體地說,當需要求解一個實際問題即使是劃分後的子問題時,怎樣才能編寫出程序呢?
本小節中我們隻是介紹描述算法的工具和結構化程序設計的方法,並沒有涉及到要求解的具體問題,在後續的小節中我們將針對特定的實例,給出問題的算法描述和編寫程序的具體過程。
在學習C語言的具體語法之前,先通過簡單的C語言程序示例來初步了解C語言程序的基本結構。下麵幾個程序示例由易到難,它們體現了C語言源程序在組成結構上的特點。雖然有關語法內容還未介紹,但可從這些例子中了解到一個C語言源程序的基本組成部分和書寫格式。
[例21]在屏幕上顯示“VeryGood”。
#include
/*編譯預處理命令*/
voidmain()/*主函數*/
{
printf("VeryGood\n");/*main函數調用庫函數printf輸出字符*/
}
運行結果:
VeryGood
程序分析:
(1)程序中的main()被稱為主函數,任何一個C語言程序有且隻有一個main函數。main()後麵由一對花括號“{}”括起來的部分稱為函數體,程序從main函數的第一條可執行語句開始執行。
(2)本例中函數體內隻有一條語句printf("VeryGood\n");該語句由函數調用和分號兩部分組成。printf函數的作用一般是將雙引號中的內容原樣輸出,“\n”是換行符,即在輸出“VeryGood”後換行,分號表示該語句的結束。
(3)“/*”與“*/”之間的內容構成了C語言程序的注釋部分,它可以是任何可以顯示的字符,可以是一行也可以是多行,不影響程序的編譯和運行。在程序中插入適當的注釋,可以使程序更容易被理解。
(4)程序中的#include是文件包含命令,其意義是把尖括號“”內指定的文件包含到本程序中。一般情況下,如果使用了係統提供的庫函數,那麼應在程序的開始用#include命令將被調用的庫函數信息包含到本文件中。本例中main函數中調用的printf函數是C語言提供的標準輸出函數,需要係統文件stdio.h解釋執行。需要說明的是,TurboC規定對scanf和printf兩個函數可以省去頭文件包含命令,所以本程序中第一行的#include可以省略。
經過以上的分析,我們可以清晰地理解例21程序的功能就是利用printf函數在屏幕上顯示一行字符信息。接下來我們思考一下怎樣讓字符信息分行顯示,也就是說讓例21中的“Very”和“Good”兩個單詞分兩行進行輸出,要達到這個功能很簡單,因為我們在上麵提到過“\n”的功能是實現換行,所以隻要在例21的基礎上稍作修改就可以實現,具體程序代碼見例22。
[例22]在屏幕上分行顯示“VeryGood”。
voidmain()
{
printf("Very\nGood\n");/*“\n”可以實現換行功能*/
}
運行結果:
Very
Good
以上兩個程序非常簡單,main函數的函數體內隻有一條語句,下麵我們將介紹稍微複雜的程序例23,該程序仍由一個main函數組成,但函數體中包含了變量說明、算術運算和格式輸出。
[例23]計算三個整數之和。
voidmain()
{
inta,b,c,sum;/*定義整型變量a,b,c,sum*/
a=12;
b=34;
c=56;/*分別給a,b,c賦值*/
sum=a+b+c;/*將a,b,c之和放入sum變量*/
printf("a+b+c=%d\n",sum);/*在屏幕上輸出計算結果*/