2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩1227頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、C++程序設(shè)計,中國高等院校計算機基礎(chǔ)教育課程體系規(guī)劃教材,譚浩強 編著,總 目 錄,第1篇 基 本 知 識第1章 C++的初步知識第2章 數(shù)據(jù)類型與表達式第2篇 面向過程的程序設(shè)計第3章 程序設(shè)計初步第4章 函數(shù)與預(yù)處理第5章 數(shù)組第6章 指針第7章 自定義數(shù)據(jù)類型,第3篇 基于對象的程序設(shè)計第8章 類和對象第9章 關(guān)于類和對象的進一步討論

2、第10章 運算符重載第4篇 面向?qū)ο蟮某绦蛟O(shè)計第11章 繼承與派生第12章 多態(tài)性與虛函數(shù)第13章 輸入輸出流第14章 C++工具,第1章 C++的初步知識第2章 數(shù)據(jù)類型與表達式,第1篇基 本 知 識,第1章 C++的初步知識,*1.1 從C到C++*1.2 最簡單的C++程序 1.3 C++程序的構(gòu)成和書寫形式 1.4 C++程序的編寫和實現(xiàn) 1.5 關(guān)于

3、C++上機實踐,計算機誕生初期,人們要使用計算機必須用機器語言或匯編語言編寫程序。世界上第一種計算機高級語言誕生于1954年,它是FORTRAN語言。先后出現(xiàn)了多種計算機高級語言。其中使用最廣泛、影響最大的當(dāng)推BASIC語言和C語言。BASIC語言是1964年在FORTRAN語言的基礎(chǔ)上簡化而成的,它是為初學(xué)者設(shè)計的小型高級語言。C語言是1972年由美國貝爾實驗室的D.M.Ritchie研制成功的。它不是為初學(xué)者設(shè)計的,而是為計算機

4、專業(yè)人員設(shè)計的。大多數(shù)系統(tǒng)軟件和許多應(yīng)用軟件都是用C語言編寫的。,*1.1 從C到C++,但是隨著軟件規(guī)模的增大,用C語言編寫程序漸漸顯得有些吃力了。C++是由AT&T Bell(貝爾)實驗室的Bjarne Stroustrup博士及其同事于20世紀80年代初在C語言的基礎(chǔ)上開發(fā)成功的。C++保留了C語言原有的所有優(yōu)點,增加了面向?qū)ο蟮臋C制。C++是由C發(fā)展而來的,與C兼容。用C語言寫的程序基本上可以不加修改地用于C++。從

5、C++的名字可以看出它是C的超集。C++既可用于面向過程的結(jié)構(gòu)化程序設(shè)計,又可用于面向?qū)ο蟮某绦蛟O(shè)計,是一種功能強大的混合型的程序設(shè)計語言。,C++對C的“增強”,表現(xiàn)在兩個方面: (1) 在原來面向過程的機制基礎(chǔ)上,對C語言的功能做了不少擴充。(2) 增加了面向?qū)ο蟮臋C制。面向?qū)ο蟪绦蛟O(shè)計,是針對開發(fā)較大規(guī)模的程序而提出來的,目的是提高軟件開發(fā)的效率。不要把面向?qū)ο蠛兔嫦蜻^程對立起來,面向?qū)ο蠛兔嫦蜻^程不是矛盾的,而是各有用途

6、、互為補充的。學(xué)習(xí)C++,既要會利用C++進行面向過程的結(jié)構(gòu)化程序設(shè)計,也要會利用C++進行面向?qū)ο蟮某绦蛟O(shè)計。本書既介紹C++在面向過程程序設(shè)計中的應(yīng)用,也介紹C++在面向?qū)ο蟪绦蛟O(shè)計中的應(yīng)用。,例1.1 輸出一行字符: “This is a C++ program.”。程序如下: #include //包含頭文件iostreamusing namespace std;

7、 //使用命名空間stdint main( ){cout<<″This is a C++ program.″;return 0;}在運行時會在屏幕上輸出以下一行信息:This is a C++ program.,*1.2 最簡單的C++程序,用main代表“主函數(shù)”的名字。每一個C++程序都必須有一個 main 函數(shù)。main前面的int的作用是聲明函數(shù)的類型為整型。程序第6行的作用是向操作系統(tǒng)返回一個零值

8、。如果程序不能正常執(zhí)行,則會自動向操作系統(tǒng)返回一個非零值,一般為-1。函數(shù)體是由大括號{ }括起來的。本例中主函數(shù)內(nèi)只有一個以cout開頭的語句。注意C++所有語句最后都應(yīng)當(dāng)有一個分號。再看程序的第1行“#include ”,這不是C++的語句,而是C++的一個預(yù)處理命令,它以“#”開頭以與C++語句相區(qū)別,行的末尾沒有分號。,#include 是一個“包含命令”,它的作用是將文件iostream的內(nèi)容包含到該命令所在的程序文件中

