C++ 程序設計課程介紹

 

 我在大學所學東西,在這傾我所有。簡單說是我在大學的課件。也可以說是一個很實用的菜鳥入門課程。課程是IBM教程。§

  

課程介紹

使用書籍
  • IBM C、C++
  • Accelerated C++
       Practical Programming by Example – Andre Koenig, Barbara I. Moo
  • 其他編程工具書,在深入編程後逐步介紹
課程目的和要求
  • 瞭解程序設計的一般方法
  • 掌握編程語言基礎
  • 瞭解面向對象編程的基本概念
  • 培養基礎編碼能力和邏輯思維能力

第一講 C&C++編程介紹

內容安排
 
  • C,C++語言及其他編程語言的介紹
  • 程序設計工具
  • C 語言編程簡介

程序語言的發展過程
  • 0和1。二進制是計算機唯一能識別的和執行的語言
  • 彙編程序語言。符號化的機器語言,用專門的翻譯工具把符號翻譯成機器語言
  • 高級程序設計語言。 接近自然語言和數學表達式。 常用的語言有:Basic,C,C++,Pascal,Java等等,需要翻譯成計算機能夠識別的機器語言。
  • 面向過程的語言(4GL)。只說明要完成一項任務,而不用說名怎樣去做。如SQL
指令:指示不同的對象去完成同一件任務,需要發出不同的指令
程序:一序列的計算機指令,指示計算機去完成一項工作。如:
  • 輸入X
  • 輸入Y
  • 計算X+Y
  • 輸出計算結果
程序語言:程序採用的語言。如:
    • 機器語言 0,1
    • 彙編語言:
    • C,Pascal,C++, JAVA, VB.NET ,C#
    • SQL
程序設計工具的作用
  • 編譯(compile)——將程序翻譯成機器語言
  • 查錯——檢查程序中的拼寫錯誤和語法 錯誤
  • 可視化編程——所見即所得的控件編程
 
主要內容:
1. 簡介
計算機主要用於解決大量的計算性問題--問題繁簡不一:
  • 簡單問題:計算一系列數的平均值
                     計算一定本金的利息收入
  • 複雜問題:如,對聯立微分方程求解
                            計算矩陣的乘積
                            統計詞典中某一詞彙的出現頻率
              包括:辨別個人的指紋或聲音
                     模擬一場戰爭演習的狀況
                     下一局高水平的國際象棋
  • 計算機的功能極爲強大,它可以同時執行好幾個任務。
  • 然而事實上,它仍只是一臺機器,沒有思考的能力。它只能實現由用戶或程序交給它的命令。
  • 程序員不能給計算機性質不明的命令。所以所有命令都應明確且詳細定義過。
  • 算法的概念便應運而生了。
2. 算法
  • 波斯數學家Abu Jafar Mohammed Ibn Musa Al Khwarizmi 在公元二世紀開發出這一方法並驗證其有效;
  • 法國人瞭解此方法後,將之命名爲AlKhwarizmi 或 algorism
  • 這個詞演化爲algorithm,即我們今天所稱之算法
2.1. 算法示例
示例 1.1
假設有三個數字A、B 和C,我們要找出較大的那個:
 S1:獲取這三個數字A、B 和C。
 S2:如果A>B 爲真,則A 是較大的數字。
                     否則較大的數字是B。
 S3:如果第二步中找出的較大數字小於C,則                    現在較大的數字是C。
                     否則,仍是第二步中獲得的較大數字
示例 1.2
              假設我們要判斷所給的整數是不是素
