《《譚浩強C程序設計》PPT課件》由會員分享,可在線閱讀,更多相關《《譚浩強C程序設計》PPT課件(33頁珍藏版)》請在裝配圖網上搜索。
1、C+程 序 設 計中國高等院校計算機基礎教育課程體系規(guī)劃教材譚浩強 編著 總 目 錄第 1篇 基 本 知 識第 1章 C+的 初 步 知 識第 2章 數 據 類 型 與 表 達 式第 2篇 面 向 過 程 的 程 序 設 計第 3章 程 序 設 計 初 步第 4章 函 數 與 預 處 理第 5章 數 組第 6章 指 針第 7章 自 定 義 數 據 類 型 第 3篇 基 于 對 象 的 程 序 設 計第 8章 類 和 對 象第 9章 關 于 類 和 對 象 的 進 一 步 討 論第 10章 運 算 符 重 載第 4篇 面 向 對 象 的 程 序 設 計第 11章 繼 承 與 派 生第 12章 多
2、 態(tài) 性 與 虛 函 數第 13章 輸 入 輸 出 流第 14章 C+工 具 第1章 C+的初步知識第2章 數據類型與表達式第 1篇基 本 知 識 第 1章 C+的 初 步 知 識*1.1 從C到C+*1.2 最簡單的C+程序 1.3 C+程序的構成和書寫形式 1.4 C+程序的編寫和實現 1.5 關于C+上機實踐 計算機誕生初期,人們要使用計算機必須用機器語言或匯編語言編寫程序。世界上第一種計算機高級語言誕生于1954年,它是FORTRAN語言。先后出現了多種計算機高級語言。其中使用最廣泛、影響最大的當推BASIC語言和C語言。BASIC語言是1964年在FORTRAN語言的基礎上簡化而成的
3、,它是為初學者設計的小型高級語言。C語言是1972年由美國貝爾實驗室的D.M.Ritchie研制成功的。它不是為初學者設計的,而是為計算機專業(yè)人員設計的。大多數系統(tǒng)軟件和許多應用軟件都是用C語言編寫的。*1.1 從C到C+ 但是隨著軟件規(guī)模的增大,用C語言編寫程序漸漸顯得有些吃力了。C+是由AT /使用命名空間stdint main( )coutThis is a C+ program.;return 0;在運行時會在屏幕上輸出以下一行信息:This is a C+ program. *1.2 最簡單的C+程序 用main代表“主函數”的名字。每一個C+程序都必須有一個 main 函數。mai
4、n前面的int的作用是聲明函數的類型為整型。程序第6行的作用是向操作系統(tǒng)返回一個零值。如果程序不能正常執(zhí)行,則會自動向操作系統(tǒng)返回一個非零值,一般為-1。函數體是由大括號 括起來的。本例中主函數內只有一個以cout開頭的語句。注意C+所有語句最后都應當有一個分號。再看程序的第1行“#include ”,這不是C+的語句,而是C+的一個預處理命令,它以“#”開頭以與C+語句相區(qū)別,行的末尾沒有分號。 #include 是一個“包含命令”,它的作用是將文件iostream的內容包含到該命令所在的程序文件中,代替該命令行。文件iostream的作用是向程序提供輸入或輸出時所需要的一些信息。iostr
5、eam是i-o-stream 3個詞的組合,從它的形式就可以知道它代表“輸入輸出流”的意思,由于這類文件都放在程序單元的開頭,所以稱為“頭文件”(head file)。在程序進行編譯時,先對所有的預處理命令進行處理,將頭文件的具體內容代替 #include命令行,然后再對該程序單元進行整體編譯。 程序的第2行“using namespace std; ” 的意思是“使用命名空間std”。C+標準庫中的類和函數是在命名空間std中聲明的,因此程序中如果需要用到C+標準庫(此時就需要用#include命令行),就需要用“using namespace std; ”作聲明,表示要用到命名空間std中
6、的內容。在初學C+時,對本程序中的第1,2行可以不必深究,只需知道: 如果程序有輸入或輸出時,必須使用“#include ”命令以提供必要的信息,同時要用“using namespace std;” ,使程序能夠使用這些信息,否則程序編譯時將出錯。 例1.2 求a和b兩個數之和。可以寫出以下程序: / 求兩數之和 (本行是注釋行)#include /預處理命令using namespace std; /使用命名空間stdint main( ) /主函數首部 /函數體開始 int a,b,sum; /定義變量 cinab; /輸入語句 sum=a+b; /賦值語句couta+b=sumendl;
7、 /輸出語句return 0; /如程序正常結束,向操作系統(tǒng)返回一個零值 /函數結束 本程序的作用是求兩個整數a和b之和sum。第1行“/求兩數之和”是一個注釋行,C+規(guī)定在一行中如果出現“/”,則從它開始到本行末尾之間的全部內容都作為注釋。如果在運行時從鍵盤輸入 123 456則輸出為a+b=579 例1.3 給兩個數x和y,求兩數中的大者。在本例中包含兩個函數。#include /預處理命令using namespace std;int max(int x,int y) /定義max函數,函數值為整型,形式參數x,y為整型 /max函數體開始 int z; /變量聲明,定義本函數中用到的變
8、量z為整型 if(xy) z=x; /if語句,如果xy,則將x的值賦給zelse z=y; /否則,將y的值賦給z return(z); /將z的值返回,通過max帶回調用處 /max函數結束 int main( ) /主函數 /主函數體開始 int a,b,m; /變量聲明 cinab; /輸入變量a和b的值 m=max(a,b); /調用max函數,將得到的值賦給mcoutmax=mn; /輸出大數m的值return 0; /如程序正常結束,向操作系統(tǒng)返回一個零值 /主函數結束本程序包括兩個函數:主函數main和被調用的函數max。程序運行情況如下: 18 25 (輸入18和25給a和b
9、)max=25 (輸出m的值) 注意輸入的兩個數據間用一個或多個空格間隔,不能以逗號或其他符號間隔。 在上面的程序中,max函數出現在main函數之前,因此在main函數中調用max函數時,編譯系統(tǒng)能識別max是已定義的函數名。如果把兩個函數的位置對換一下,即先寫main函數,后寫max函數,這時在編譯main函數遇到max時,編譯系統(tǒng)無法知道m(xù)ax代表什么含義,因而無法編譯,按出錯處理。為了解決這個問題,在主函數中需要對被調用函數作聲明。上面的程序可以改寫如下:#include using namespace std;int main( ) int max(int x,int y); /對m
10、ax函數作聲明 int a,b,c; cinab; c=max(a,b); /調用max函數 coutmax=cy) z=x; else z=y; return(z);只要在被調用函數的首部的末尾加一個分號,就成為對該函數的函數聲明。函數聲明的位置應當在函數調用之前。 下面舉一個包含類(class)和對象(object)的C+程序,目的是使讀者初步了解C+是怎樣體現面向對象程序設計方法的。例1.4 包含類的C+程序。#include / 預處理命令using namespace std;class Student / 聲明一個類,類名為Studentprivate: / 以下為類中的私有部分i
11、nt num; / 私有變量numint score; / 私有變量scorepublic: / 以下為類中的公用部分void setdata( ) / 定義公用函數setdata cinnum; / 輸入num的值cinscore; / 輸入score的值 void display( ) / 定義公用函數display coutnum=numendl; / 輸出num的值 coutscore=scoreendl; /輸出score的值 ; / 類的聲明結束Student stud1,stud2; /定義stud1和stud2為Student類的變量,稱為對象int main( ) / 主函數
12、首部stud1.setdata( ); / 調用對象stud1的setdata函數 stud2.setdata( ); / 調用對象stud2的setdata函數 stud1.display( ); / 調用對象stud1的display函數stud2.display( ); / 調用對象stud2的display函數return 0; 在一個類中包含兩種成員: 數據和函數,分別稱為數據成員和成員函數。在C+中把一組數據和有權調用這些數據的函數封裝在一起,組成一種稱為“類(class)”的數據結構。在上面的程序中,數據成員num,score和成員函數setdata,display組成了一個名為
13、Student的“類”類型。成員函數是用來對數據成員進行操作的。也就是說,一個類是由一批數據以及對其操作的函數組成的。類可以體現數據的封裝性和信息隱蔽。在上面的程序中,在聲明Student類時,把類中的數據和函數分為兩大類: private(私有的)和public(公用的)。把全部數據(num,score)指定為私有的,把全部函數(setdata,display)指定為公用的。在大多數情況下,會把所有數據指定為私有,以實現信息隱蔽。 具有“類”類型特征的變量稱為“對象”(object)。程序中第1824行是主函數。程序運行情況如下: 1001 98.5 (輸入學生1的學號和成績)1002 76
14、.5 (輸入學生2的學號和成績)num=1001 (輸出學生1的學號)score=98.5 (輸出學生1的成績)num=1002 (輸出學生2的學號)score=76.5 (輸出學生2的成績) C+程序的結構和書寫格式歸納如下: (1) 一個C+程序可以由一個程序單位或多個程序單位構成。每一個程序單位作為一個文件。在程序編譯時,編譯系統(tǒng)分別對各個文件進行編譯,因此,一個文件是一個編譯單元。(2) 在一個程序單位中,可以包括以下幾個部分: 預處理命令。上節(jié)4個程序中都包括#include命令。 全局聲明部分(在函數外的聲明部分)。在這部分中包括對用戶自己定義的數據類型的聲明和程序中所用到的變量的
15、定義。1.3 C+程序的構成和書寫形式 函數。函數是實現操作的部分,因此函數是程序中必須有的和最基本的組成部分。每一個程序必須包括一個或多個函數,其中必須有一個(而且只能有一個)主函數(main函數)。但是并不要求每一個程序文件都必須具有以上3個部分,可以缺少某些部分(包括函數)。(3) 一個函數由兩部分組成: 函數首部,即函數的第一行。包括函數名、函數類型、函數屬性、函數參數(形參)名、參數類型。一個函數名后面必須跟一對圓括號, 函數參數可以缺省,如int main( )。 函數體,即函數首部下面的大括號內的部分。如果在一個函數中有多個大括號,則最外層的一對 為函數體的范圍。函數體一般包括:
16、局部聲明部分 (在函數內的聲明部分)。包括對本函數中所用到的類型、函數的聲明和變量的定義。對數據的聲明既可以放在函數之外(其作用范圍是全局的),也可以放在函數內(其作用范圍是局部的,只在本函數內有效)。執(zhí)行部分。由若干個執(zhí)行語句組成,用來進行有關的操作,以實現函數的功能。 (4) 語句包括兩類。一類是聲明語句,另一類是執(zhí)行語句。 C+對每一種語句賦予一種特定的功能。語句是實現操作的基本成分,顯然,沒有語句的函數是沒有意義的。C+語句必須以分號結束。(5) 一個C+程序總是從main函數開始執(zhí)行的,而不論main函數在整個程序中的位置如何。(6) 類(class)是C+新增加的重要的數據類型,是
17、C+對C的最重要的發(fā)展。有了類,就可以實現面向對象程序設計方法中的封裝、信息隱蔽、繼承、派生、多態(tài)等功能。在一個類中可以包括數據成員和成員函數,他們可以被指定為私有的(private)和公用的(public)屬性。私有的數據成員和成員函數只能被本類的成員函數所調用。 (7)C+程序書寫格式自由,一行內可以寫幾個語句, 一個語句可以分寫在多行上。C+程序沒有行號,也不像FORTRAN或COBOL那樣嚴格規(guī)定書寫格式(語句必須從某一列開始書寫)。(8) 一個好的、有使用價值的源程序都應當加上必要的注釋,以增加程序的可讀性。C+還保留了C語言的注釋形式,可以用“/*/”對C+程序中的任何部分作注釋。
18、在“/*”和“*/”之間的全部內容作為注釋。用“/”作注釋時,有效范圍只有一行,即本行有效,不能跨行。而用“/*/”作注釋時有效范圍為多行。只要在開始處有一個“/*”,在最后一行結束處有一個“*/”即可。因此,一般習慣是: 內容較少的簡單注釋常用“/”,內容較長的常用“/*/ ”。 一個程序從編寫到最后得到運行結果要經歷以下一些步驟。1. 用C+語言編寫程序用高級語言編寫的程序稱為“源程序”(source program)。C+的源程序是以.cpp作為后綴的(cpp是c plus plus 的縮寫)。2. 對源程序進行編譯為了使計算機能執(zhí)行高級語言源程序,必須先用一種稱為“編譯器(compli
19、er)”的軟件(也稱編譯程序或編譯系統(tǒng)),把源程序翻譯成二進制形式的“目標程序(object program)”。1.4 C+程序的編寫和實現 編譯是以源程序文件為單位分別編譯的。目標程序一般以.obj或.o作為后綴(object 的縮寫)。編譯的作用是對源程序進行詞法檢查和語法檢查。編譯時對文件中的全部內容進行檢查,編譯結束后會顯示出所有的編譯出錯信息。一般編譯系統(tǒng)給出的出錯信息分為兩種,一種是錯誤(error);一種是警告(warning) 。3. 將目標文件連接在改正所有的錯誤并全部通過編譯后,得到一個或多個目標文件。此時要用系統(tǒng)提供的“連接程序(linker)”將一個程序的所有目標程序
20、和系統(tǒng)的庫文件以及系統(tǒng)提供的其他信息連接起來,最終形成一個可執(zhí)行的二進制文件,它的后綴是.exe,是可以直接執(zhí)行的。 4. 運行程序 運行最終形成的可執(zhí)行的二進制文件(.exe文件),得到運行結果。5. 分析運行結果如果運行結果不正確,應檢查程序或算法是否有問題。 圖1.1 在了解了C+語言的初步知識后,讀者最好盡快在計算機上編譯和運行C+程序,以加深對C+程序的認識,并初步掌握C+的上機操作。讀者可以使用不同的C+編譯系統(tǒng),在不同的環(huán)境下編譯和運行一個C+程序。但是需要強調的是,我們學習的是C+程序設計,應當掌握的是標準C+,而不應該只了解某一種“方言化”的C+。不應當只會使用一種C+編譯系統(tǒng),只能在一種環(huán)境下工作,而應當能在不同的C+環(huán)境下運行自己的程序,并且了解不同的C+編譯系統(tǒng)的特點和使用方法,在需要時能將自己的程序方便地移植到不同的平臺上。1.5 關于C+上機實踐 在本書的參考書C+程序設計題解與上機指導一書中簡單介紹了在Visual C+ 6.0和GCC兩種典型的環(huán)境下運行C+程序的方法。請讀者選擇一種(如能做到兩種更好) C+編譯系統(tǒng),在該環(huán)境下輸入和運行習題中的程序,掌握上機的方法和步驟。