9、,代替該命令行。文件iostream的作用是向程序提供輸入或輸出時所需要的一些信息。iostream是i-o-stream 3個詞的組合,從它的形式就可以知道它代表“輸入輸出流”的意思,由于這類文件都放在程序單元的開頭,所以稱為“頭文件”(head file)。在程序進行編譯時,先對所有的預(yù)處理命令進行處理,將頭文件的具體內(nèi)容代替 #include命令行,然后再對該程序單元進行整體編譯。,程序的第2行“using namespace s

10、td; ” 的意思是“使用命名空間std”。C++標準庫中的類和函數(shù)是在命名空間std中聲明的,因此程序中如果需要用到C++標準庫(此時就需要用#include命令行),就需要用“using namespace std; ”作聲明,表示要用到命名空間std中的內(nèi)容。在初學(xué)C++時,對本程序中的第1,2行可以不必深究,只需知道: 如果程序有輸入或輸出時,必須使用“#include ”命令以提供必要的信息,同時要用“using names

11、pace std;” ,使程序能夠使用這些信息,否則程序編譯時將出錯。,例1.2 求a和b兩個數(shù)之和。可以寫出以下程序: // 求兩數(shù)之和 (本行是注釋行)#include //預(yù)處理命令using namespace std; //使用命名空間stdint main( ) //主函數(shù)首部{

12、 //函數(shù)體開始 int a,b,sum; //定義變量 cin>>a>>b; //輸入語句 sum=a+b; //賦值語句cout<<″a+b=″<<sum<<

13、endl; //輸出語句return 0; //如程序正常結(jié)束,向操作系統(tǒng)返回一個零值} //函數(shù)結(jié)束,本程序的作用是求兩個整數(shù)a和b之和sum。第1行“//求兩數(shù)之和”是一個注釋行,C++規(guī)定在一行中如果出現(xiàn)“//”,則從它開始到本行末尾之間的全部內(nèi)容都作為注釋。如果在運行時從鍵盤輸入 123 456↙則

14、輸出為a+b=579,例1.3 給兩個數(shù)x和y,求兩數(shù)中的大者。在本例中包含兩個函數(shù)。#include //預(yù)處理命令using namespace std;int max(int x,int y) //定義max函數(shù),函數(shù)值為整型,形式參數(shù)x,y為整型{ //max函數(shù)體開始 int z;

15、 //變量聲明,定義本函數(shù)中用到的變量z為整型 if(x>y) z=x; //if語句,如果x>y,則將x的值賦給zelse z=y; //否則,將y的值賦給z return(z); //將z的值返回,通過max帶回調(diào)用處

16、} //max函數(shù)結(jié)束int main( ) //主函數(shù),{ //主函數(shù)體開始 int a,b,m; //變量聲明 cin>>a>>b;

17、 //輸入變量a和b的值 m=max(a,b); //調(diào)用max函數(shù),將得到的值賦給mcout<<″max=″<<m<<′\\n′; //輸出大數(shù)m的值return 0; //如程序正常結(jié)束,向操作系統(tǒng)返回一個

18、零值} //主函數(shù)結(jié)束本程序包括兩個函數(shù):主函數(shù)main和被調(diào)用的函數(shù)max。程序運行情況如下: 18 25 ↙ (輸入18和25給a和b)max=25 (輸出m的值) 注意輸入的兩個數(shù)據(jù)間用一個或多個空格間隔,不能以逗號或其他符號間隔。,在上面的程序中,max函數(shù)出現(xiàn)在main函數(shù)之前,因此在main

19、函數(shù)中調(diào)用max函數(shù)時,編譯系統(tǒng)能識別max是已定義的函數(shù)名。如果把兩個函數(shù)的位置對換一下,即先寫main函數(shù),后寫max函數(shù),這時在編譯main函數(shù)遇到max時,編譯系統(tǒng)無法知道m(xù)ax代表什么含義,因而無法編譯,按出錯處理。為了解決這個問題,在主函數(shù)中需要對被調(diào)用函數(shù)作聲明。上面的程序可以改寫如下:#include using namespace std;int main( ){ int max(int x,int y);

