遊戲開發相關,C++教程(一)
更新于:2025-03-26 07:50:51

1. ALGORITHM INTRODUCTION /演演演演演演演算法簡介

  • 單詞解釋:Algorithm(法語algorithme)通常意義上被翻譯成“算法”或“演算法”。 “算法”一詞源自波斯數學家花拉子密的名字(Al-Khwarizmi)。他撰寫的《代數》(al-jabr)奠定了代數學的基礎,其研究成果也對計算技術產生了深遠影響。他的著作經翻譯傳入歐洲後,“algorithm”一詞逐漸演變為“算法”的代名詞,指代解決問題的一系列邏輯步驟

全名:Muhammad ibn Musa al-Khwarizmi 穆罕默德·伊本·穆薩·花拉子密 (大約780年—850年),波斯-阿拉伯著名的數學家和天文學家。代數的創始人,現代數學的重要奠基人。曾任“巴格達智慧之家”大學士,翻譯,鑽研,總結如阿基米德,歐幾里德等希臘數學家的著作後發表著名的《代數論》。至此開闢了現代數學兩大門類之一的代數(Algebra,即阿拉伯文的‘平衡’之意)。

花拉子密被認為被第十代哈裡發——穆塔瓦基勒(在位847——861)即位后推行強硬伊斯蘭教法后遭到迫害,普遍認為他死於西元850年。事實上瓦基勒早在穆阿台綏姆末期就掌握大權並推行伊斯蘭教法造成大量學者出走或被迫流亡,被視為歐洲文藝復興的原因之一,同時終結了阿拔斯王朝的黃金時代。
  • 1.1 Algorithm definition/演算法的定義

算法(Algorithm)是指一組有限的、可行的步驟,用於解決特定類型的問題。一個演算法應滿足以下特性:

  • 通用性:能夠解決某一類問題,而非單一問題。
  • 有限性:演算法必須在有限的步驟內結束。
  • 明確性:每一步操作必須清晰、無歧義。
  • 可執行性:每一步操作都能夠被執行,最終得到結果。
  • 1.2 Algorithm properties /演算法的屬性:可讀性,通用性,精確性,簡潔性,結構性。
  • 演算法的五大屬性
  • 可讀性:演算法的邏輯應當清晰易懂,即使是非專業人士也能通過簡單解釋理解其核心思想。
  • 通用性:演算法應具有抽象性,能夠適用於不同的程式設計語言和環境。
  • 精確性:每一步都必須明確且無歧義,能夠被精確執行。
  • 簡潔性:應盡量精鍊,避免複雜的冗餘步驟。如果演算法過於複雜,可以分解為多個子演算法。
  • 結構性:演算法應具有清晰的模組化設計,便於理解和實現。
  • 1.3 Algorithm method/演算法方法論

演算法方法論可以總結為三大步驟(注意:這三步並非獨立存在,彼此相關聯):

  1. 輸入(INPUT):確定問題的性質與範圍,描述其基本要素。通常包括整數、實數、字串、陣列等數據類型。
  2. 輸出(OUTPUT):明確問題的目標,即希望得到的結果。例如求和、求餘、排序、嵌套等。
  3. 方法(PROCESS):通過一系列的邏輯步驟,從輸入得出輸出。常用的方法包括條件判斷(if-else)、迴圈(for/while)、遞歸等。
  • 1.4 ALGORITHM VS PROGRAMMING LANGUAGE

ALGORITHM(算法)

  • 一系列明確的、有限的指令,用於解決某類問題。
  • 用抽象的語言描述,按邏輯順序執行。
  • 與具體程式設計語言無關,但可以被任何程式設計語言實現。

PROGRAMMING LANGUAGE(程式設計語言)

  • 人與機器的橋樑,用於將演演算法翻譯為機器可以理解的指令。
  • 提供語法和語義,用於編寫過程、函數或模組以執行演算法。
  • 不同語言適用於不同的應用場景,例如 C 適用於系統程式設計,Python 適用於快速開發。例如【平均數】
  • ALGORITHM(實例演示為偽代碼) & PROGRAMMING LANGUAGE(以C++示例):

2.THE INSTRUCTION, THE SEQUENCE OF ALGORITHIC/演算法的指令與序列

  • 2.1 指令/THE INSTRUCTION
  • 程式中的一個步驟
  • 指示計算機在執行下一條指令之前需要執行的操作
  • 基本操作
  • 由處理器理解和執行
  • 2.2 序列/THE SEQUENCE
  • 一系列按順序執行的指令,在所有處理情況下都按它們的書寫順序執行
  • 由開始和結束(即bloc)界定
  • 開始
  • 指令1
  • 指令2
  • 指令N
  • 結束

3.C與C++相關

  • 3.1C與C++的歷史:

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++ 的廣泛應用不可否認。它被稱為“一用就罵,罵完就用”的工業程式設計語言,承載著現代工業軟體開發的許多任務。

  • 3.2 C與C++的異同,以求a+b的平均值為例

在 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的含義十分清晰而且直觀。就是堆疊的意思。例如

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

總結

  • Push(入棧): 將數據放到棧的頂部。
  • Pop(出棧): 從棧的頂部取出數據。

今天沒有作業,因為快超字數了。下一課我們來講演算法和C++的布爾運算,變數,常量類型,書寫規範以及語法。

推薦讀物,可以幫你瞭解pseudocode的書寫規範:

偽代碼(加拿大滑鐵盧大學)

Pseudocode: An Introduction (偽代碼,介紹),西密歇根大學,英語

開展科普實踐活動
開展科普實踐活動
2025-03-31 12:32:28
聯想“橫掃”AI市場
聯想“橫掃”AI市場
2025-04-03 04:50:43