流程图与程式

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第二章流程圖與程式•流程圖(flowchart)是用來表示演算法(algorithm)或程式執行的過程,是一種常用的方法,讓您能夠輕鬆掌握整個問題的架構。2.1流程圖•流程圖藉著各種不同的圖形以及一些帶有箭頭的直線來表示各種作業或功能,帶有箭頭的直線則表示流向。熟練流程圖技巧,可建立良好的程式設計基楚。•一般常用之流程圖其圖形及帶箭頭的直線如下圖所示。2.2演算法•演算法是指使用有限的指令以解決某一指定問題的步驟,其特性如下:•1。輸入•可以沒有輸入資料,或有多個輸入資料。•2。輸出•至少有一個輸出資料。•3。有限性•演算法必須經過有限步驟執行後停止作業。•4。有效性•可在紙上作業追蹤執行的結果。•5。明確性•每個指令必須明確,不可模稜兩可。•說明演算法常用的方式有三種,文字敘述、演算法語言、流程圖。2.3C語言程式•將演算法或流程圖轉化為C語言程式並不困難,因為演算法或流程圖都已經將解決問題的步驟明白敘述,您只須將每一個步驟使用C語言程式的語法表示出來就是一個C語言的程式了,然後交給電腦去執行,自然就得到答案了。•那麼電腦如何處理您的程式呢?通常要經過「編輯」、「編譯」、「執行」等三個動作。編輯•「編輯」指您根據演算法或流程圖製作一個C語言程式,您可使用任何文字編輯的應用程式,例如Windows裡的記事本、Word、或文書處理程式等軟體,在UNIX或Linux系統您可以使用vi編輯程式等等。C語言程式的附檔名為「.c」,如下面的「例一」程式,它的檔名為「average.c」。編譯•「編譯」指將原始程式轉換為目的程式的動作。原始程式指您所製作的C語言程式,例如average.c,它是人們所看得懂的文件,但目的程式只含由零「0」與一「1」兩個符號所組成的指令,這些指令只有電腦看得懂,也因為電腦看得懂這些指令,電腦才有辦法執行這些指令,執行這些指令的結果就是您要的答案。•若編譯成功會產生一個電腦的可執行檔,例如編譯average.c成功時會產生一個average.exe檔,您直接執行average.exe就可得到答案。您在編譯時可能產生錯誤,這時必須透過編輯程式改正錯誤,改正之後再行編譯,一直到編譯成功時才可以開始執行目的程式。•「執行」目的程式時電腦會輸出執行的結果,輸出的結果可能是正確的答案,也可能是錯誤的資料,當然要找出錯誤的地方加於更正,再一次編譯及執行,總要得到正確的結果才算完成,它的步驟如下圖所示。•【例一】••輸入兩個數a及b,求其平均值avg。••【以文字敘述說明】••1。輸入兩個數分別命名為a及b。•2。總和sum為a及b之和。•3。平均值avg為總和sum除於2的商數。•4。輸出平均值avg。•5。停止。••【以演算法語言說明】••1。INPUTa,b•2。sum←a+b•3。avg←sum/2•4。PRINTavg•5。END以流程圖說明演算法•【程式average.c】••/*****************average.c****************/•#includestdio.h•intmain()•{•doublea,b,sum,avg;•scanf(%lf%lf,&a,&b);/*步驟1*/•sum=a+b;/*步驟2*/•avg=sum/2;/*步驟3*/•printf(%f,avg);/*步驟4*/•return(0);/*步驟5*/•}••【執行結果】••1.03.0Enter[註]輸入兩個數1.03.0後按Enter鍵•2.000000[註]輸出平均值avg=(1.0+3.0)/2•為了說明方便,將程式每一列編號,原來的程式是沒有編號的,編號只為了方便說明而已。••1/*****************average.c****************/•2#includestdio.h•3intmain()•4{•5doublea,b,sum,avg;•6scanf(%lf%lf,&a,&b);/*步驟1*/•7sum=a+b;/*步驟2*/•8avg=sum/2;/*步驟3*/•9printf(%f,avg);/*步驟4*/•10return(0);/*步驟5*/•11}程式average.c中•第5列•doublea,b,sum,avg;•宣告a、b、sum、avg均為浮點數,沒賦予初值,如下圖所示。圖中最大的長方形格子表示電腦的記憶體,程式裡的變數名稱a、b、sum、avg等就好像郵局裡的信箱名稱一樣,一個變數名稱就相當於一個信箱名稱,因此本程式在記憶體儲存五個信箱,它的名稱分別為a、b、sum、avg。變數的值就相當於信箱裡的信件一樣,因為目前信箱裡頭並沒有信件,因此以空白表示。•第6列•scanf(%lf%lf,&a,&b);••從鍵盤輸入二個值,分別置入a、b變數裡,例如您輸入1.03.0等二個值,數值之間最少空一格,輸入最後的數值緊接著按「Enter」鍵,您也可以每輸入一個數值後馬上按「Enter」鍵,如下圖所示。•第7列•sum=a+b;••計算sum=a+b,如下圖所示。圖中除了記憶體之外,還出現一個CPU,CPU是CentralProcessingUnit中央處理單元的意思,記憶體只負責儲存資料,中央處理單元負責處理資料,處理的項目主要包括計算與比較,因此就將a、b的值1.0、3.0從記憶體搬到CPU執行加法計算,其和4.0再從CPU搬到記憶體裡的sum變數,這時sum變數的值就是4.0了。•第8列•avg=sum/2;•計算avg=sum/2,如下圖所示。將sum的值4.0從記憶體搬到CPU執行除法計算,其商2.0再從CPU搬到記憶體裡的avg變數,這時avg變數的值就是2.0了。•第9列•printf(%f,avg);••從記憶體avg處將其內含值2.0以浮點數格式輸出至螢幕,如下圖所示。•第10列•return(0);•表示程式結束了,傳回0值表示正常結束。•【例二】•重複輸入一數num,若num為正數則累加至總和sum,否則印出總和後停止。•【以文字敘述說明】•1。設總和sum為0。•2。輸入一數num。•3。若num為正數,則num加至總和sum後跳至步驟2。•4。輸出總和sum。•5。停止。•【以演算法語言說明】•1。sum←0•2。INPUTnum•3。IFnum0THENsum←sum+num:GOTO2•4。PRINTsum•5。END【以流程圖說明演算法】•【程式sum.c】•/*******************sum.c************************/•#includestdio.h•intmain()•{•doublenum,sum;•sum=0.0;/*步驟1*/•again:•scanf(%lf,&num);/*步驟2*/•if(num0){sum=sum+num;gotoagain;}/*步驟3,4,5*/•printf(%lf,sum);/*步驟6*/•return(0);/*步驟7*/•}•【結果】•1.0Enter[註]輸入一個數1.0後按Enter鍵•3.0Enter[註]輸入一個數3.0後按Enter鍵•-1Enter[註]輸入一個數-1後按Enter鍵•4.000000[註]輸出總和sum=1.0+3.0•為了說明方便,將程式每一列編號,原來的程式是沒有編號的,編號只為了方便說明而已。••1/*****************************sum.c**************************/•2#includestdio.h•3intmain()•4{•5doublenum,sum;•6sum=0.0;/*步驟1*/•7again:•8scanf(%lf,&num);/*步驟2*/•9if(num0){sum=sum+num;gotoagain;}/*步驟3,4,5*/•10printf(%lf,sum);/*步驟6*/•11return(0);/*步驟7*/•12}程式sum.c中:•第5列•doublenum,sum;•宣告num、sum均為浮點數,沒賦予初值,如下圖所示。圖中最大的長方形格子表示電腦的記憶體,程式裡的變數名稱num、sum等就好像郵局裡的信箱名稱一樣,一個變數名稱就相當於一個信箱名稱,因此本程式在記憶體儲存兩個信箱,它的名稱分別為num、sum。變數的值就相當於信箱裡的信件一樣,因為目前信箱裡頭並沒有信件,因此以空白表示。•第6列•sum=0.0;••將0.0指定給sum變數,如下圖所示,相當於將0.0擺入記憶體裡sum的格子裡。•第7列•again:•指定該處為again標記,因為等一下會從程式的某處跳到這裡,因此要給一個名稱,例如高雄縣澄清湖大門口要豎立一個門樓,寫上「澄清湖」三個大字一樣,「澄清湖」就是一個標記,我們的again也是一個標記。••第8列•scanf(%lf,&num);•從鍵盤輸入一個浮點數,置入記憶體num處,例如您輸入1.0後按Enter鍵,如下圖所示。•第9列•if(num0){sum=sum+num;gotoagain;}•將記憶體num處的值1.0取至CPU執行邏輯運算「num0」,結果為true,如下圖所示。••隨即執行sum=sum+num計算,如下圖所示。將sum、num的值0.0、1.0從記憶體搬到CPU執行加法計算,其和1.0再從CPU搬到記憶體裡的sum變數,這時sum變數的值就是1.0了。請注意這個敘述裡有兩個sum變數,因為名稱相同,所以在記憶體裡只設一個sum變數而已,因為屬於變數,因此它的內含值是可以改變的,等號右邊的sum儲存老的值,等號左邊的sum儲存新的值,新的值會蓋掉老的值,因為它只有一個儲存空間而已。•然後回到「gotoagain;」標記為again處繼續執行。•第10列•printf(%lf,sum);•將sum處的值4.0以浮點數格式輸出至螢幕,如下圖所示。•第11列•return(0);•表示程式結束了,傳回0值表示正常結束。

1 / 27
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功