20、 //對max函數(shù)作聲明 int a,b,c; cin>>a>>b; c=max(a,b); //調(diào)用max函數(shù),couty) z=x; else z=y; return(z);}只要在被調(diào)用函數(shù)的首部的末尾加一個分號,就成為對該函數(shù)的函數(shù)聲明。函數(shù)聲明的位置應(yīng)當(dāng)在函數(shù)調(diào)用之前。,下面舉一個包含類(class)和對象(object)的C++

21、程序,目的是使讀者初步了解C++是怎樣體現(xiàn)面向?qū)ο蟪绦蛟O(shè)計方法的。例1.4 包含類的C++程序。#include // 預(yù)處理命令using namespace std;class Student // 聲明一個類,類名為Student{private: // 以下為類中的私有部分int n

22、um; // 私有變量numint score; // 私有變量scorepublic: // 以下為類中的公用部分void setdata( ) // 定義公用函數(shù)setdata{cin>>num;

23、 // 輸入num的值cin>>score; // 輸入score的值},void display( ) // 定義公用函數(shù)display {cout<<″num=″<<num<<endl; // 輸出num的值 cout<<″score=″<

24、;<score<<endl; //輸出score的值 };}; // 類的聲明結(jié)束Student stud1,stud2; //定義stud1和stud2為Student類的變量,稱為對象int main( ) // 主函數(shù)首部{stud1.setdata( );

25、 // 調(diào)用對象stud1的setdata函數(shù) stud2.setdata( ); // 調(diào)用對象stud2的setdata函數(shù) stud1.display( ); // 調(diào)用對象stud1的display函數(shù)stud2.display( ); // 調(diào)用對象stud2的d

26、isplay函數(shù)return 0;},在一個類中包含兩種成員: 數(shù)據(jù)和函數(shù),分別稱為數(shù)據(jù)成員和成員函數(shù)。在C++中把一組數(shù)據(jù)和有權(quán)調(diào)用這些數(shù)據(jù)的函數(shù)封裝在一起,組成一種稱為“類(class)”的數(shù)據(jù)結(jié)構(gòu)。在上面的程序中,數(shù)據(jù)成員num,score和成員函數(shù)setdata,display組成了一個名為Student的“類”類型。成員函數(shù)是用來對數(shù)據(jù)成員進行操作的。也就是說,一個類是由一批數(shù)據(jù)以及對其操作的函數(shù)組成的。類可以體現(xiàn)數(shù)據(jù)的

27、封裝性和信息隱蔽。在上面的程序中,在聲明Student類時,把類中的數(shù)據(jù)和函數(shù)分為兩大類: private(私有的)和public(公用的)。把全部數(shù)據(jù)(num,score)指定為私有的,把全部函數(shù)(setdata,display)指定為公用的。在大多數(shù)情況下,會把所有數(shù)據(jù)指定為私有,以實現(xiàn)信息隱蔽。,具有“類”類型特征的變量稱為“對象”(object)。程序中第18~24行是主函數(shù)。程序運行情況如下: 1001 98.5 ↙

28、 (輸入學(xué)生1的學(xué)號和成績)1002 76.5 ↙ (輸入學(xué)生2的學(xué)號和成績)num=1001 (輸出學(xué)生1的學(xué)號)score=98.5 (輸出學(xué)生1的成績)num=1002 (輸出學(xué)生2的學(xué)號)score=76.5 (輸出學(xué)生2的成績),C++程序的結(jié)構(gòu)和書寫格式歸納如下:

29、(1) 一個C++程序可以由一個程序單位或多個程序單位構(gòu)成。每一個程序單位作為一個文件。在程序編譯時,編譯系統(tǒng)分別對各個文件進行編譯,因此,一個文件是一個編譯單元。(2) 在一個程序單位中,可以包括以下幾個部分: ① 預(yù)處理命令。上節(jié)4個程序中都包括#include命令。② 全局聲明部分(在函數(shù)外的聲明部分)。在這部分中包括對用戶自己定義的數(shù)據(jù)類型的聲明和程序中所用到的變量的定義。,1.3 C++程序的構(gòu)成和書寫形式,③ 函數(shù)

