全名:Muhammad ibn Musa al-Khwarizmi 穆罕默德·伊本·穆薩·花拉子密 (大約780年—850年),波斯-阿拉伯著名的數學家和天文學家。代數的創始人,現代數學的重要奠基人。曾任“巴格達智慧之家”大學士,翻譯,鑽研,總結如阿基米德,歐幾里德等希臘數學家的著作後發表著名的《代數論》。至此開闢了現代數學兩大門類之一的代數(Algebra,即阿拉伯文的‘平衡’之意)。
花拉子密被認為被第十代哈裡發——穆塔瓦基勒(在位847——861)即位后推行強硬伊斯蘭教法后遭到迫害,普遍認為他死於西元850年。事實上瓦基勒早在穆阿台綏姆末期就掌握大權並推行伊斯蘭教法造成大量學者出走或被迫流亡,被視為歐洲文藝復興的原因之一,同時終結了阿拔斯王朝的黃金時代。
算法(Algorithm)是指一組有限的、可行的步驟,用於解決特定類型的問題。一個演算法應滿足以下特性:
演算法方法論可以總結為三大步驟(注意:這三步並非獨立存在,彼此相關聯):
ALGORITHM(算法):
PROGRAMMING LANGUAGE(程式設計語言):
C語言誕生於1972年由 鄧尼斯·麥卡利斯泰爾·裡奇(英語:Dennis MacAlistair Ritchie,1941年9月9日—2011年10月12日) 和 肯尼斯·藍·湯普遜(英語:Kenneth Lane Thompson,1943年2月4日—) 為了移植,開發UNIX,於貝爾實驗室,基於B語言開發。
而C++是1983年基於C語言,由丹麥數學家,計算機科學家比雅尼·斯特勞斯特魯普 ( Bjarne Stroustrup 1950年12月30日— )開發而來。
值得一提的是,大量的C語言的Unix消費者,也包括C語言之父湯普遜並不喜歡C++,認為它繁瑣。更令人難以忍受的是,C++還將程式的本身分為了“函數Fonction”與“過程 Procedure”兩類(這是一個很重要的概念,但今天與我們的主題無關暫且不表)。巧的是,不僅是他們這麼認為,用C++的人和設計C++的人也是這麼認為的。
儘管如此,C++ 的廣泛應用不可否認。它被稱為“一用就罵,罵完就用”的工業程式設計語言,承載著現代工業軟體開發的許多任務。
在 C 語言中,平均值的計算通常使用 scanf 和 printf 實現輸入和輸出。它們基於格式化字串,雖然語法簡單直接,但需要手動管理輸入輸出的格式,不夠靈活。
在 C++ 中,則使用 cin 和 cout 進行輸入輸出。cin 和 cout 是基於流的輸入輸出機制,提供了更現代化的介面,且更加面向物件。但它們的語法略顯冗長,例如需要通過 ‘<< ’ 和‘ >>’ 操作符分隔輸入輸出。
在 C++ 中,#include 是一個預處理指令,表示在編譯之前將指定的頭文件內容包含到程式中。 是一個標準庫標頭檔,它提供了輸入輸出流(input/output stream)的功能。通過它,我們可以使用 cin 和 cout 進行輸入輸出操作。值得注意的是,iostream 是由 io(input/output)和 stream(流)兩個部分組成的,而不是 ios-tream,和蘋果無關。
隨後的:
using namespace std;翻譯為:使用/using 命名空間/namespace 標準/std, (stand)的簡寫。std 是 C++ 標準庫的命名空間,包含了常用的標準庫功能,比如 cin、cout 和 vector 等。
什麼是命名空間?舉個例子:
一覺醒來的老白終於穿越到了他夢想的國度——蘇聯。還成了一名光榮的蘇聯紅軍戰士。老白高興地走在路上,迎面也走來一名軍人。
軍人:你哪個部隊的?
老白:我是一營二連二排三班的!
對面的軍人Bia一槍就把老白給斃了說:“我就是我就是一營二連二排的排長,我沒見過你!你一看就是契丹人派來的間諜!”
蘇聯解體之後終於真相大白,源瀨老白(不是錯別字)是另一個團一營二連二排三班的。團就是命名空間的一種。
順便科普一個軍事常識,絕大多數情況下當有人問某個人是“哪個部隊的”,在全世界絕大多數情況下這個“部隊”都是指“團或及其以下。(即時號碼)”
類似地,命名空間也是用來區分不同“团”的機制。例如:
命名空間的作用是為了區分不同模組中的同名物件,避免命名衝突。類似於“部隊編號”系統,能夠確保每個代碼模組都有唯一的標識。
程式執行過程的記憶體分佈代碼解釋
main函數 float a, b; // 聲明局部變數 (棧區)
cin >> a >> b; // 從輸入緩衝區獲取數據
cout << (a + b) / 2 << endl; // 輸出平均值
return 0; // 棧區釋放
一看中文,你就懵逼了。但在英語種stack的含義十分清晰而且直觀。就是堆疊的意思。例如
stack on,指飛機降落,尤其是體型龐大的客機或運輸機。
更有意思的是,程式設計中擁有一個原則,後進先出(LIFO),也和它的直觀感受一樣符合程序運行原理。
如上圖,最下面的是Ice-bear,他是最先進入‘棧’的,其次是胖達(Panda),Grizz灰熊是最後一個入棧,入棧被稱為push。而它們要下來(出棧)的話則是相反,Grizz先下,胖達隨後,Ice-bear最後,這個被叫做“出棧”,英語即pop,這就是程序中所謂的“後進先出”(LIFO Last In First Out )原則。
舉個例子:你在寫文章,修圖片的時候不小心誤操作下意識地按下CTRL+Z,這就是棧的經典的應用,回溯上一步操作的行為叫做pop/出棧,記錄上一步操作叫做push/入棧。
每次你的操作都會進入記憶體,簡稱入棧(push)就像你輸入HELLO的時候
此時,棧底 [H, E, L, L, O] 棧頂
CTRL+Z,即將O彈出(pop),稱為出棧,從而回到
HELL
總結
完
今天沒有作業,因為快超字數了。下一課我們來講演算法和C++的布爾運算,變數,常量類型,書寫規範以及語法。
推薦讀物,可以幫你瞭解pseudocode的書寫規範:
偽代碼(加拿大滑鐵盧大學)
Pseudocode: An Introduction (偽代碼,介紹),西密歇根大學,英語