數。一個非負的整數如果不可被除 1 和它自
身以外的數除盡即爲素數。因此,要判斷給
定的整數 n 是否是素數,我們需要檢查 n 是
否可以被 1 到 n 之間的某一整數整除。解決
此問題的算法如下:
S1:通過輸入獲取整數 n。
S2:檢查它是否可以被變量 j 整除,j 的值在 2 到 n-1 之間。
S3:如果 n 可以被 j (2 <= j < n-1) 整除,那麼整數 n 不是素數,否則 n 是素數。
示例 1.3
假設我們要計算二次方程 ax2 + bx + c = 0 的
根,其中係數 a、b 和 c 是輸入值。算法:
       S1: 通過輸入獲取係數 a、b 和 c 的值。
       S2:計算判別式 discriminant = b2 – 4ac。
       S3:如果判別式 discriminant < 0,根爲虛數。運算結束。
       S4: 如果判別式 discriminant = 0,則兩根相等,root1 = root2 = -b/2a。運算結束。
       S5:否則,根爲 –b + sqrt (discriminant)/2a 和 –b - sqrt (discriminant)/2a。
示例 1.4
假設我們要統計元音字母(A、E、I、O、U)在一個文本文件中出現的次數。解決這一問題的過程極爲簡單。每次從文本中抽取一個字符並檢查它是否爲元音字母。如果它是,那麼將之計入特定元音的數量中,否則忽略這個字符。重複此操作,檢查文本中的所有字母。這一過程的算法如下:
S1:將 CounterA、CounterE、CounterI、 CounterO 和 CounterU 的值設爲0。
S2:讀取文本中的第一個字符。
S3:重複下列子布驟直到讀至文本的末尾:
              如果字符 = A 或 a,CounterA 的值加1。
              如果字符 = E 或 e,CounterE 的值加1。
              如果字符 = I 或 i,CounterI 的值加1。
              如果字符 = O 或 o,CounterO 的值加1。
              如果字符 = U 或 u,CounterU 的值加1。
              否則,略過字符。
              讀取下一個字符。
S4:顯示 CounterA、CounterE、CounterI、    CounterO 和 CounterU 的值。
算法示例總結
上述示例演示的算法包括:算術計算、檢驗兩個數值是否相等、有選擇地執行一系列步驟以及根據條件重複定義好的一系列步驟。我們現在開始學習算法的種類。
 
3. 算法的種類
算法可寬泛地分爲三類:
• 有限的,確定性算法
• 有限的,非確定性算法
• 無窮算法
 
3.1. 有限的、確定性算法
這類算法在有限的一段時間內終止。它們可能要花很長時間來執行指定的任務,但仍將在一定的時間內終止。這類算法得出的結果常取決於輸入。換言之,只要知道輸入值,我們就能得出確切的結果。我們在現實生活中遇到的大多數算法都屬於這一類。求二次方程的根、找出 1 到 1000000 之間的所有素數和求方陣的逆矩陣都屬於有限的確
定性算法。
3.2. 有限的、非確定性算法
這類算法在有限的一段時間內終止。然而,對於一個(或一些)給定的輸入,算法的結果並不是唯一的或確定的。
 
例如生成一個隨機數的算法。在數學上有一種經過證明的方法,叫做乘法同餘生成法(multiplicative congruential generator ), 通過如下形式的函數實現:Xi = (aXi-1) mod m,其中 a 和 m 爲遵循一定規則的常數。所涉及的算法爲非確定性算法,因爲通過該算法獲得的結果每每不同。可是,這正達到了該算法的目的,即生成隨機數。
3.3. 無窮算法
是那些由於沒有定義終止條件,或定義的條件無法由輸入的數據滿足而不終止運行的算法。
  • 通常,無窮算法的產生是由於未能正確定義終止條件。
  • 用途:
       1、監控一個核反應堆的溫度(只要反應堆還在工作,這個任務就該持續運作)。此任務會一直運行,直至有一個外部刺激因素使之停止。
       2、列舉無窮小數pi 的所有位。計算 pi 將會得出一個無窮小數。這個算法在數學運算中是極爲有用的。
 
4. 計算機基本組成
  • 《導論》已介紹,在此僅複習帶過
  • 計算機是一種電子設備,它使用算法幫助解決計算問題。
  • 一個現代的計算機系統由處理器、存儲器、輸入/輸出設備的互連繫統組成
 