30、。函數(shù)是實現(xiàn)操作的部分,因此函數(shù)是程序中必須有的和最基本的組成部分。每一個程序必須包括一個或多個函數(shù),其中必須有一個(而且只能有一個)主函數(shù)(main函數(shù))。但是并不要求每一個程序文件都必須具有以上3個部分,可以缺少某些部分(包括函數(shù))。(3) 一個函數(shù)由兩部分組成:① 函數(shù)首部,即函數(shù)的第一行。包括函數(shù)名、函數(shù)類型、函數(shù)屬性、函數(shù)參數(shù)(形參)名、參數(shù)類型。一個函數(shù)名后面必須跟一對圓括號, 函數(shù)參數(shù)可以缺省,如int main(

31、 )。,② 函數(shù)體,即函數(shù)首部下面的大括號內(nèi)的部分。如果在一個函數(shù)中有多個大括號,則最外層的一對{ }為函數(shù)體的范圍。函數(shù)體一般包括:局部聲明部分 (在函數(shù)內(nèi)的聲明部分)。包括對本函數(shù)中所用到的類型、函數(shù)的聲明和變量的定義。對數(shù)據(jù)的聲明既可以放在函數(shù)之外(其作用范圍是全局的),也可以放在函數(shù)內(nèi)(其作用范圍是局部的,只在本函數(shù)內(nèi)有效)。執(zhí)行部分。由若干個執(zhí)行語句組成,用來進行有關(guān)的操作,以實現(xiàn)函數(shù)的功能。,(4) 語句包括兩類。一

32、類是聲明語句,另一類是執(zhí)行語句。 C++對每一種語句賦予一種特定的功能。語句是實現(xiàn)操作的基本成分,顯然,沒有語句的函數(shù)是沒有意義的。C++語句必須以分號結(jié)束。(5) 一個C++程序總是從main函數(shù)開始執(zhí)行的,而不論main函數(shù)在整個程序中的位置如何。(6) 類(class)是C++新增加的重要的數(shù)據(jù)類型,是C++對C的最重要的發(fā)展。有了類,就可以實現(xiàn)面向?qū)ο蟪绦蛟O(shè)計方法中的封裝、信息隱蔽、繼承、派生、多態(tài)等功能。在一個類中可以包括

33、數(shù)據(jù)成員和成員函數(shù),他們可以被指定為私有的(private)和公用的(public)屬性。私有的數(shù)據(jù)成員和成員函數(shù)只能被本類的成員函數(shù)所調(diào)用。,(7)C++程序書寫格式自由,一行內(nèi)可以寫幾個語句, 一個語句可以分寫在多行上。C++程序沒有行號,也不像FORTRAN或COBOL那樣嚴格規(guī)定書寫格式(語句必須從某一列開始書寫)。(8) 一個好的、有使用價值的源程序都應(yīng)當(dāng)加上必要的注釋,以增加程序的可讀性。C++還保留了C語言的注釋形式,可

34、以用“/*……*/”對C++程序中的任何部分作注釋。在“/*”和“*/”之間的全部內(nèi)容作為注釋。用“//”作注釋時,有效范圍只有一行,即本行有效,不能跨行。而用“/*……*/”作注釋時有效范圍為多行。只要在開始處有一個“/*”,在最后一行結(jié)束處有一個“*/”即可。因此,一般習(xí)慣是: 內(nèi)容較少的簡單注釋常用“//”,內(nèi)容較長的常用“/*……*/ ”。,一個程序從編寫到最后得到運行結(jié)果要經(jīng)歷以下一些步驟。1. 用C++語言編寫程序用高

35、級語言編寫的程序稱為“源程序”(source program)。C++的源程序是以.cpp作為后綴的(cpp是c plus plus 的縮寫)。2. 對源程序進行編譯為了使計算機能執(zhí)行高級語言源程序,必須先用一種稱為“編譯器(complier)”的軟件(也稱編譯程序或編譯系統(tǒng)),把源程序翻譯成二進制形式的“目標程序(object program)”。,1.4 C++程序的編寫和實現(xiàn),編譯是以源程序文件為單位分別編譯的。目標程序一般以

36、.obj或.o作為后綴(object 的縮寫)。編譯的作用是對源程序進行詞法檢查和語法檢查。編譯時對文件中的全部內(nèi)容進行檢查,編譯結(jié)束后會顯示出所有的編譯出錯信息。一般編譯系統(tǒng)給出的出錯信息分為兩種,一種是錯誤(error);一種是警告(warning) 。3. 將目標文件連接在改正所有的錯誤并全部通過編譯后,得到一個或多個目標文件。此時要用系統(tǒng)提供的“連接程序(linker)”將一個程序的所有目標程序和系統(tǒng)的庫文件以及系統(tǒng)提供的其

37、他信息連接起來,最終形成一個可執(zhí)行的二進制文件,它的后綴是.exe,是可以直接執(zhí)行的。,4. 運行程序 運行最終形成的可執(zhí)行的二進制文件(.exe文件),得到運行結(jié)果。5. 分析運行結(jié)果如果運行結(jié)果不正確,應(yīng)檢查程序或算法是否有問題。,圖1.1,在了解了C++語言的初步知識后,讀者最好盡快在計算機上編譯和運行C++程序,以加深對C++程序的認識,并初步掌握C++的上機操作。讀者可以使用不同的C++編譯系統(tǒng),在不同的環(huán)境下編譯和運

