1.1 程序設計
1.1.1 程序設計與算法
計算機通過程序來完成數據處理任務。程序是為了實現一個特定的任務而設計的,不同的任務需要不同的程序來完成。
1.程序
簡單地講,程序就是計算機處理數據、獲取信息的工作規程,主要定義了數據的邏輯結構和程序運行的步驟。數據是計算機獲取信息的基礎,程序規定了計算機處理的各環節所需要的一個有序的工作流程。程序是靜態的,程序只有被計算機“認識”和“理解”,數據才能被計算機處理,才能完成數據到信息的加工以及相應的任務。不同的程序可以完成不同的工作,所以處理不同的問題就需要不同的程序。著名科學家Nicklaus Wirth提出了公式“算法+數據結構=程序”,并因此而獲得了全球計算機界的最高獎——圖靈獎,可見這個公式對計算機科學產生的影響有多大,它用一個公式展示出了程序的本質。
算法是計算機執行計算過程的具體描述,也就是描述計算機如何將輸入一步步轉化為所要求的輸出的過程。
數據結構是計算機處理過程中數據的組織方式。常見的數據組織方式有:數組、鏈表、隊列、堆棧、數據庫、文件等。
下面通過一個例子,了解什么是算法,算法要注意什么問題。請大家思考一個問題:如何求1×2×3×…×8×9的值。
(1)最原始的方法:
步驟1:先求1×2,得到結果2。
步驟2:將步驟1得到的乘積2乘以3,得到結果6。
步驟3:將6再乘以4,得24。
步驟4:將24再乘以5,得120。
步驟5:將120再乘以6,得720。
步驟6:將720再乘以7,得5040。
步驟7:將5040再乘以8,得40320。
步驟8:將40320再乘以9,得362880。
這就是一個算法,雖然正確,但太麻煩。
(2)改進的算法:
S1:1→t;
S2:2→i;
S3:t×i→t;
S4:i+1→i;
S5:ifi≤9,then返回S3;else算法結束。
這個算法簡單、快捷、效率高,它也適用于同類相似的問題,如計算100!只需將“S5:若i≤9”改成“i≤100”即可。
同一問題可用不同的算法解決,而一個算法的質量優劣將影響到算法乃至程序的效率。算法的評價標準主要包括時間復雜度、空間復雜度、正確性、可讀性和健壯性,關鍵是時間和空間復雜度。
2.程序設計
程序設計是指設計、編寫和調試程序的方法與過程。程序設計一般應該包括:分析問題、設計算法、編寫程序、運行程序分析結果、整理文檔等5個環節。
(1)分析問題:對要解決的問題進行認真分析,研究所給定的條件,分析最后應達到的目標,找出解決問題的規律,選擇解題的方法。
(2)設計算法:設計出解決問題的方法和具體步驟。
(3)編寫程序:將算法書寫成計算機可以“認識”的代碼的過程。計算機只認識“0”和“1”,即機器語言。但是,通過編譯程序或解釋程序計算機就可以“認識”多種高級語言,比如:C語言、C++、Java等。
(4)運行程序分析結果:運行程序,可以得到運行結果。能得到運行結果并不意味著程序正確,要對結果進行分析,看它是否合理,同時要分析算法是否合理,不合理要對程序進行調試,即通過上機發現、修改程序中的錯誤及故障。
(5)整理文檔:程序具有可共享性和兼容性,所以要對程序進行必要的整理。內容應包括:程序名稱、程序功能、運行環境、程序的裝入和啟動、需要輸入的數據,以及使用注意事項等。
1.1.2 程序設計語言
程序設計語言形象地說就是計算機“能聽懂的話”,它是用來描述程序設計的過程,是人與計算機之間相互通信的工具;它是由一組符號和一組規則構成的。程序設計語言從發展歷程來看可以分為以下四代:
1.第一代——機器語言
機器語言是由二進制0、1代碼指令構成,不同的CPU具有不同的指令系統,所有的地址分配都是以絕對地址的形式處理。因此它具有代碼不易記憶、程序編寫麻煩,維護復雜、用戶需要對存儲空間進行分配、編程效率極低等缺點。
2.第二代——匯編語言
匯編是機器指令的符號化,與機器指令存在著直接的對應關系,同時增加了一些功能,例如宏、符號地址等。匯編語言同樣存在著難學難用、容易出錯、維護困難等缺點。但匯編語言具有可直接訪問系統接口、匯編程序翻譯成的機器語言程序效率高等優點,所以在高級語言不能滿足設計要求或不具備支持某種特定功能的技術性能(如特殊的輸入/輸出)時,匯編語言也會被使用。
3.第三代——高級語言
高級語言是面向用戶的、獨立于具體計算機結構的語言,在形式上接近于算術語言和自然語言;高級語言不能直接被執行,在運行前需編譯成相應的機器語言。高級語言的一個命令可以代替幾條、幾十條甚至幾百條匯編語言的指令。因此,高級語言明顯優于匯編語言,易學易用,通用性強,應用廣泛。
C語言屬于第三代語言,其功能豐富,表達能力強,有豐富的運算符和數據類型,使用靈活方便,應用面廣,移植能力強,編譯質量高,目標程序效率高。同時,C語言還具有低級語言的許多特點,如允許直接訪問物理地址,能進行位操作,能實現匯編語言的大部分功能,可以直接對硬件進行操作等。用C語言編譯程序產生的目標程序,其質量可以與匯編語言產生的目標程序相媲美,具有“可移植的匯編語言”的美稱,成為編寫應用軟件、操作系統和編譯程序的重要語言之一。
4.第四代(4GL)——非過程化語言
4GL是非過程化語言,更像英語,與自然語言非常接近;是面向應用、為最終用戶設計的一類程序設計語言,兼具過程性和非過程性的兩重特性。它具有縮短應用開發過程、降低維護代價、最大限度地減少調試過程中出現的問題以及對用戶友好等優點。4GL有數據庫查詢語言、程序生成器等。
選擇適宜的程序設計語言可使編寫代碼困難減少,可讀性、可測試性、可維護性較好。為了使程序容易測試和維護,所選用的程序設計語言應該具有模塊化機制、可讀性較好的控制結構和數據結構;為了便于調試和提高軟件可靠性,所選用的程序設計語言應該能夠盡可能多地發現程序中的錯誤;為了降低軟件開發和維護成本,所選用的程序設計語言應該具有良好的獨立編譯機制。
實際工程中選擇程序設計語言時,還應考慮系統用戶的要求、編譯程序、軟件工具、工程規模、可移植性、應用領域以及程序員的知識。
- VMware View Security Essentials
- PyTorch自動駕駛視覺感知算法實戰
- INSTANT Weka How-to
- Mastering Scientific Computing with R
- JavaScript 程序設計案例教程
- C# 8.0核心技術指南(原書第8版)
- Java系統化項目開發教程
- Python深度學習:模型、方法與實現
- Cybersecurity Attacks:Red Team Strategies
- 小程序,巧應用:微信小程序開發實戰(第2版)
- Kivy Cookbook
- Machine Learning With Go
- Learning Splunk Web Framework
- Windows Phone 8 Game Development
- Python深度學習與項目實戰