《C++程序設(shè)計(jì)》(譚浩強(qiáng)).ppt_第1頁
《C++程序設(shè)計(jì)》(譚浩強(qiáng)).ppt_第2頁
《C++程序設(shè)計(jì)》(譚浩強(qiáng)).ppt_第3頁
《C++程序設(shè)計(jì)》(譚浩強(qiáng)).ppt_第4頁
《C++程序設(shè)計(jì)》(譚浩強(qiáng)).ppt_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余1223頁可下載查看

下載本文檔

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

文檔簡介

1、C+程序設(shè)計(jì),中國高等院校計(jì)算機(jī)基礎(chǔ)教育課程體系規(guī)劃教材,譚浩強(qiáng) 編著,總 目 錄,第1篇 基 本 知 識 第1章 C+的初步知識 第2章 數(shù)據(jù)類型與表達(dá)式 第2篇 面向過程的程序設(shè)計(jì) 第3章 程序設(shè)計(jì)初步 第4章 函數(shù)與預(yù)處理 第5章 數(shù)組 第6章 指針 第7章 自定義數(shù)據(jù)類型,第3篇 基于對象的程序設(shè)計(jì) 第8章 類和對象 第9章 關(guān)于類和對象的進(jìn)一步討論 第10章 運(yùn)算符重載 第4篇 面向?qū)ο蟮某绦蛟O(shè)計(jì) 第11章 繼承與派生 第12章 多態(tài)性與虛函數(shù) 第13章 輸入輸出流 第14章 C+工具,第1章 C+的初步知識 第2章 數(shù)據(jù)類型與表達(dá)式,第1篇基 本 知 識,第1章 C+的初步知識,*

2、1.1 從C到C+ *1.2 最簡單的C+程序 1.3 C+程序的構(gòu)成和書寫形式 1.4 C+程序的編寫和實(shí)現(xiàn) 1.5 關(guān)于C+上機(jī)實(shí)踐,計(jì)算機(jī)誕生初期,人們要使用計(jì)算機(jī)必須用機(jī)器語言或匯編語言編寫程序。世界上第一種計(jì)算機(jī)高級語言誕生于1954年,它是FORTRAN語言。先后出現(xiàn)了多種計(jì)算機(jī)高級語言。其中使用最廣泛、影響最大的當(dāng)推BASIC語言和C語言。 BASIC語言是1964年在FORTRAN語言的基礎(chǔ)上簡化而成的,它是為初學(xué)者設(shè)計(jì)的小型高級語言。 C語言是1972年由美國貝爾實(shí)驗(yàn)室的D.M.Ritchie研制成功的。它不是為初學(xué)者設(shè)計(jì)的,而是為計(jì)算機(jī)專業(yè)人員設(shè)計(jì)的。大多數(shù)系統(tǒng)軟件和許多應(yīng)

3、用軟件都是用C語言編寫的。,*1.1 從C到C+,但是隨著軟件規(guī)模的增大,用C語言編寫程序漸漸顯得有些吃力了。 C+是由AT /使用命名空間std int main( ) coutThis is a C+ program.; return 0; 在運(yùn)行時(shí)會在屏幕上輸出以下一行信息: This is a C+ program.,*1.2 最簡單的C+程序,用main代表“主函數(shù)”的名字。每一個(gè)C+程序都必須有一個(gè) main 函數(shù)。main前面的int的作用是聲明函數(shù)的類型為整型。程序第6行的作用是向操作系統(tǒng)返回一個(gè)零值。如果程序不能正常執(zhí)行,則會自動向操作系統(tǒng)返回一個(gè)非零值,一般為-1。 函數(shù)體

4、是由大括號 括起來的。本例中主函數(shù)內(nèi)只有一個(gè)以cout開頭的語句。注意C+所有語句最后都應(yīng)當(dāng)有一個(gè)分號。 再看程序的第1行“#include ”,這不是C+的語句,而是C+的一個(gè)預(yù)處理命令,它以“#”開頭以與C+語句相區(qū)別,行的末尾沒有分號。,#include 是一個(gè)“包含命令”,它的作用是將文件iostream的內(nèi)容包含到該命令所在的程序文件中,代替該命令行。文件iostream的作用是向程序提供輸入或輸出時(shí)所需要的一些信息。iostream是i-o-stream 3個(gè)詞的組合,從它的形式就可以知道它代表“輸入輸出流”的意思,由于這類文件都放在程序單元的開頭,所以稱為“頭文件”(head f

5、ile)。在程序進(jìn)行編譯時(shí),先對所有的預(yù)處理命令進(jìn)行處理,將頭文件的具體內(nèi)容代替 #include命令行,然后再對該程序單元進(jìn)行整體編譯。,程序的第2行“using namespace std; ” 的意思是“使用命名空間std”。C+標(biāo)準(zhǔn)庫中的類和函數(shù)是在命名空間std中聲明的,因此程序中如果需要用到C+標(biāo)準(zhǔn)庫(此時(shí)就需要用#include命令行),就需要用“using namespace std; ”作聲明,表示要用到命名空間std中的內(nèi)容。 在初學(xué)C+時(shí),對本程序中的第1,2行可以不必深究,只需知道: 如果程序有輸入或輸出時(shí),必須使用“#include ”命令以提供必要的信息,同時(shí)要用“

6、using namespace std;” ,使程序能夠使用這些信息,否則程序編譯時(shí)將出錯。,例1.2 求a和b兩個(gè)數(shù)之和。 可以寫出以下程序: / 求兩數(shù)之和 (本行是注釋行) #include /預(yù)處理命令 using namespace std; /使用命名空間std int main( ) /主函數(shù)首部 /函數(shù)體開始 int a,b,sum; /定義變量 cinab; /輸入語句 sum=a+b; /賦值語句 couta+b=sumendl; /輸出語句 return 0; /如程序正常結(jié)束,向操作系統(tǒng)返回一個(gè)零值 /函數(shù)結(jié)束,本程序的作用是求兩個(gè)整數(shù)a和b之和sum。第1行“/求兩數(shù)