38、行一個C++程序。但是需要強調(diào)的是,我們學(xué)習(xí)的是C++程序設(shè)計,應(yīng)當(dāng)掌握的是標準C++,而不應(yīng)該只了解某一種“方言化”的C++。不應(yīng)當(dāng)只會使用一種C++編譯系統(tǒng),只能在一種環(huán)境下工作,而應(yīng)當(dāng)能在不同的C++環(huán)境下運行自己的程序,并且了解不同的C++編譯系統(tǒng)的特點和使用方法,在需要時能將自己的程序方便地移植到不同的平臺上。,1.5 關(guān)于C++上機實踐,在本書的參考書《C++程序設(shè)計題解與上機指導(dǎo)》一書中簡單介紹了在Visual C++ 6

39、.0和GCC兩種典型的環(huán)境下運行C++程序的方法。請讀者選擇一種(如能做到兩種更好) C++編譯系統(tǒng),在該環(huán)境下輸入和運行習(xí)題中的程序,掌握上機的方法和步驟。,第2章 數(shù)據(jù)類型與表達式,2.1 C++的數(shù)據(jù)類型2.2 常量2.3 變量2.4 C++的運算符2.5 算術(shù)運算符與算術(shù)表達式2.6 賦值運算符與賦值表達式2.7 逗號運算符與逗號表達式,計算機處理的對象是數(shù)據(jù),而數(shù)據(jù)是以某種特定的形式存在的(例如整

40、數(shù)、浮點數(shù)、字符等形式)。不同的數(shù)據(jù)之間往往還存在某些聯(lián)系(例如由若干個整數(shù)組成一個整數(shù)數(shù)組)。數(shù)據(jù)結(jié)構(gòu)指的是數(shù)據(jù)的組織形式。例如,數(shù)組就是一種數(shù)據(jù)結(jié)構(gòu)。不同的計算機語言所允許使用的數(shù)據(jù)結(jié)構(gòu)是不同的。處理同一類問題,如果數(shù)據(jù)結(jié)構(gòu)不同,算法也會不同。例如,對10個整數(shù)排序和對包含10個元素的整型數(shù)組排序的算法是不同的。C++可以使用的數(shù)據(jù)類型如下:,2.1 C++的數(shù)據(jù)類型,數(shù)據(jù)類型基本類型整型短整型(short int)

41、整型(int) 長整型(long int)字符型(char)浮點型單精度型(float)雙精度型(double)長雙精度型(long double)布爾型(bool)構(gòu)造類型枚舉類型(enum)數(shù)組類型結(jié)構(gòu)體類型(struct)共用體類型(union)類類型(class)指針類型

42、引用類型空類型(void)布爾型就是邏輯型,空類型就是無值型。,,,,,,C++的數(shù)據(jù)包括常量與變量,常量與變量都具有類型。由以上這些數(shù)據(jù)類型還可以構(gòu)成更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。例如利用指針和結(jié)構(gòu)體類型可以構(gòu)成表、樹、棧等復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。C++并沒有統(tǒng)一規(guī)定各類數(shù)據(jù)的精度、數(shù)值范圍和在內(nèi)存中所占的字節(jié)數(shù),各C++編譯系統(tǒng)根據(jù)自己的情況作出安排。書中表2.1列出了Visual C++數(shù)值型和字符型數(shù)據(jù)的情況。,說明:(1) 整型數(shù)據(jù)

43、分為長整型(long int)、一般整型(int)和短整型(short int)。在int前面加long和short分別表示長整型和短整型。(2) 整型數(shù)據(jù)的存儲方式為按二進制數(shù)形式存儲,例如十進制整數(shù)85的二進制形式為1010101,則在內(nèi)存中的存儲形式如圖2.1所示。圖2.1,(3) 在整型符號int和字符型符號char的前面,可以加修飾符signed(表示“有符號”)或unsigned(表示“無符號”)。如果指定為si

44、gned,則數(shù)值以補碼形式存放,存儲單元中的最高位(bit)用來表示數(shù)值的符號。如果指定為unsigned,則數(shù)值沒有符號,全部二進制位都用來表示數(shù)值本身。例如短整型數(shù)據(jù)占兩個字節(jié) ,見圖2.2。圖2.2,有符號時,能存儲的最大值為215-1,即32767,最小值為-32768。無符號時,能存儲的最大值為216-1,即65535,最小值為0。有些數(shù)據(jù)是沒有負值的,可以使用unsigned,它存儲正數(shù)的范圍比用signed時要