5. 什麼是計算機程序?
  • 是以一種適合計算機使用的語言表達出來的算法
  • 由一系列經明確定義的無歧義的指令組成。
 例:一個計算兩數相除的程序,由一系列指導計算機如何計算除法的指令組成。輸入這兩個數後,計算機就會在這個程序的幫助下執行這些指令並得出結果。
  • 開發來解決特定的問題的程序稱爲軟件
  • 計算機程序有許多種。一些計算機程序用於協助控制計算機系統的運作並優化資源的使用。它們被稱爲系統程序, 編寫這些程序的人被稱爲系統程序員
  • 還有一些程序,專門爲一個特定的問題或一系列相關的問題提供解決方案。這些程序稱爲應用程序。大多數計算機程序都屬於此類。
  • 應用程序的涵蓋範圍很廣,從計算階乘的簡單程序到解算複雜的差分方程體系的程序、下國際象棋的程序等都在其列。
  • 計算機程序都是用特定的計算機編程語言寫成的。
 
6. 爲什麼我們需要編程語言?
  • 一個算法必須可爲計算機理解。一個程序通過一系列指令來達到這個目的。因此,程序裏的指令必須清晰,定義明確而無歧義。
  • 自然語言(例如英語)的語法過於豐富。語義對於開發者、學習者和使用者而言過於複雜。
  • 爲了保證溝通的清晰與明確編程語言必須毫無歧義。
由此,我們需要一種語法簡單,語義精確,性質明
確的計算機編程語言。
6.1. 編程語言的級別
編程語言有不同的層次:
  • 機器語言
  • 彙編語言
  • 高級語言
  • 面向對象編程語言
  • 過程化語言
6.1.1. 機器語言
  • 最基礎級別,計算機二進制數處理。
  • 用二進制形式編寫的指令稱爲機器語言。 機器語言將一系列命令以二進制形式(0 和 1 的字符串)傳遞給計算機。
  • 計算機的電路可以直接以二進制方式執行這些指令。
6.1.2. 彙編語言
  • 機器語言: 對計算機 è 極爲方便
                      對人類     è 乏味冗長
       表示相加,使用符號“add”
                     比 1000101001010100 更適合人類 。
       同樣,符號“sub”代表減(subtract),“mul”代表乘(multiply)。
  • 彙編語言對每個機器語言指令都有對應的符號(或助記符)。
  • 缺點:使用非常簡單的指令(例如 add、sub、mul、move 等等)編寫程序比較麻煩。
6.2.3. 高級語言
  • 比機器語言或彙編語言更簡單
  • 指令集更接近自然語言,被廣泛使用
  • 語法和語義通過對指令進行明確定義
  • 已有約有數百種高級語言被開發。其流行程度不一。大多數高級語言都是通用語言,例如 C、Pascal、FORTRAN、C++、Java 等等。用於編寫各種應用程序。
  • 高級語言分面向對象編程語言過程化語言 兩類
 
6.1.4 面向對象編程語言
  • 面向對象軟件主要針對對象
  • 對象是一個“設備”,它接收併發送消息
  • 對象實際上包含
              ※ 代碼(一系列計算機指令)和
              ※ 數據(指令要處理的信息)
       通常,代碼和數據分開;
       然而,在一個面向對象編程語言中,代碼和數據
       被融爲一個對象
  • 流行的面向對象編程語言包括 C++ 和 Java。
 
6.1.5 過程化語言:
  • 使用這種語言,編程者必須給計算機一系列必須遵循的步驟,以獲
  • 得所需的輸出。流行的過程化語言包括 Basic、Pascal 和 C。
 
 
 
7. 編譯器
編譯器是一種將輸入的高級語言(例如 C)翻譯爲一系列計算機機器語言的指令的計算機程序。
 
 
8.程序設計工具和程序語言的關係
  • 一種程序設計工具都是針對一種特定語言的。
Vc++                                        -------------------   C++
Delphi                                      -------------------   pascal
Jbuilder eclipse myeclipse    -------------------    java
VS.NET                                   -------------------    VB.NET, C#
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章