7、之和”是一個(gè)注釋行,C+規(guī)定在一行中如果出現(xiàn)“/”,則從它開始到本行末尾之間的全部內(nèi)容都作為注釋。 如果在運(yùn)行時(shí)從鍵盤輸入 123 456 則輸出為 a+b=579,例1.3 給兩個(gè)數(shù)x和y,求兩數(shù)中的大者。 在本例中包含兩個(gè)函數(shù)。 #include /預(yù)處理命令 using namespace std; int max(int x,int y) /定義max函數(shù),函數(shù)值為整型,形式參數(shù)x,y為整型 /max函數(shù)體開始 int z; /變量聲明,定義本函數(shù)中用到的變量z為整型 if(xy) z=x; /if語句,如果xy,則將x的值賦給z else z=y; /否則,將y的值賦給z retur

8、n(z); /將z的值返回,通過max帶回調(diào)用處 /max函數(shù)結(jié)束 int main( ) /主函數(shù), /主函數(shù)體開始 int a,b,m; /變量聲明 cinab; /輸入變量a和b的值 m=max(a,b); /調(diào)用max函數(shù),將得到的值賦給m coutmax=mn; /輸出大數(shù)m的值 return 0; /如程序正常結(jié)束,向操作系統(tǒng)返回一個(gè)零值 /主函數(shù)結(jié)束 本程序包括兩個(gè)函數(shù):主函數(shù)main和被調(diào)用的函數(shù)max。 程序運(yùn)行情況如下: 18 25 (輸入18和25給a和b) max=25 (輸出m的值) 注意輸入的兩個(gè)數(shù)據(jù)間用一個(gè)或多個(gè)空格間隔,不能以逗號或其他符號間隔。,在上面的程序中

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

10、=x; else z=y; return(z); 只要在被調(diào)用函數(shù)的首部的末尾加一個(gè)分號,就成為對該函數(shù)的函數(shù)聲明。函數(shù)聲明的位置應(yīng)當(dāng)在函數(shù)調(diào)用之前。,下面舉一個(gè)包含類(class)和對象(object)的C+程序,目的是使讀者初步了解C+是怎樣體現(xiàn)面向?qū)ο蟪绦蛟O(shè)計(jì)方法的。 例1.4 包含類的C+程序。 #include / 預(yù)處理命令 using namespace std; class Student / 聲明一個(gè)類,類名為Student private: / 以下為類中的私有部分 int num; / 私有變量num int score; / 私有變量score public: / 以下

11、為類中的公用部分 void setdata( ) / 定義公用函數(shù)setdata cinnum; / 輸入num的值 cinscore; / 輸入score的值 ,void display( ) / 定義公用函數(shù)display coutnum=numendl; / 輸出num的值 coutscore=scoreendl; /輸出score的值 ; ; / 類的聲明結(jié)束 Student stud1,stud2; /定義stud1和stud2為Student類的變量,稱為對象 int main( ) / 主函數(shù)首部 stud1.setdata( ); / 調(diào)用對象stud1的setdata函數(shù) s

12、tud2.setdata( ); / 調(diào)用對象stud2的setdata函數(shù) stud1.display( ); / 調(diào)用對象stud1的display函數(shù) stud2.display( ); / 調(diào)用對象stud2的display函數(shù) return 0; ,在一個(gè)類中包含兩種成員: 數(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組成了一個(gè)名為Student的“類”類型。成員函數(shù)是用來對數(shù)據(jù)成員進(jìn)行操作的。也就是說,一個(gè)類

13、是由一批數(shù)據(jù)以及對其操作的函數(shù)組成的。 類可以體現(xiàn)數(shù)據(jù)的封裝性和信息隱蔽。在上面的程序中,在聲明Student類時(shí),把類中的數(shù)據(jù)和函數(shù)分為兩大類: private(私有的)和public(公用的)。把全部數(shù)據(jù)(num,score)指定為私有的,把全部函數(shù)(setdata,display)指定為公用的。在大多數(shù)情況下,會把所有數(shù)據(jù)指定為私有,以實(shí)現(xiàn)信息隱蔽。,具有“類”類型特征的變量稱為“對象”(object)。 程序中第1824行是主函數(shù)。 程序運(yùn)行情況如下: 1001 98.5 (輸入學(xué)生1的學(xué)號和成績) 1002 76.5 (輸入學(xué)生2的學(xué)號和成績) num=1001 (輸出學(xué)生1的學(xué)號)

14、 score=98.5 (輸出學(xué)生1的成績) num=1002 (輸出學(xué)生2的學(xué)號) score=76.5 (輸出學(xué)生2的成績),C+程序的結(jié)構(gòu)和書寫格式歸納如下: (1) 一個(gè)C+程序可以由一個(gè)程序單位或多個(gè)程序單位構(gòu)成。每一個(gè)程序單位作為一個(gè)文件。在程序編譯時(shí),編譯系統(tǒng)分別對各個(gè)文件進(jìn)行編譯,因此,一個(gè)文件是一個(gè)編譯單元。 (2) 在一個(gè)程序單位中,可以包括以下幾個(gè)部分: 預(yù)處理命令。上節(jié)4個(gè)程序中都包括#include命令。 全局聲明部分(在函數(shù)外的聲明部分)。在這部分中包括對用戶自己定義的數(shù)據(jù)類型的聲明和程序中所用到的變量的定義。,1.3 C+程序的構(gòu)成和書寫形式, 函數(shù)。函數(shù)是實(shí)現(xiàn)操

15、作的部分,因此函數(shù)是程序中必須有的和最基本的組成部分。每一個(gè)程序必須包括一個(gè)或多個(gè)函數(shù),其中必須有一個(gè)(而且只能有一個(gè))主函數(shù)(main函數(shù))。 但是并不要求每一個(gè)程序文件都必須具有以上3個(gè)部分,可以缺少某些部分(包括函數(shù))。 (3) 一個(gè)函數(shù)由兩部分組成: 函數(shù)首部,即函數(shù)的第一行。包括函數(shù)名、函數(shù)類型、函數(shù)屬性、函數(shù)參數(shù)(形參)名、參數(shù)類型。 一個(gè)函數(shù)名后面必須跟一對圓括號, 函數(shù)參數(shù)可以缺省,如int main( )。, 函數(shù)體,即函數(shù)首部下面的大括號內(nèi)的部分。如果在一個(gè)函數(shù)中有多個(gè)大括號,則最外層的一對 為函數(shù)體的范圍。 函數(shù)體一般包括: 局部聲明部分 (在函數(shù)內(nèi)的聲明部分)。包括對本

16、函數(shù)中所用到的類型、函數(shù)的聲明和變量的定義。 對數(shù)據(jù)的聲明既可以放在函數(shù)之外(其作用范圍是全局的),也可以放在函數(shù)內(nèi)(其作用范圍是局部的,只在本函數(shù)內(nèi)有效)。 執(zhí)行部分。由若干個(gè)執(zhí)行語句組成,用來進(jìn)行有關(guān)的操作,以實(shí)現(xiàn)函數(shù)的功能。,(4) 語句包括兩類。一類是聲明語句,另一類是執(zhí)行語句。 C+對每一種語句賦予一種特定的功能。語句是實(shí)現(xiàn)操作的基本成分,顯然,沒有語句的函數(shù)是沒有意義的。C+語句必須以分號結(jié)束。 (5) 一個(gè)C+程序總是從main函數(shù)開始執(zhí)行的,而不論main函數(shù)在整個(gè)程序中的位置如何。 (6) 類(class)是C+新增加的重要的數(shù)據(jù)類型,是C+對C的最重要的發(fā)展。有了類,就可以

17、實(shí)現(xiàn)面向?qū)ο蟪绦蛟O(shè)計(jì)方法中的封裝、信息隱蔽、繼承、派生、多態(tài)等功能。在一個(gè)類中可以包括數(shù)據(jù)成員和成員函數(shù),他們可以被指定為私有的(private)和公用的(public)屬性。私有的數(shù)據(jù)成員和成員函數(shù)只能被本類的成員函數(shù)所調(diào)用。,(7)C+程序書寫格式自由,一行內(nèi)可以寫幾個(gè)語句, 一個(gè)語句可以分寫在多行上。C+程序沒有行號,也不像FORTRAN或COBOL那樣嚴(yán)格規(guī)定書寫格式(語句必須從某一列開始書寫)。 (8) 一個(gè)好的、有使用價(jià)值的源程序都應(yīng)當(dāng)加上必要的注釋,以增加程序的可讀性。C+還保留了C語言的注釋形式,可以用“/*/”對C+程序中的任何部分作注釋。在“/*”和“*/”之間的全部內(nèi)容作