45、大一倍。(4) 浮點型(又稱實型)數(shù)據(jù)分為單精度(float)、雙精度(double)和長雙精度(long double)3種,在Visual C++ 6.0中,對float提供6位有效數(shù)字,對double提供15位有效數(shù)字,并且float和double的數(shù)值范圍不同。對float分配4個字節(jié),對double和long double分配8個字節(jié)。(5) 表中類型標識符一欄中,方括號[ ]包含的部分可以省寫,如short和short

46、int等效,unsigned int和unsigned等效。,常量的值是不能改變的,一般從其字面形式即可判別是否為常量。常量包括兩大類,即數(shù)值型常量(即常數(shù))和字符型常量。如12,0,-3為整型常量,4.6,-1.23為實型常量,包含在兩個單撇號之間的字符為字符常量,如′a′,′x′。這種從字面形式即可識別的常量稱為“字面常量”或“直接常量”。,2.2 常量 2.2.1 什么是常量,數(shù)值常量就是通常所說的常數(shù)。在C++中,數(shù)值常量是區(qū)

47、分類型的,從字面形式即可識別其類型。1. 整型常量(整數(shù))的類型在上一節(jié)中已知道: 整型數(shù)據(jù)可分為int,short int,long int以及unsigned int,unsigned short,unsigned long等類別。整型常量也分為以上類別。為什么將數(shù)值常量區(qū)分為不同的類別呢?因為在進行賦值或函數(shù)的參數(shù)虛實結(jié)合時要求數(shù)據(jù)類型匹配。那么,一個整型常量怎樣從字面上區(qū)分為以上的類別呢?,2.2.2 數(shù)值常量,(1) 一

48、個整數(shù),如果其值在-32768~+32767范圍內(nèi),認為它是short int型,它可以賦值給short int型、int型和long int型變量。(2) 一個整數(shù),如果其值超過了上述范圍,而在-2147483648~+2147483647范圍內(nèi),則認為它是long int型,可以將它賦值給一個int或long int型變量。(3) 如果某一計算機系統(tǒng)的C++版本(例如Visual C++)確定int與long int型數(shù)據(jù)在內(nèi)存

49、中占據(jù)的長度相同,則它們能夠表示的數(shù)值的范圍相同。因此,一個int型的常量也同時是一個long int型常量,可以賦給int型或long int型變量。(4) 常量無unsigned型。但一個非負值的整數(shù)可以賦值給unsigned整型變量,只要它的范圍不超過變量的取值范圍即可。,一個整型常量可以用3種不同的方式表示: (1) 十進制整數(shù)。如1357,-432,0等。在一個整型常量后面加一個字母l或L,則認為是long int型常量。

50、例如123L,421L,0L等,這往往用于函數(shù)調(diào)用中。如果函數(shù)的形參為long int,則要求實參也為long int型,此時用123作實參不行,而要用123L作實參。(2) 八進制整數(shù)。在常數(shù)的開頭加一個數(shù)字0,就表示這是以八進制數(shù)形式表示的常數(shù)。如020表示這是八進制數(shù)20,即(20)8,它相當(dāng)于十進制數(shù)16。(3) 十六進制整數(shù)。在常數(shù)的開頭加一個數(shù)字0和一個英文字母X(或x),就表示這是以十六進制數(shù)形式表示的常數(shù)。如0X20

51、表示這是十六進制數(shù)20,即(20)16,它相當(dāng)于十進制數(shù)32。,2. 浮點數(shù)的表示方法一個浮點數(shù)可以用兩種不同的方式表示: (1) 十進制小數(shù)形式。如21.456,-7.98等。它一般由整數(shù)部分和小數(shù)部分組成,可以省略其中之一(如78.或.06,.0),但不能二者皆省略。C++編譯系統(tǒng)把用這種形式表示的浮點數(shù)一律按雙精度常量處理,在內(nèi)存中占8個字節(jié)。如果在實數(shù)的數(shù)字之后加字母F或f,表示此數(shù)為單精度浮點數(shù),如1234F,-43f,占

52、4個字節(jié)。如果加字母L或l,表示此數(shù)為長雙精度數(shù)(long double),在GCC中占12個字節(jié),在Visual C++ 6.0中占8個字節(jié)。,(2) 指數(shù)形式(即浮點形式)一個浮點數(shù)可以寫成指數(shù)形式,如3.14159可以表示為0.314159×101,3.14159×100,31.4159×10-1,314.159×10-2等形式。在程序中應(yīng)表示為: 0.314159e1,3.14159e

