第2章 程式的靈魂 演算法

2021-08-23 13:40:03 字數 3995 閱讀 8263

前面的話:

這是給幾個高中的興趣班講解譚浩強的《c程式設計》第三版的講義之節選,實際講解時使用了10個道具盒子演示計算過程。另外,例子的解釋選取了2.1、2.3、2.4這3個比較典型的,最後用譚浩強先生書上的幾個簡單的例子給出了關於什麼是結構化的程式設計方法的解釋

去掉了s2後,演算法的功能保持不變哦!!!!!!!

面向過程的結構化程式設計的一般性解題方法:

假想現在你是乙個老師,希望讓你的小學學生為你完成乙個題目的計算,但是, 並不想告訴他解決的是什麼問題,你,可以把題目分解成簡單到只有+ - x / 步驟的命令表,讓他照表上的命令從頭到尾執行完,把結果給你。這時,他並不知道這個命令表的目的,但你的結果拿到了。。。。。,這就是程式設計。

給程式設計序打個比方:

乙個只會加減乘除的小學生,現在你要讓他幫助你求某些數字的最大公約數.

有幾種辦法可選

1.教會他求最大公約數的方法

2.把求解方法分解成他現在就能馬上能計算的若干步,讓他按照步驟作,不用告他在求解什麼,只要正確的按步驟求解出結果就可以了.

顯然,方法2這個小學生更容易上手.

對於機器而言,你只能選擇方法2,因此,在讓機器運算以前,你必須對計算的每一步十分了解,並確保正確,因此,你必須首先具體到機器能理解的每一步,這也是學習程式設計方法的精髓所在.........

電腦就是機器,它的智力並不能理解上面求某些數字的最大公約數的例子,同時也不會理解諸如: 給出乙個百分制成績,要求輸出成績等級,a,b,c,d,e. 90以上為a,80-89為b,70-79為c,60-69為d,60以下為e的問題。。。。。。,但是我們可以將求解的過程分解成它能理解並執行的+、-、x、/、比大小等命令的列表,如何分解成這樣的列表呢?

看一下下面給成績分級的例子,求解它的機器命令列表生成的全過程。

例子: 給出乙個百分制成績score,要求輸出成績等級,a,b,c,d,e. 90以上為a,80-89為b,70-79為c,60-69為d,60以下為e.

1、 好,現在,我給你乙個分數95 ,你能判斷的出他的成績等級嗎? 當然 ,是a。

2、 好,現在,我給你乙個分數85 ,你能判斷的出他的成績等級嗎? 當然 ,是b。

3、 好,現在,我給你任乙個分數 ,你能判斷的出他的成績等級,並寫在黑板上嗎? 當然,那麼,告訴我你是如何做的?

你會,這樣描述給我:

設,有乙個分數變數

當給定此變數乙個百分制分數時

如果 分數<=100 同時 分數》=90 寫下 a

否則 如果 分數》=80 寫下 b

否則 如果 分數》=70 寫下 c

否則 如果 分數》=60 寫下 d

否則 如果 分數》=0 寫下 e

否則 寫下 給錯分數了

4、 好,現在把上面的這段話翻譯成英文:

float score

input a float data -----> score

if score<=100 and score>=90 then write a

else if score>=80 then write b

else if score>=70 then write c

else if score>=60 then write d

else if score>=0 then write e

else write down "input data error!!!!!!!!!!!"

這個時候的表達,已經很接近計算機可以理解的c程式了(畢竟計算機是起源於美國,他能理解的東西更接近英語)。

5、由於計算機c語言的write是printf,因此繼續進行語法規範如下:

float score; /*設有乙個變數score*/

scanf("%f",&score); /*給出乙個百分制成績score的值*/

if (score<=100&&score>=90) printf("a");

else if (score>=80) printf("b");

else if (score>=70) printf("c");

else if (score>=60) printf("d");

else if (score>=60) printf("d");

else if (score>=0) printf("e");

else printf("input data error!!!!!!!!!!!");/* 輸入資料錯誤》100或<0 */

這個時候的表達,已經是計算機可以理解的c程式了。

6、在加上計算機可理解的簡單程式所須的格式:

開頭是: #include

void main()

最終程式如下:

#include

void main()

最終的程式完成了,這就是計算機可以理解的命令列表-------程式,其中只含有計算機可以理解執行的簡單的命令。

從上面可以得出計算機程式設計的一般性的程式設計解題方法:

1、你自己先解題目,就象上面的1、2步

這個步驟達到的目的是:讓你充分的了解題目,也就是對它的求解過程的全面接觸

2、記錄下你解決問題的過程

的每一步並整理,就象上例中的第3步(最重要的步驟

盡量只使用 + - x / 和比較大小以及所需資料的輸入和輸出命令。

這個步驟達到了乙個重要的目的:

你寫下的解題步驟,交給任何乙個識字並且會比大小的人,比如乙個小學生,他不理解這些步驟的最終目的,但是只要嚴格按照步驟進行,就能得出正確的最後結果。

3、接下來的第4、5、6步,就是翻譯成英語和規範成c語言了。

注意:綠色的大大的過程兩個字,傳達了乙個資訊,編制程式的出發點和目標就是發現並記錄下你自己在解決問題時採用的步驟的全部,即解決問題的全過程,對程式設計序再次做乙個簡單的比喻:你見過擺骨牌的嗎?設定好全部前後順序,然後推倒第乙個骨牌, 你就不用管了,剩下的事情它自己完成,程式設計序就象是從頭到尾擺骨牌。執行程式就象是推倒第乙個骨牌,而程式就象是骨牌倒下的全過程,結果就是最後呈現在你面前的骨牌圖案。計算機的智慧型是極其有限的,各種程式就是我們人的思想在計算機中的再現,這種再現能指揮計算機工作。你的任務就是再現要完成的任務的全部過程。

因此我們編制小型程式就是在尋找這個過程,找到了它,你的任務也就差不多完成了,這就叫

面向過程

類別:譚浩強 c程式設計 |

1045) |

第2章 程式的版式

一 空行 1 每個類宣告和函式定義結束之後都要加空行 2 邏輯上密切相關的語句之間不加空行 二 行 1 一行 只做一件事 這在python中顯得尤為重要 2 if for while do等語句獨自佔一行,不論有多少執行語句都要加 3 盡可能在定義變數的同時初始化該變數 三 行內的空格 1 關鍵字之...

第2章程式的基本結構

2.1初始化 使用如下 建立乙個程式例項 from flask import flask 2.2路由和檢視函式 def index return 稱index 為檢視函式,其返回的響應可以是包含html的簡單字串,也可以是複雜的表單。但一般不在python 中嵌入響應字串,因為會導致 難以維護。支援...

第4章 程式的控制結構

0401.輸入乙個年份,輸出是否為閏年。閏年條件 能被4整除但不能被100整除,或者能被400整除的年份都是閏年。0401 n eval input if n 4 0 and n 100 0 or n 400 0 print 年是閏年 format n else print 年不是閏年 format...