18、為注釋。 用“/”作注釋時(shí),有效范圍只有一行,即本行有效,不能跨行。而用“/*/”作注釋時(shí)有效范圍為多行。只要在開始處有一個(gè)“/*”,在最后一行結(jié)束處有一個(gè)“*/”即可。因此,一般習(xí)慣是: 內(nèi)容較少的簡單注釋常用“/”,內(nèi)容較長的常用“/*/ ”。,一個(gè)程序從編寫到最后得到運(yùn)行結(jié)果要經(jīng)歷以下一些步驟。 1. 用C+語言編寫程序 用高級語言編寫的程序稱為“源程序”(source program)。C+的源程序是以.cpp作為后綴的(cpp是c plus plus 的縮寫)。 2. 對源程序進(jìn)行編譯 為了使計(jì)算機(jī)能執(zhí)行高級語言源程序,必須先用一種稱為“編譯器(complier)”的軟件(也稱編譯程

19、序或編譯系統(tǒng)),把源程序翻譯成二進(jìn)制形式的“目標(biāo)程序(object program)”。,1.4 C+程序的編寫和實(shí)現(xiàn),編譯是以源程序文件為單位分別編譯的。目標(biāo)程序一般以.obj或.o作為后綴(object 的縮寫)。編譯的作用是對源程序進(jìn)行詞法檢查和語法檢查。編譯時(shí)對文件中的全部內(nèi)容進(jìn)行檢查,編譯結(jié)束后會顯示出所有的編譯出錯信息。一般編譯系統(tǒng)給出的出錯信息分為兩種,一種是錯誤(error);一種是警告(warning) 。 3. 將目標(biāo)文件連接 在改正所有的錯誤并全部通過編譯后,得到一個(gè)或多個(gè)目標(biāo)文件。此時(shí)要用系統(tǒng)提供的“連接程序(linker)”將一個(gè)程序的所有目標(biāo)程序和系統(tǒng)的庫文件以及系

20、統(tǒng)提供的其他信息連接起來,最終形成一個(gè)可執(zhí)行的二進(jìn)制文件,它的后綴是.exe,是可以直接執(zhí)行的。,4. 運(yùn)行程序 運(yùn)行最終形成的可執(zhí)行的二進(jìn)制文件(.exe文件),得到運(yùn)行結(jié)果。 5. 分析運(yùn)行結(jié)果 如果運(yùn)行結(jié)果不正確,應(yīng)檢查程序或算法是否有問題。,圖1.1,在了解了C+語言的初步知識后,讀者最好盡快在計(jì)算機(jī)上編譯和運(yùn)行C+程序,以加深對C+程序的認(rèn)識,并初步掌握C+的上機(jī)操作。 讀者可以使用不同的C+編譯系統(tǒng),在不同的環(huán)境下編譯和運(yùn)行一個(gè)C+程序。但是需要強(qiáng)調(diào)的是,我們學(xué)習(xí)的是C+程序設(shè)計(jì),應(yīng)當(dāng)掌握的是標(biāo)準(zhǔn)C+,而不應(yīng)該只了解某一種“方言化”的C+。不應(yīng)當(dāng)只會使用一種C+編譯系統(tǒng),只能在一種

21、環(huán)境下工作,而應(yīng)當(dāng)能在不同的C+環(huán)境下運(yùn)行自己的程序,并且了解不同的C+編譯系統(tǒng)的特點(diǎn)和使用方法,在需要時(shí)能將自己的程序方便地移植到不同的平臺上。,1.5 關(guān)于C+上機(jī)實(shí)踐,在本書的參考書C+程序設(shè)計(jì)題解與上機(jī)指導(dǎo)一書中簡單介紹了在Visual C+ 6.0和GCC兩種典型的環(huán)境下運(yùn)行C+程序的方法。 請讀者選擇一種(如能做到兩種更好) C+編譯系統(tǒng),在該環(huán)境下輸入和運(yùn)行習(xí)題中的程序,掌握上機(jī)的方法和步驟。,第2章 數(shù)據(jù)類型與表達(dá)式,2.1 C+的數(shù)據(jù)類型 2.2 常量 2.3 變量 2.4 C+的運(yùn)算符 2.5 算術(shù)運(yùn)算符與算術(shù)表達(dá)式 2.6 賦值運(yùn)算符與賦值表達(dá)式 2.7 逗號運(yùn)算符與逗號

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

23、ouble) 長雙精度型(long double) 布爾型(bool) 枚舉類型(enum) 數(shù)據(jù)類型 構(gòu)造類型 數(shù)組類型 結(jié)構(gòu)體類型(struct) 共用體類型(union) 類類型(class) 指針類型 引用類型 空類型(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ù)的情況。

24、,說明: (1) 整型數(shù)據(jù)分為長整型(long int)、一般整型(int)和短整型(short int)。在int前面加long和short分別表示長整型和短整型。 (2) 整型數(shù)據(jù)的存儲方式為按二進(jìn)制數(shù)形式存儲,例如十進(jìn)制整數(shù)85的二進(jìn)制形式為1010101,則在內(nèi)存中的存儲形式如圖2.1所示。 圖2.1,(3) 在整型符號int和字符型符號char的前面,可以加修飾符signed(表示“有符號”)或unsigned(表示“無符號”)。如果指定為signed,則數(shù)值以補(bǔ)碼形式存放,存儲單元中的最高位(bit)用來表示數(shù)值的符號。如果指定為unsigned,則數(shù)值沒有符號,全部二進(jìn)制位都用來

25、表示數(shù)值本身。例如短整型數(shù)據(jù)占兩個(gè)字節(jié) ,見圖2.2。 圖2.2,有符號時(shí),能存儲的最大值為215-1,即32767,最小值為-32768。無符號時(shí),能存儲的最大值為216-1,即65535,最小值為0。有些數(shù)據(jù)是沒有負(fù)值的,可以使用unsigned,它存儲正數(shù)的范圍比用signed時(shí)要大一倍。 (4) 浮點(diǎn)型(又稱實(shí)型)數(shù)據(jù)分為單精度(float)、雙精度(double)和長雙精度(long double)3種,在Visual C+ 6.0中,對float提供6位有效數(shù)字,對double提供15位有效數(shù)字,并且float和double的數(shù)值范圍不同。對float分配4個(gè)字節(jié),對double和

26、long double分配8個(gè)字節(jié)。 (5) 表中類型標(biāo)識符一欄中,方括號 包含的部分可以省寫,如short和short int等效,unsigned int和unsigned等效。,常量的值是不能改變的,一般從其字面形式即可判別是否為常量。常量包括兩大類,即數(shù)值型常量(即常數(shù))和字符型常量。如12,0,-3為整型常量,4.6,-1.23為實(shí)型常量,包含在兩個(gè)單撇號之間的字符為字符常量,如a,x。這種從字面形式即可識別的常量稱為“字面常量”或“直接常量”。,2.2 常量 2.2.1 什么是常量,數(shù)值常量就是通常所說的常數(shù)。在C+中,數(shù)值常量是區(qū)分類型的,從字面形式即可識別其類型。 1. 整型常

27、量(整數(shù))的類型 在上一節(jié)中已知道: 整型數(shù)據(jù)可分為int,short int,long int以及unsigned int,unsigned short,unsigned long等類別。整型常量也分為以上類別。為什么將數(shù)值常量區(qū)分為不同的類別呢?因?yàn)樵谶M(jìn)行賦值或函數(shù)的參數(shù)虛實(shí)結(jié)合時(shí)要求數(shù)據(jù)類型匹配。 那么,一個(gè)整型常量怎樣從字面上區(qū)分為以上的類別呢?,2.2.2 數(shù)值常量,(1) 一個(gè)整數(shù),如果其值在-32768+32767范圍內(nèi),認(rèn)為它是short int型,它可以賦值給short int型、int型和long int型變量。 (2) 一個(gè)整數(shù),如果其值超過了上述范圍,而在-214748

28、3648+2147483647范圍內(nèi),則認(rèn)為它是long int型,可以將它賦值給一個(gè)int或long int型變量。 (3) 如果某一計(jì)算機(jī)系統(tǒng)的C+版本(例如Visual C+)確定int與long int型數(shù)據(jù)在內(nèi)存中占據(jù)的長度相同,則它們能夠表示的數(shù)值的范圍相同。因此,一個(gè)int型的常量也同時(shí)是一個(gè)long int型常量,可以賦給 int 型或long int型變量。 (4) 常量無unsigned型。但一個(gè)非負(fù)值的整數(shù)可以賦值給unsigned整型變量,只要它的范圍不超過變量的取值范圍即可。,一個(gè)整型常量可以用3種不同的方式表示: (1) 十進(jìn)制整數(shù)。如1357,-432,0等。在一

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

30、數(shù)可以用兩種不同的方式表示: (1) 十進(jìn)制小數(shù)形式。如21.456,-7.98等。它一般由整數(shù)部分和小數(shù)部分組成,可以省略其中之一(如78.或.06,.0),但不能二者皆省略。C+編譯系統(tǒng)把用這種形式表示的浮點(diǎn)數(shù)一律按雙精度常量處理,在內(nèi)存中占8個(gè)字節(jié)。如果在實(shí)數(shù)的數(shù)字之后加字母F或f,表示此數(shù)為單精度浮點(diǎn)數(shù),如1234F,-43f,占4個(gè)字節(jié)。如果加字母L或l,表示此數(shù)為長雙精度數(shù)(long double),在GCC中占12個(gè)字節(jié),在Visual C+ 6.0中占8個(gè)字節(jié)。,(2) 指數(shù)形式(即浮點(diǎn)形式) 一個(gè)浮點(diǎn)數(shù)可以寫成指數(shù)形式,如3.14159可以表示為0.314159101,3.1

31、4159100,31.415910-1,314.15910-2等形式。在程序中應(yīng)表示為: 0.314159e1,3.14159e0,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ù)部分的存在,使得同一個(gè)浮點(diǎn)數(shù)可以用不同的指數(shù)形式來表示,數(shù)字部分中小數(shù)點(diǎn)的位置是浮動的。例如:,a=0.314159e1; a=3.14159e0; a=31.4159e-1; a=314.159

32、e-2; 以上4個(gè)賦值語句中,用了不同形式的浮點(diǎn)數(shù),但其作用是相同的。 在程序中不論把浮點(diǎn)數(shù)寫成小數(shù)形式還是指數(shù)形式,在內(nèi)存中都是以指數(shù)形式(即浮點(diǎn)形式)存儲的。例如不論在程序中寫成314.159或314.159e0,31.4159e1,3.14159e2, 0.314159e3等形式,在內(nèi)存中都是以規(guī)范化的指數(shù)形式存放,如圖2.3所示。 圖2.3,數(shù)字部分必須小于1,同時(shí),小數(shù)點(diǎn)后面第一個(gè)數(shù)字必須是一個(gè)非0數(shù)字,例如不能是0.0314159。因此314.159和314.159e0,31.4159e1,3.14159e2, 0.314159e3在內(nèi)存中表示成0.314159103。存儲單元分為

33、兩部分,一部分用來存放數(shù)字部分,一部分用來存放指數(shù)部分。為便于理解,在圖2.3中是用十進(jìn)制表示的,實(shí)際上在存儲單元中是用二進(jìn)制數(shù)來表示小數(shù)部分,用2的冪次來表示指數(shù)部分的。 對于以指數(shù)形式表示的數(shù)值常量,也都作為雙精度常量處理。,1. 普通的字符常量 用單撇號括起來的一個(gè)字符就是字符型常量。如a,#,%,D都是合法的字符常量,在內(nèi)存中占一個(gè)字節(jié)。注意: 字符常量只能包括一個(gè)字符,如AB 是不合法的。字符常量區(qū)分大小寫字母,如A和a是兩個(gè)不同的字符常量。撇號()是定界符,而不屬于字符常量的一部分。如couta;輸出的是一個(gè)字母“a”,而不是3個(gè)字符“a ”。,2.2.3 字符常量,2. 轉(zhuǎn)義字符

34、常量 除了以上形式的字符常量外,C+還允許用一種特殊形式的字符常量,就是以 “”開頭的字符序列。例如,n代表一個(gè)“換行”符?!癱outn; ” 將輸出一個(gè)換行,其作用與“coutendl; ” 相同。這種“控制字符”,在屏幕上是不能顯示的。在程序中也無法用一個(gè)一般形式的字符表示,只能采用特殊形式來表示。 常用的以“”開頭的特殊字符見書中表2.2。,3. 字符數(shù)據(jù)在內(nèi)存中的存儲形式及其使用方法 將一個(gè)字符常量存放到內(nèi)存單元時(shí),實(shí)際上并不是把該字符本身放到內(nèi)存單元中去,而是將該字符相應(yīng)的ASCII代碼放到存儲單元中。如果字符變量c1的值為a,c2的值為b,則在變量中存放的是a的ASCII碼97,b

35、 的ASCII碼98,如圖2.4(a)所示,實(shí)際上在內(nèi)存中是以二進(jìn)制形式存放的,如圖2.4(b)所示。 圖2.4,既然字符數(shù)據(jù)是以ASCII碼存儲的,它的存儲形式就與整數(shù)的存儲形式類似。這樣,在C+中字符型數(shù)據(jù)和整型數(shù)據(jù)之間就可以通用。一個(gè)字符數(shù)據(jù)可以賦給一個(gè)整型變量,反之,一個(gè)整型數(shù)據(jù)也可以賦給一個(gè)字符變量。也可以對字符數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算,此時(shí)相當(dāng)于對它們的ASCII碼進(jìn)行算術(shù)運(yùn)算。 例2.1 將字符賦給整型變量。 #include using namespace std; int main( ) int i,j; /i和j是整型變量 i=A; /將一個(gè)字符常量賦給整型變量i j=B; /將一

36、個(gè)字符常量賦給整型變量j couti jn; /輸出整型變量i和j的值,n 是換行符 return 0; ,執(zhí)行時(shí)輸出 65 66 i和j被指定為整型變量。但在第5和第6行中,將字符A和B分別賦給i和j,它的作用相當(dāng)于以下兩個(gè)賦值語句: i65;j66; 因?yàn)锳和B的ASCII碼為65和66。在程序的第5和第6行是把65和66直接存放到i和j的內(nèi)存單元中。因此輸出65和66。 可以看到:在一定條件下,字符型數(shù)據(jù)和整型數(shù)據(jù)是可以通用的。但是應(yīng)注意字符數(shù)據(jù)只占一個(gè)字節(jié),它只能存放0255范圍內(nèi)的整數(shù)。,例2.2 字符數(shù)據(jù)與整數(shù)進(jìn)行算術(shù)運(yùn)算。下面程序的作用是將小寫字母轉(zhuǎn)換為大寫字母。 #includ

37、e using namespace std; int main( ) char c1,c2; c1=a; c2=b; c1=c1-32; c2=c2-32; coutc1 c2endl; return 0; ,運(yùn)行結(jié)果為 A B a的ASCII碼為97,而A的ASCII碼為65,b為98,B為66。從ASCII代碼表中可以看到每一個(gè)小寫字母比它相應(yīng)的大寫字母的ASCII代碼大32。C+符數(shù)據(jù)與數(shù)值直接進(jìn)行算術(shù)運(yùn)算,a-32得到整數(shù)65,b-32得到整數(shù)66。將65和66存放在c1,c2中,由于c1,c2是字符變量,因此用cout輸出c1,c2時(shí),得到字符A和B(A的ASCII碼為65,B的AS

38、CII碼為66)。,4. 字符串常量 用雙撇號括起來的部分就是字符串常量,如abc,Hello!,a+b,Liping都是字符串常量。字符串常量abc在內(nèi)存中占4個(gè)字節(jié)(而不是3個(gè)字節(jié)),見圖2.5。 圖2.5 編譯系統(tǒng)會在字符串最后自動加一個(gè)0作為字符串結(jié)束標(biāo)志。但0并不是字符串的一部分,它只作為字符串的結(jié)束標(biāo)志。如 coutabcendl; 輸出3個(gè)字符abc,而不包括0。,注意: a和a代表不同的含義,a是字符串常量,a 是字符常量。前者占兩個(gè)字節(jié),后者占1個(gè)字節(jié)。請分析下面的程序片段: char c; /定義一個(gè)字符變量 c=a; /正確 c=a; /錯誤,c只能容納一個(gè)字符 字符串常

39、量要用字符數(shù)組來存放,見第5章。 請思考: 字符串常量abcn包含幾個(gè)字符?不是5個(gè)而是4個(gè)字符,其中“n”是一個(gè)轉(zhuǎn)義字符。但它在內(nèi)存中占5個(gè)字節(jié)(包括一個(gè)“0”字符) 。編譯系統(tǒng)遇到“”時(shí)就會把它認(rèn)作轉(zhuǎn)義字符的標(biāo)志,把它和其后的字符一起作為一個(gè)轉(zhuǎn)義字符。,如果“”后面的字符不能與“”組成一個(gè)合法的轉(zhuǎn)義字符(如c),則在編譯時(shí)顯示出錯信息。如果希望將“”字符也作為字符串中的一個(gè)字符,則應(yīng)寫為abcn,此時(shí)字符包括5個(gè)字符,即a,b,c,n。如果有以下輸出語句: coutabcnendl; 則會輸出: abc,然后換行。同理執(zhí)行 coutI say Thank you!n; 的輸出是: I sa

40、y Thank you! 如果在一個(gè)字符串中最后一個(gè)字符為“”,則表示它是續(xù)行符,下一行的字符是該字符串的一部分,且在兩行字符串間無空格。如,coutWe must study C /本行最后的“”后面的空格和換行均不起作用 + hard!; /本行的字符緊連在上一行最后的“”前面字符之后 則輸出: We must study C+ hard!,為了編程和閱讀的方便,在C+程序設(shè)計(jì)中,常用一個(gè)符號名代表一個(gè)常量,稱為符號常量,即以標(biāo)識符形式出現(xiàn)的常量。 例2.3 符號常量的使用。 #define PRICE 30 /注意這不是語句,末尾不要加分號 int main ( ) int num,to

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

42、define PRICE 35,其實(shí)在前面的例子中已經(jīng)多次用到了變量。在程序運(yùn)行期間其值可以改變的量稱為變量。一個(gè)變量應(yīng)該有一個(gè)名字,并在內(nèi)存中占據(jù)一定的存儲單元,在該存儲單元中存放變量的值。請注意區(qū)分變量名和變量值這兩個(gè)不同的概念,見圖2.6。 圖2.6,2.3 變量 2.3.1 什么是變量,先介紹標(biāo)識符的概念。和其他高級語言一樣,用來標(biāo)識變量、符號常量、函數(shù)、數(shù)組、類型等實(shí)體名字的有效字符序列稱為標(biāo)識符(identifier)。簡單地說,標(biāo)識符就是一個(gè)名字。變量名是標(biāo)識符的一種,變量的名字必須遵循標(biāo)識符的命名規(guī)則。 C+規(guī)定標(biāo)識符只能由字母、數(shù)字和下劃線3種字符組成,且第一個(gè)字符必須為字母

43、或下劃線。下面列出的是合法的標(biāo)識符,也是合法的變量名: sum, average, total, day, month, Student_name, tan, BASIC, li_ling 下面是不合法的標(biāo)識符和變量名:,2.3.2 變量名規(guī)則,M.D.John, $123, #33, 3G64, Ling li, C+, Zhang-ling, U.S.A. 注意,在C+中,大寫字母和小寫字母被認(rèn)為是兩個(gè)不同的字符。因此,sum和SUM是兩個(gè)不同的變量名。一般地,變量名用小寫字母表示,與人們?nèi)粘A?xí)慣一致,以增加可讀性。應(yīng)注意變量名不能與C+的關(guān)鍵字、系統(tǒng)函數(shù)名和類名相同。在國外軟件開發(fā)工作中

44、,常習(xí)慣在變量前面加一個(gè)字母以表示該變量的類型,如iCount表示這是一個(gè)整型變量,cSex表示這是一個(gè)字符型變量。 C+沒有規(guī)定標(biāo)識符的長度(字符個(gè)數(shù)),但各個(gè)具體的C編譯系統(tǒng)都有自己的規(guī)定。有的系統(tǒng)取32個(gè)字符,超過的字符不被識別。,在C+語言中,要求對所有用到的變量作強(qiáng)制定義,也就是必須“先定義,后使用”,如例2.2和例2.3那樣。定義變量的一般形式是 變量類型 變量名表列; 變量名表列指的是一個(gè)或多個(gè)變量名的序列。如 float a,b,c,d,e; 定義a,b,c,d,e為單精度型變量,注意各變量間以逗號分隔,最后是分號。 可以在定義變量時(shí)指定它的初值。如 float a=83.5,

45、b,c=64.5,d=81.2,e; /對變量a,c,d指定了初值,b和d未指定初值,2.3.3 定義變量,C語言要求變量的定義應(yīng)該放在所有的執(zhí)行語句之前,而C+則放松了限制,只要求在第一次使用該變量之前進(jìn)行定義即可。也就是說,它可以出現(xiàn)在語句的中間,如 int a; /定義變量a(在使用a之前定義) a=3; /執(zhí)行語句,對a賦值 float b; /定義變量b(在使用b之前定義) b=4.67; /執(zhí)行語句,對b賦值 char c; /定義變量c(在使用c之前定義) c=A; /執(zhí)行語句 ,對c賦值 C+要求對變量作強(qiáng)制定義的目的是:,(1) 凡未被事先定義的,不作為變量名,這就能保證程序

46、中變量名使用得正確。例如,如果在聲明部分寫了 int student; 而在執(zhí)行語句中錯寫成statent。如 statent=30; 在編譯時(shí)檢查出statent未經(jīng)定義,作為錯誤處理。輸出“變量statent未經(jīng)聲明”的信息,便于用戶發(fā)現(xiàn)錯誤,避免變量名使用時(shí)出錯。 (2) 每一個(gè)變量被指定為一確定類型,在編譯時(shí)就能為其分配相應(yīng)的存儲單元。如指定和為int型,一般的編譯系統(tǒng)對其各分配4個(gè)字節(jié),并按整數(shù)方式存儲數(shù)據(jù)。,(3) 指定每一變量屬于一個(gè)特定的類型,這就便于在編譯時(shí),據(jù)此檢查該變量所進(jìn)行的運(yùn)算是否合法。例如,整型變量a和b,可以進(jìn)行求余運(yùn)算: a%b 是“求余”(見24 節(jié)),得到a

47、/b的余數(shù)。如果將a和b指定為實(shí)型變量,則不允許進(jìn)行“求余”運(yùn)算,在編譯時(shí)會給出有關(guān)的出錯信息。,允許在定義變量時(shí)對它賦予一個(gè)初值,這稱為變量初始化。初值可以是常量,也可以是一個(gè)有確定值的表達(dá)式。如 float a,b=5.78*3.5,c=2*sin(2.0); 表示定義了a,b,c為單精度浮點(diǎn)型變量,對b初始化為5.78*3, 對c初始化為2*sin(2.0),在編譯連接后,從標(biāo)準(zhǔn)函數(shù)庫得到正弦函數(shù)sin(2.0)的值,因此變量c有確定的初值。變量a未初始化。 如果對變量未賦初值,則該變量的初值是一個(gè)不可預(yù)測的值,即該存儲單元中當(dāng)時(shí)的內(nèi)容是不知道的。例如,若未對a和b賦值,執(zhí)行輸出語句,2

48、.3.4 為變量賦初值,couta b cendl; 輸出結(jié)果可能為 1.48544e-38 15 1.81858 (各次運(yùn)行情況可能不同) 初始化不是在編譯階段完成的(只有在第4章中介紹的靜態(tài)存儲變量和外部變量的初始化是在編譯階段完成的),而是在程序運(yùn)行時(shí)執(zhí)行本函數(shù)時(shí)賦予初值的,相當(dāng)于執(zhí)行一個(gè)賦值語句。例如, int a=3; 相當(dāng)于以下兩個(gè)語句 : int a; / 指定為整型變量 a=3; / 賦值語句,將賦給,對多個(gè)變量賦予同一初值,必須分別指定,不能寫成 float a=b=c=4.5; 而應(yīng)寫成 float a=4.5,b=4.5,c=4.5; 或 float a,b,c=4.5;

49、 a=b=c;,在定義變量時(shí),如果加上關(guān)鍵字const,則變量的值在程序運(yùn)行期間不能改變,這種變量稱為常變量(constant variable)。例如, const int a=3; /用const來聲明這種變量的值不能改變,指定其值始終為3 在定義常變量時(shí)必須同時(shí)對它初始化(即指定其值),此后它的值不能再改變。常變量不能出現(xiàn)在賦值號的左邊。例如上面一行不能寫成 const int a; a=3; /常變量不能被賦值 可以用表達(dá)式對常變量初始化,如,2.3.5 常變量,const int b=3+6,c=3*cos(1.5); /b的值被指定為9,c的值被指定為3*cos(1.5) 但應(yīng)注意

50、,由于使用了系統(tǒng)標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)cos,必須將包含該函數(shù)有關(guān)的信息的頭文件“cmath”(或math.h)包含到本程序單位中來,可以在本程序單位的開頭加上以下#include命令: #include 或 #include 變量的值應(yīng)該是可以變化的,怎么值是固定的量也稱變量呢?其實(shí),從計(jì)算機(jī)實(shí)現(xiàn)的角度看,變量的特征是存在一個(gè)以變量名命名的存儲單元,在一般情況下,存儲單元中的內(nèi)容是可以變化的。對常變量來說,無非在此變量的基礎(chǔ)上加上一個(gè)限定: 存儲單元中的值不允許變化。因此常變量又稱為只讀變量(read-only-variable)。,請區(qū)別用#define命令定義的符號常量和用const定義的常變量。

51、符號常量只是用一個(gè)符號代替一個(gè)字符串,在預(yù)編譯時(shí)把所有符號常量替換為所指定的字符串,它沒有類型,在內(nèi)存中并不存在以符號常量命名的存儲單元。而常變量具有變量的特征,它具有類型,在內(nèi)存中存在著以它命名的存儲單元,可以用sizeof運(yùn)算符測出其長度。與一般變量惟一的不同是指定變量的值不能改變。用#define命令定義符號常量是C語言所采用的方法,C+把它保留下來是為了和C兼容。C+的程序員一般喜歡用const定義常變量。雖然二者實(shí)現(xiàn)的方法不同,但從使用的角度看,都可以認(rèn)為用了一個(gè)標(biāo)識符代表了一個(gè)常量。有些書上把用const定義的常變量也稱為定義常量,但讀者應(yīng)該了解它和符號常量的區(qū)別。,C+的運(yùn)算符十

52、分豐富,使得C+的運(yùn)算十分靈活方便。例如把賦值號(=)也作為運(yùn)算符處理,這樣,a=b=c=4就是合法的表達(dá)式,這是與其他語言不同的。C+提供了以下運(yùn)算符: (1) 算術(shù)運(yùn)算符 +(加)-(減) *(乘) /(除) %(整除求余)+(自加) -(自減) (2) 關(guān)系運(yùn)算符 (大于)(小于) (等于)(大于或等于)(小于或等于)!(不等于),2.4 C+的運(yùn)算符,() 邏輯運(yùn)算符 (邏輯與) |(邏輯或) ?。ㄟ壿嫹牵?() 位運(yùn)算符 (按位右移) (按位與) |(按位或) (按位異或) (按位取反) () 賦值運(yùn)算符 (及其擴(kuò)展賦值運(yùn)算符) () 條件運(yùn)算符 (?:) () 逗號運(yùn)算符 (,)

53、() 指針運(yùn)算符 (*) (9) 引用運(yùn)算符和地址運(yùn)算符 () (10) 求字節(jié)數(shù)運(yùn)算符() (11) 強(qiáng)制類型轉(zhuǎn)換運(yùn)算符( (類型) 或類型( ),(12) 成員運(yùn)算符 (.) (13) 指向成員的運(yùn)算符 (-) (14) 下標(biāo)運(yùn)算符 ( ) (15) 其他 (如函數(shù)調(diào)用運(yùn)算符() 在本章中主要介紹算術(shù)運(yùn)算符與算術(shù)表達(dá)式,賦值運(yùn)算符與賦值表達(dá)式,逗號運(yùn)算符與逗號表達(dá)式,其他運(yùn)算符將在以后各章中陸續(xù)介紹。,(加法運(yùn)算符,或正值運(yùn)算符。如3+5,+3) (減法運(yùn)算符,或負(fù)值運(yùn)算符。如5-2,-3) * (乘法運(yùn)算符。如3*5) (除法運(yùn)算符。如5/3) (模運(yùn)算符,或稱求余運(yùn)算符,兩側(cè)均應(yīng)為整型

54、數(shù)據(jù),如的值為)。,2.5 算術(shù)運(yùn)算符與算術(shù)表達(dá)式 2.5.1 基本的算術(shù)運(yùn)算符,需要說明,兩個(gè)整數(shù)相除的結(jié)果為整數(shù),如5/3的結(jié)果值為1,舍去小數(shù)部分。但是,如果除數(shù)或被除數(shù)中有一個(gè)為負(fù)值,則舍入的方向是不固定的。例如,-5/3在有的C+系統(tǒng)上得到結(jié)果-1,有的C+系統(tǒng)則給出結(jié)果-2。多數(shù)編譯系統(tǒng)采取“向零取整”的方法,即5/3的值等于1,-5/3的值等于-1,取整后向零靠攏。 如果參加+, -, *, / 運(yùn)算的兩個(gè)數(shù)中有一個(gè)數(shù)為float型數(shù)據(jù),則運(yùn)算的結(jié)果是double型,因?yàn)镃+在運(yùn)算時(shí)對所有float型數(shù)據(jù)都按double型數(shù)據(jù)處理。,用算術(shù)運(yùn)算符和括號將運(yùn)算對象(也稱操作數(shù))連接

55、起來的、符合C+語法規(guī)則的式子,稱C+算術(shù)表達(dá)式。運(yùn)算對象包括常量、變量、函數(shù)等。例如,下面是一個(gè)合法的C+算術(shù)表達(dá)式: a*b/c-1.5+a C+語言規(guī)定了運(yùn)算符的優(yōu)先級和結(jié)合性。在求解表達(dá)式時(shí),先按運(yùn)算符的優(yōu)先級別高低次序執(zhí)行,例如先乘除后加減。如有表達(dá)式a-b*c,b的左側(cè)為減號,右側(cè)為乘號,而乘號優(yōu)先于減號,因此,相當(dāng)于a-(b*c)。如果在一個(gè)運(yùn)算對象兩側(cè)的運(yùn)算符的優(yōu)先級別相同,如a-b+c,則按規(guī)定的“結(jié)合方向”處理。,2.5.2 算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級與結(jié)合性,C+規(guī)定了各種運(yùn)算符的結(jié)合方向(結(jié)合性),算術(shù)運(yùn)算符的結(jié)合方向?yàn)椤白宰笾劣摇?,即先左后右,因此b先與減號結(jié)合,執(zhí)行

56、a-b的運(yùn)算,再執(zhí)行加c的運(yùn)算。“自左至右的結(jié)合方向”又稱“左結(jié)合性”,即運(yùn)算對象先與左面的運(yùn)算符結(jié)合。以后可以看到有些運(yùn)算符的結(jié)合方向?yàn)椤白杂抑磷蟆?,即右結(jié)合性(例如賦值運(yùn)算符)。關(guān)于“結(jié)合性”的概念在其他一些高級語言中是沒有的,是C和C+的特點(diǎn)之一,希望能弄清楚。附錄B列出了所有運(yùn)算符以及它們的優(yōu)先級別和結(jié)合性。,在表達(dá)式中常遇到不同類型數(shù)據(jù)之間進(jìn)行運(yùn)算,如 10+a+1.5-8765.1234*b 在進(jìn)行運(yùn)算時(shí),不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算。轉(zhuǎn)換的規(guī)則按圖2.7所示。 圖2.7,2.5.3 表達(dá)式中各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算,假設(shè)已指定為整型變量,為float變量,為d

57、ouble型變量,為long型,有下面表達(dá)式: 10+a+i*f-d/e 運(yùn)算次序?yàn)椋?進(jìn)行10+a的運(yùn)算,先將轉(zhuǎn)換成整數(shù)97,運(yùn)算結(jié)果為107。進(jìn)行i*f的運(yùn)算。先將i與f都轉(zhuǎn)換成double型,運(yùn)算結(jié)果為double型。整數(shù)107與i*f的積相加。先將整數(shù)107轉(zhuǎn)換成雙精度數(shù)(小數(shù)點(diǎn)后加若干個(gè)0,即107.00000),結(jié)果為double型。將變量e轉(zhuǎn)換成double型,d/e結(jié)果為double型。將10+a+i*f的結(jié)果與d/e的商相減,結(jié)果為double型。 上述的類型轉(zhuǎn)換是由系統(tǒng)自動進(jìn)行的。,在C和C+中,常在表達(dá)式中使用自增(+)和自減(-)運(yùn)算符,他們的作用是使變量的值增1或減1,如 +i(在使用i之前,先使i的值加1,如果i的原值為3,則執(zhí)行j=+i后,j的值為4) -i (在使用i之前,先使i的值減1,如果i的原值為3,則執(zhí)行j=-i后,j的值為2) i+ (在使用i之后,使i的值加1,如果i的原值為3,則執(zhí)行j=i+后,j的值為3,然后i變?yōu)?) i-(在使用i之后,使i的值減1,如果i的原值為3,則執(zhí)行j=i-后,j的值為3,然后i變?yōu)?),2.5.4 自增和自減運(yùn)算符,+i是先執(zhí)行ii+1后,再使用i的值;而i+是先使用i的值后,再執(zhí)行ii+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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論