官术网_书友最值得收藏!

1.3 程序簡介

計算機程序(Computer Program),或稱為程序(Program),是一組指示計算機或其他具有信息處理能力的設備的每一步操作的指令集合。通常,程序由某種編程語言編寫而成。

如前所述,如果使用機器語言編寫程序,那么計算機就能直接“認識”了。但是,編程者就痛苦了。

用匯編語言,對編程者而言,痛苦程度下降了,但是計算機“不認識”匯編語言,還需要將匯編語言所編寫的程序翻譯為機器語言程序,這個過程被稱為“匯編”,用于執行此過程的程序被稱為“匯編器”。

用匯編語言編寫程序也不是快樂的事情,因為它與機器語言一樣,同屬低級語言。

現在,更多的程序是用高級語言開發的。

計算機更“不認識”高級語言了。所以,用高級語言所編寫的程序同樣要被“翻譯”為機器語言程序,才能被計算機識別和執行。

1.3.1 程序“翻譯”方式

程序的“翻譯”方式有兩種:編譯和解釋。

在說明這兩種“翻譯”方式之前,先定義如下專有術語。

源代碼:用某種高級語言寫的程序就稱為“源代碼”。

源文件:保存源代碼的文件稱為源文件。

本地代碼:計算機(具體就是CPU)能直接執行的機器語言的程序。用任何編程語言編寫的源代碼,最后都要被翻譯為本地代碼,否則CPU不能理解。

(1)編譯

用編譯器(complier,也是一種程序)將源代碼全部翻譯為本地代碼的過程,就是“編譯”。所謂編譯器,則是執行這一過程的程序。

某些編程語言寫的程序需要編譯之后才能被執行,這類語言常被稱為“編譯型語言”,如C、C++、Pascal、Object-C、Swift、Rust等。

(2)解釋

有的程序不需要編譯,在運行它的時候,直接用解釋器(interpreter,也是一種程序)對源代碼進行解釋和執行。

同樣,用于編寫這類程序的編程語言被稱為“解釋型語言”,如BASIC、PHP等。

不論程序用哪種方式被翻譯為本地代碼,程序中的內容都需要按一定規則來編寫,其中最重要的規則就是算法。

1.3.2 算法

算法,比計算機還要古老,雖然它現在常常被放在計算機或者軟件專業來學習,事實上算法的歷史可以上溯到早期文字出現的時候。

其實,讀者應該對算法不陌生。比如,小學數學中的豎式加法(見圖1-3-1)就是一種算法。

編程序如同寫文章,語句相當于文章中的句子,算法則與篇章結構類似。

算法是編寫程序不可或缺的,而且普遍存在于編程過程中。或許因為它廣泛存在,才使得定義它越發困難,所以迄今還沒有一個嚴格的、大家公認的定義,但對它的基本含義還是有一些共識的。

算法(algorithm)是一系列解決問題的清晰指令。也就是說,對于符合一定規范的輸入,程序能夠在有限時間內獲得所要求的輸出(見圖1-3-2)。

img

圖1-3-1 加法的豎式算法

img

圖1-3-2 算法定義

作為“指令”集合的算法傳給computer,computer必須理解此指令,并能按照指令要求進行操作。而computer在很早的時候并不是現在所說的計算機(從構詞法就可以推斷,可能是從事compute工作的人)?;蛘哒f,算法不是必須與編程綁定的。

在著名的《幾何原本》(公元前3世紀歐幾里得著)中記載了最大公約數的算法。其現代方式的表述如下。

假設兩個不全為0的非負整數mnm>n)的最大公約數記為gcd(mn),其計算方法如下。

第一步:如果n=0,返回m的值作為結果,同時結束計算;否則進入第二步。

第二步:m除以n,將余數賦給r,即r=m%n(%是Python中計算余數的符號)。

第三步:令m=nn=r;然后返回第一步。

對于算法的特征,業界基本認同高德納在他的著作《計算機程序設計藝術》一書中的歸納。

①輸入:一個算法必須有兩個或以上輸入量。

②輸出:一個算法應有一個或以上輸出量,輸出量是算法計算的結果。

③明確性:算法的描述必須無歧義,以保證算法的實際執行結果是精確地符合要求或期望,通常要求實際執行結果是確定的。

④有限性:依據圖靈的定義,一個算法是能夠被任何圖靈完備系統模擬的一串運算,而圖靈機只有有限個狀態、有限個輸入符號和有限個轉移函數(指令)。一些定義更規定,算法必須在有限個步驟內完成任務。

⑤有效性:一個算法的任何計算步驟都可以被分解為基本可執行的操作,每個操作都能夠在有限的時間內完成。

算法對于程序開發而言,其重要性是不言而喻的。但因為本書的定位不是算法專門教程,所以,建議讀者可以通過閱讀算法類的專門書籍來學習有關算法知識。

本書的重點還是講述如何用Python語言編寫程序,其間會自然而然地用到算法,不過讀者不必為此擔心。

1.3.3 Hello World

解決同一個問題的程序,通??梢杂貌煌幊陶Z言實現,但是受限于客觀條件,最終會選擇某種語言。在某些項目中也會使用多種語言,不同語言所編寫的程序之間通過“接口”實現數據和業務互通。

因為每種語言都有自己的語法規則,所以程序樣式各異。圖1-3-3展示了利用幾種高級語言打印“Hello World”的程序。

img

圖1-3-3 不同高級語言輸出“Hello World”

不要根據代碼行數評價語言的“好壞”,盡管Python 的“Hello World”最簡短,也不意味著它就具有某種“可炫耀的優越”。因為不同類別的語言有不同的用武之地。

然而,Python的簡潔還是吸引人的。

主站蜘蛛池模板: 万全县| 昌江| 高安市| 沾化县| 文化| 呼伦贝尔市| 锡林郭勒盟| 泸溪县| 台南县| 阳曲县| 海城市| 高邑县| 潞西市| 黔南| 澎湖县| 册亨县| 天长市| 西乌珠穆沁旗| 开江县| 柳河县| 江阴市| 庆元县| 五华县| 卢湾区| 永福县| 北宁市| 抚州市| 拜泉县| 广元市| 东光县| 西安市| 顺平县| 建瓯市| 木兰县| 漳州市| 贞丰县| 平凉市| 黑水县| 莱阳市| 成安县| 屏边|