53、0,31.4159e-1 ,314.159e-2,用字母e表示其后的數(shù)是以10為底的冪,如e12表示1012。其一般形式為數(shù)符 數(shù)字部分 指數(shù)部分上面各數(shù)據(jù)中的0.314159,3.14159, 31.4159, 314.159 等就是其中的數(shù)字部分。可以看到: 由于指數(shù)部分的存在,使得同一個浮點數(shù)可以用不同的指數(shù)形式來表示,數(shù)字部分中小數(shù)點的位置是浮動的。例如:,a=0.314159e1;a=3.14159e0;a=31

54、.4159e-1;a=314.159e-2;以上4個賦值語句中,用了不同形式的浮點數(shù),但其作用是相同的。在程序中不論把浮點數(shù)寫成小數(shù)形式還是指數(shù)形式,在內(nèi)存中都是以指數(shù)形式(即浮點形式)存儲的。例如不論在程序中寫成314.159或314.159e0,31.4159e1,3.14159e2, 0.314159e3等形式,在內(nèi)存中都是以規(guī)范化的指數(shù)形式存放,如圖2.3所示。圖2.3,數(shù)字部分必須小于1,同時,小數(shù)點后面第一個數(shù)字

55、必須是一個非0數(shù)字,例如不能是0.0314159。因此314.159和314.159e0,31.4159e1,3.14159e2, 0.314159e3在內(nèi)存中表示成0.314159×103。存儲單元分為兩部分,一部分用來存放數(shù)字部分,一部分用來存放指數(shù)部分。為便于理解,在圖2.3中是用十進制表示的,實際上在存儲單元中是用二進制數(shù)來表示小數(shù)部分,用2的冪次來表示指數(shù)部分的。對于以指數(shù)形式表示的數(shù)值常量,也都作為雙精度常量處理

56、。,1. 普通的字符常量用單撇號括起來的一個字符就是字符型常量。如′a′,′#′,′%′,′D′都是合法的字符常量,在內(nèi)存中占一個字節(jié)。注意: ①字符常量只能包括一個字符,如′AB′ 是不合法的。②字符常量區(qū)分大小寫字母,如′A′和′a′是兩個不同的字符常量。③撇號(′)是定界符,而不屬于字符常量的一部分。如cout<<′a′;輸出的是一個字母“a”,而不是3個字符“′a′ ”。,2.2.3 字符常量,2. 轉(zhuǎn)義字符常量

57、除了以上形式的字符常量外,C++還允許用一種特殊形式的字符常量,就是以 “\”開頭的字符序列。例如,′\n′代表一個“換行”符?!癱out<<′\n′; ” 將輸出一個換行,其作用與“cout<<endl; ” 相同。這種“控制字符”,在屏幕上是不能顯示的。在程序中也無法用一個一般形式的字符表示,只能采用特殊形式來表示。常用的以“\”開頭的特殊字符見書中表2.2。,3. 字符數(shù)據(jù)在內(nèi)存中的存儲形式及其使用方法

58、將一個字符常量存放到內(nèi)存單元時,實際上并不是把該字符本身放到內(nèi)存單元中去,而是將該字符相應(yīng)的ASCII代碼放到存儲單元中。如果字符變量c1的值為′a′,c2的值為′b′,則在變量中存放的是′a′的ASCII碼97,′b′ 的ASCII碼98,如圖2.4(a)所示,實際上在內(nèi)存中是以二進制形式存放的,如圖2.4(b)所示。圖2.4,既然字符數(shù)據(jù)是以ASCII碼存儲的,它的存儲形式就與整數(shù)的存儲形式類似。這樣,在C++中字符型數(shù)據(jù)

59、和整型數(shù)據(jù)之間就可以通用。一個字符數(shù)據(jù)可以賦給一個整型變量,反之,一個整型數(shù)據(jù)也可以賦給一個字符變量。也可以對字符數(shù)據(jù)進行算術(shù)運算,此時相當(dāng)于對它們的ASCII碼進行算術(shù)運算。例2.1 將字符賦給整型變量。#include using namespace std;int main( ) {int i,j; //i和j是整型變量i=′A′;

60、 //將一個字符常量賦給整型變量ij=′B′; //將一個字符常量賦給整型變量jcout<<i<<′ ′<<j<<′\n′; //輸出整型變量i和j的值,′\n′ 是換行符return 0;},執(zhí)行時輸出 65 66i和j被指定為整型變量。但在第5和第6行中,將字符′A′和′B′分別賦給i和j,它的作用相當(dāng)于以下兩個賦值語句:

61、i=65;j=66;因為′A′和′B′的ASCII碼為65和66。在程序的第5和第6行是把65和66直接存放到i和j的內(nèi)存單元中。因此輸出65和66。可以看到:在一定條件下,字符型數(shù)據(jù)和整型數(shù)據(jù)是可以通用的。但是應(yīng)注意字符數(shù)據(jù)只占一個字節(jié),它只能存放0~255范圍內(nèi)的整數(shù)。,例2.2 字符數(shù)據(jù)與整數(shù)進行算術(shù)運算。下面程序的作用是將小寫字母轉(zhuǎn)換為大寫字母。#include using namespace std;int main

62、( ){char c1,c2; c1=′a′; c2=′b′; c1=c1-32; c2=c2-32; cout<<c1<<′ ′<<c2<<endl; return 0;},運行結(jié)果為A B′a′的ASCII碼為97,而′A′的ASCII碼為65,′b′為98,′B′為66。從ASCII代碼表中可以看到每一個小寫字母比它相應(yīng)的大寫字母的ASCII代碼大32。C++符數(shù)

63、據(jù)與數(shù)值直接進行算術(shù)運算,′a′-32得到整數(shù)65,′b′-32得到整數(shù)66。將65和66存放在c1,c2中,由于c1,c2是字符變量,因此用cout輸出c1,c2時,得到字符A和B(A的ASCII碼為65,B的ASCII碼為66)。,4. 字符串常量用雙撇號括起來的部分就是字符串常量,如″abc″,″Hello!″,″a+b″,″Liping″都是字符串常量。字符串常量″abc″在內(nèi)存中占4個字節(jié)(而不是3個字節(jié)),見圖2.5。

64、圖2.5編譯系統(tǒng)會在字符串最后自動加一個′\0′作為字符串結(jié)束標志。但′\0′并不是字符串的一部分,它只作為字符串的結(jié)束標志。如 cout<<″abc″<<endl; 輸出3個字符abc,而不包括′\0′。,注意: ″a″和′a′代表不同的含義,″a″是字符串常量,′a′ 是字符常量。前者占兩個字節(jié),后者占1個字節(jié)。請分析下面的程序片段: char c; //定義一

65、個字符變量c=′a′; //正確c=″a″; //錯誤,c只能容納一個字符字符串常量要用字符數(shù)組來存放,見第5章。請思考: 字符串常量″abc\n″包含幾個字符?不是5個而是4個字符,其中“\n”是一個轉(zhuǎn)義字符。但它在內(nèi)存中占5個字節(jié)(包括一個“\0”字符) 。編譯系統(tǒng)遇到“\”時就會把它認作轉(zhuǎn)義字符的標志,把它和其后的字符一起作為一個轉(zhuǎn)義字符。,如果“\”后面的字符不能與“

66、\”組成一個合法的轉(zhuǎn)義字符(如″\c″),則在編譯時顯示出錯信息。如果希望將“\”字符也作為字符串中的一個字符,則應(yīng)寫為″abc\\n″,此時字符包括5個字符,即a,b,c,\,n。如果有以下輸出語句:cout<<″abc\\\n″<<endl;則會輸出: abc\,然后換行。同理執(zhí)行cout<<″I say \″Thank you?。堋澹躰″;的輸出是: I say ″Thank you!″

67、如果在一個字符串中最后一個字符為“\”,則表示它是續(xù)行符,下一行的字符是該字符串的一部分,且在兩行字符串間無空格。如,cout<<″We must study C\ //本行最后的“\”后面的空格和換行均不起作用++ hard!″; //本行的字符緊連在上一行最后的“\”前面字符之后則輸出: We must study C++ hard!,為了編程和

68、閱讀的方便,在C++程序設(shè)計中,常用一個符號名代表一個常量,稱為符號常量,即以標識符形式出現(xiàn)的常量。例2.3 符號常量的使用。 #define PRICE 30 //注意這不是語句,末尾不要加分號int main ( ){ int num,total;num=10;total=num * PRICE;cout<<″total=″<<total<<endl;ret

69、urn 0;},2.2.4 符號常量,程序中用預(yù)處理命令#define指定PRICE在本程序單位中代表常量30,此后凡在本程序單位中出現(xiàn)的PRICE都代表30,可以和常量一樣進行運算,程序運行結(jié)果為 total=300 請注意符號常量雖然有名字,但它不是變量。它的值在其作用域(在本例中為主函數(shù))內(nèi)是不能改變的,也不能被賦值。如用賦值語句“PRICE=40;”給PRICE賦值是錯誤的。 使用符號常量的好處是:(1) 含義清楚

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論