




已閱讀5頁,還剩1223頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
C+程序設(shè)計(jì),中國高等院校計(jì)算機(jī)基礎(chǔ)教育課程體系規(guī)劃教材,譚浩強(qiáng) 編著,總 目 錄,第1篇 基 本 知 識(shí) 第1章 C+的初步知識(shí) 第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+的初步知識(shí) 第2章 數(shù)據(jù)類型與表達(dá)式,第1篇 基 本 知 識(shí),第1章 C+的初步知識(shí),*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ī)高級(jí)語言誕生于1954年,它是FORTRAN語言。先后出現(xiàn)了多種計(jì)算機(jī)高級(jí)語言。其中使用最廣泛、影響最大的當(dāng)推BASIC語言和C語言。 BASIC語言是1964年在FORTRAN語言的基礎(chǔ)上簡化而成的,它是為初學(xué)者設(shè)計(jì)的小型高級(jí)語言。 C語言是1972年由美國貝爾實(shí)驗(yàn)室的D.M.Ritchie研制成功的。它不是為初學(xué)者設(shè)計(jì)的,而是為計(jì)算機(jī)專業(yè)人員設(shè)計(jì)的。大多數(shù)系統(tǒng)軟件和許多應(yīng)用軟件都是用C語言編寫的。,*1.1 從C到C+,但是隨著軟件規(guī)模的增大,用C語言編寫程序漸漸顯得有些吃力了。 C+是由AT&T Bell(貝爾)實(shí)驗(yàn)室的Bjarne Stroustrup博士及其同事于20世紀(jì)80年代初在C語言的基礎(chǔ)上開發(fā)成功的。C+保留了C語言原有的所有優(yōu)點(diǎn),增加了面向?qū)ο蟮臋C(jī)制。 C+是由C發(fā)展而來的,與C兼容。用C語言寫的程序基本上可以不加修改地用于C+。從C+的名字可以看出它是C的超集。C+既可用于面向過程的結(jié)構(gòu)化程序設(shè)計(jì),又可用于面向?qū)ο蟮某绦蛟O(shè)計(jì),是一種功能強(qiáng)大的混合型的程序設(shè)計(jì)語言。,C+對C的“增強(qiáng)”,表現(xiàn)在兩個(gè)方面: (1) 在原來面向過程的機(jī)制基礎(chǔ)上,對C語言的功能做了不少擴(kuò)充。 (2) 增加了面向?qū)ο蟮臋C(jī)制。 面向?qū)ο蟪绦蛟O(shè)計(jì),是針對開發(fā)較大規(guī)模的程序而提出來的,目的是提高軟件開發(fā)的效率。 不要把面向?qū)ο蠛兔嫦蜻^程對立起來,面向?qū)ο蠛兔嫦蜻^程不是矛盾的,而是各有用途、互為補(bǔ)充的。 學(xué)習(xí)C+,既要會(huì)利用C+進(jìn)行面向過程的結(jié)構(gòu)化程序設(shè)計(jì),也要會(huì)利用C+進(jìn)行面向?qū)ο蟮某绦蛟O(shè)計(jì)。本書既介紹C+在面向過程程序設(shè)計(jì)中的應(yīng)用,也介紹C+在面向?qū)ο蟪绦蛟O(shè)計(jì)中的應(yīng)用。,例1.1 輸出一行字符: “This is a C+ program.”。 程序如下: #include /包含頭文件iostream using namespace std; /使用命名空間std int main( ) cout“This is a C+ program.“; return 0; 在運(yùn)行時(shí)會(huì)在屏幕上輸出以下一行信息: This is a C+ program.,*1.2 最簡單的C+程序,用main代表“主函數(shù)”的名字。每一個(gè)C+程序都必須有一個(gè) main 函數(shù)。main前面的int的作用是聲明函數(shù)的類型為整型。程序第6行的作用是向操作系統(tǒng)返回一個(gè)零值。如果程序不能正常執(zhí)行,則會(huì)自動(dòng)向操作系統(tǒng)返回一個(gè)非零值,一般為-1。 函數(shù)體是由大括號(hào) 括起來的。本例中主函數(shù)內(nèi)只有一個(gè)以cout開頭的語句。注意C+所有語句最后都應(yīng)當(dāng)有一個(gè)分號(hào)。 再看程序的第1行“#include ”,這不是C+的語句,而是C+的一個(gè)預(yù)處理命令,它以“#”開頭以與C+語句相區(qū)別,行的末尾沒有分號(hào)。,#include 是一個(gè)“包含命令”,它的作用是將文件iostream的內(nèi)容包含到該命令所在的程序文件中,代替該命令行。文件iostream的作用是向程序提供輸入或輸出時(shí)所需要的一些信息。iostream是i-o-stream 3個(gè)詞的組合,從它的形式就可以知道它代表“輸入輸出流”的意思,由于這類文件都放在程序單元的開頭,所以稱為“頭文件”(head file)。在程序進(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í)要用“using namespace std;” ,使程序能夠使用這些信息,否則程序編譯時(shí)將出錯(cuò)。,例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; /賦值語句 cout“a+b=“sumendl; /輸出語句 return 0; /如程序正常結(jié)束,向操作系統(tǒng)返回一個(gè)零值 /函數(shù)結(jié)束,本程序的作用是求兩個(gè)整數(shù)a和b之和sum。第1行“/求兩數(shù)之和”是一個(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 return(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 cout“max=“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è)空格間隔,不能以逗號(hào)或其他符號(hào)間隔。,在上面的程序中,max函數(shù)出現(xiàn)在main函數(shù)之前,因此在main函數(shù)中調(diào)用max函數(shù)時(shí),編譯系統(tǒng)能識(shí)別max是已定義的函數(shù)名。如果把兩個(gè)函數(shù)的位置對換一下,即先寫main函數(shù),后寫max函數(shù),這時(shí)在編譯main函數(shù)遇到max時(shí),編譯系統(tǒng)無法知道m(xù)ax代表什么含義,因而無法編譯,按出錯(cuò)處理。 為了解決這個(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=x; else z=y; return(z); 只要在被調(diào)用函數(shù)的首部的末尾加一個(gè)分號(hào),就成為對該函數(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: / 以下為類中的公用部分 void setdata( ) / 定義公用函數(shù)setdata cinnum; / 輸入num的值 cinscore; / 輸入score的值 ,void display( ) / 定義公用函數(shù)display cout“num=“numendl; / 輸出num的值 cout“score=“scoreendl; /輸出score的值 ; ; / 類的聲明結(jié)束 Student stud1,stud2; /定義stud1和stud2為Student類的變量,稱為對象 int main( ) / 主函數(shù)首部 stud1.setdata( ); / 調(diào)用對象stud1的setdata函數(shù) stud2.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è)類是由一批數(shù)據(jù)以及對其操作的函數(shù)組成的。 類可以體現(xiàn)數(shù)據(jù)的封裝性和信息隱蔽。在上面的程序中,在聲明Student類時(shí),把類中的數(shù)據(jù)和函數(shù)分為兩大類: private(私有的)和public(公用的)。把全部數(shù)據(jù)(num,score)指定為私有的,把全部函數(shù)(setdata,display)指定為公用的。在大多數(shù)情況下,會(huì)把所有數(shù)據(jù)指定為私有,以實(shí)現(xiàn)信息隱蔽。,具有“類”類型特征的變量稱為“對象”(object)。 程序中第1824行是主函數(shù)。 程序運(yùn)行情況如下: 1001 98.5 (輸入學(xué)生1的學(xué)號(hào)和成績) 1002 76.5 (輸入學(xué)生2的學(xué)號(hào)和成績) num=1001 (輸出學(xué)生1的學(xué)號(hào)) score=98.5 (輸出學(xué)生1的成績) num=1002 (輸出學(xué)生2的學(xué)號(hào)) 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)操作的部分,因此函數(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ù)名后面必須跟一對圓括號(hào), 函數(shù)參數(shù)可以缺省,如int main( )。, 函數(shù)體,即函數(shù)首部下面的大括號(hào)內(nèi)的部分。如果在一個(gè)函數(shù)中有多個(gè)大括號(hào),則最外層的一對 為函數(shù)體的范圍。 函數(shù)體一般包括: 局部聲明部分 (在函數(shù)內(nèi)的聲明部分)。包括對本函數(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+語句必須以分號(hào)結(jié)束。 (5) 一個(gè)C+程序總是從main函數(shù)開始執(zhí)行的,而不論main函數(shù)在整個(gè)程序中的位置如何。 (6) 類(class)是C+新增加的重要的數(shù)據(jù)類型,是C+對C的最重要的發(fā)展。有了類,就可以實(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+程序沒有行號(hào),也不像FORTRAN或COBOL那樣嚴(yán)格規(guī)定書寫格式(語句必須從某一列開始書寫)。 (8) 一個(gè)好的、有使用價(jià)值的源程序都應(yīng)當(dāng)加上必要的注釋,以增加程序的可讀性。C+還保留了C語言的注釋形式,可以用“/*/”對C+程序中的任何部分作注釋。在“/*”和“*/”之間的全部內(nèi)容作為注釋。 用“/”作注釋時(shí),有效范圍只有一行,即本行有效,不能跨行。而用“/*/”作注釋時(shí)有效范圍為多行。只要在開始處有一個(gè)“/*”,在最后一行結(jié)束處有一個(gè)“*/”即可。因此,一般習(xí)慣是: 內(nèi)容較少的簡單注釋常用“/”,內(nèi)容較長的常用“/*/ ”。,一個(gè)程序從編寫到最后得到運(yùn)行結(jié)果要經(jīng)歷以下一些步驟。 1. 用C+語言編寫程序 用高級(jí)語言編寫的程序稱為“源程序”(source program)。C+的源程序是以.cpp作為后綴的(cpp是c plus plus 的縮寫)。 2. 對源程序進(jìn)行編譯 為了使計(jì)算機(jī)能執(zhí)行高級(jí)語言源程序,必須先用一種稱為“編譯器(complier)”的軟件(也稱編譯程序或編譯系統(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é)束后會(huì)顯示出所有的編譯出錯(cuò)信息。一般編譯系統(tǒng)給出的出錯(cuò)信息分為兩種,一種是錯(cuò)誤(error);一種是警告(warning) 。 3. 將目標(biāo)文件連接 在改正所有的錯(cuò)誤并全部通過編譯后,得到一個(gè)或多個(gè)目標(biāo)文件。此時(shí)要用系統(tǒng)提供的“連接程序(linker)”將一個(gè)程序的所有目標(biāo)程序和系統(tǒng)的庫文件以及系統(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+語言的初步知識(shí)后,讀者最好盡快在計(jì)算機(jī)上編譯和運(yùn)行C+程序,以加深對C+程序的認(rèn)識(shí),并初步掌握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)只會(huì)使用一種C+編譯系統(tǒng),只能在一種環(huán)境下工作,而應(yīng)當(dāng)能在不同的C+環(huán)境下運(yùn)行自己的程序,并且了解不同的C+編譯系統(tǒng)的特點(diǎn)和使用方法,在需要時(shí)能將自己的程序方便地移植到不同的平臺(tái)上。,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 逗號(hào)運(yùn)算符與逗號(hào)表達(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)不同,算法也會(huì)不同。例如,對10個(gè)整數(shù)排序和對包含10個(gè)元素的整型數(shù)組排序的算法是不同的。 C+可以使用的數(shù)據(jù)類型如下:,2.1 C+的數(shù)據(jù)類型,數(shù)據(jù)類型 基本類型 整型 短整型(short int) 整型(int) 長整型(long int) 字符型(char) 浮點(diǎn)型 單精度型(float) 雙精度型(double) 長雙精度型(long double) 布爾型(bool) 構(gòu)造類型 枚舉類型(enum) 數(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ù)的情況。,說明: (1) 整型數(shù)據(jù)分為長整型(long int)、一般整型(int)和短整型(short int)。在int前面加long和short分別表示長整型和短整型。 (2) 整型數(shù)據(jù)的存儲(chǔ)方式為按二進(jìn)制數(shù)形式存儲(chǔ),例如十進(jìn)制整數(shù)85的二進(jìn)制形式為1010101,則在內(nèi)存中的存儲(chǔ)形式如圖2.1所示。 圖2.1,(3) 在整型符號(hào)int和字符型符號(hào)char的前面,可以加修飾符signed(表示“有符號(hào)”)或unsigned(表示“無符號(hào)”)。如果指定為signed,則數(shù)值以補(bǔ)碼形式存放,存儲(chǔ)單元中的最高位(bit)用來表示數(shù)值的符號(hào)。如果指定為unsigned,則數(shù)值沒有符號(hào),全部二進(jìn)制位都用來表示數(shù)值本身。例如短整型數(shù)據(jù)占兩個(gè)字節(jié) ,見圖2.2。 圖2.2,有符號(hào)時(shí),能存儲(chǔ)的最大值為215-1,即32767,最小值為-32768。無符號(hào)時(shí),能存儲(chǔ)的最大值為216-1,即65535,最小值為0。有些數(shù)據(jù)是沒有負(fù)值的,可以使用unsigned,它存儲(chǔ)正數(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和long double分配8個(gè)字節(jié)。 (5) 表中類型標(biāo)識(shí)符一欄中,方括號(hào) 包含的部分可以省寫,如short和short int等效,unsigned int和unsigned等效。,常量的值是不能改變的,一般從其字面形式即可判別是否為常量。常量包括兩大類,即數(shù)值型常量(即常數(shù))和字符型常量。如12,0,-3為整型常量,4.6,-1.23為實(shí)型常量,包含在兩個(gè)單撇號(hào)之間的字符為字符常量,如a,x。這種從字面形式即可識(shí)別的常量稱為“字面常量”或“直接常量”。,2.2 常量 2.2.1 什么是常量,數(shù)值常量就是通常所說的常數(shù)。在C+中,數(shù)值常量是區(qū)分類型的,從字面形式即可識(shí)別其類型。 1. 整型常量(整數(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ù),如果其值超過了上述范圍,而在-2147483648+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型常量,可以賦給型或long int型變量。 (4) 常量無unsigned型。但一個(gè)非負(fù)值的整數(shù)可以賦值給unsigned整型變量,只要它的范圍不超過變量的取值范圍即可。,一個(gè)整型常量可以用3種不同的方式表示: (1) 十進(jìn)制整數(shù)。如1357,-432,0等。在一個(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)數(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.14159100,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)的位置是浮動(dòng)的。例如:,a=0.314159e1; a=3.14159e0; a=31.4159e-1; a=314.159e-2; 以上4個(gè)賦值語句中,用了不同形式的浮點(diǎn)數(shù),但其作用是相同的。 在程序中不論把浮點(diǎn)數(shù)寫成小數(shù)形式還是指數(shù)形式,在內(nèi)存中都是以指數(shù)形式(即浮點(diǎn)形式)存儲(chǔ)的。例如不論在程序中寫成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。存儲(chǔ)單元分為兩部分,一部分用來存放數(shù)字部分,一部分用來存放指數(shù)部分。為便于理解,在圖2.3中是用十進(jìn)制表示的,實(shí)際上在存儲(chǔ)單元中是用二進(jìn)制數(shù)來表示小數(shù)部分,用2的冪次來表示指數(shù)部分的。 對于以指數(shù)形式表示的數(shù)值常量,也都作為雙精度常量處理。,1. 普通的字符常量 用單撇號(hào)括起來的一個(gè)字符就是字符型常量。如a,#,%,D都是合法的字符常量,在內(nèi)存中占一個(gè)字節(jié)。注意: 字符常量只能包括一個(gè)字符,如AB 是不合法的。字符常量區(qū)分大小寫字母,如A和a是兩個(gè)不同的字符常量。撇號(hào)()是定界符,而不屬于字符常量的一部分。如couta;輸出的是一個(gè)字母“a”,而不是3個(gè)字符“a ”。,2.2.3 字符常量,2. 轉(zhuǎn)義字符常量 除了以上形式的字符常量外,C+還允許用一種特殊形式的字符常量,就是以 “”開頭的字符序列。例如,n代表一個(gè)“換行”符?!癱outn; ” 將輸出一個(gè)換行,其作用與“coutendl; ” 相同。這種“控制字符”,在屏幕上是不能顯示的。在程序中也無法用一個(gè)一般形式的字符表示,只能采用特殊形式來表示。 常用的以“”開頭的特殊字符見書中表2.2。,3. 字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式及其使用方法 將一個(gè)字符常量存放到內(nèi)存單元時(shí),實(shí)際上并不是把該字符本身放到內(nèi)存單元中去,而是將該字符相應(yīng)的ASCII代碼放到存儲(chǔ)單元中。如果字符變量c1的值為a,c2的值為b,則在變量中存放的是a的ASCII碼97,b 的ASCII碼98,如圖2.4(a)所示,實(shí)際上在內(nèi)存中是以二進(jìn)制形式存放的,如圖2.4(b)所示。 圖2.4,既然字符數(shù)據(jù)是以ASCII碼存儲(chǔ)的,它的存儲(chǔ)形式就與整數(shù)的存儲(chǔ)形式類似。這樣,在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; /將一個(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)換為大寫字母。 #include 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的ASCII碼為66)。,4. 字符串常量 用雙撇號(hào)括起來的部分就是字符串常量,如“abc“,“Hello!“,“a+b“,“Liping“都是字符串常量。字符串常量“abc“在內(nèi)存中占4個(gè)字節(jié)(而不是3個(gè)字節(jié)),見圖2.5。 圖2.5 編譯系統(tǒng)會(huì)在字符串最后自動(dòng)加一個(gè)0作為字符串結(jié)束標(biāo)志。但0并不是字符串的一部分,它只作為字符串的結(jié)束標(biāo)志。如 cout“abc“endl; 輸出3個(gè)字符abc,而不包括0。,注意: “a“和a代表不同的含義,“a“是字符串常量,a 是字符常量。前者占兩個(gè)字節(jié),后者占1個(gè)字節(jié)。請分析下面的程序片段: char c; /定義一個(gè)字符變量 c=a; /正確 c=“a“; /錯(cuò)誤,c只能容納一個(gè)字符 字符串常量要用字符數(shù)組來存放,見第5章。 請思考: 字符串常量“abcn“包含幾個(gè)字符?不是5個(gè)而是4個(gè)字符,其中“n”是一個(gè)轉(zhuǎn)義字符。但它在內(nèi)存中占5個(gè)字節(jié)(包括一個(gè)“0”字符) 。編譯系統(tǒng)遇到“”時(shí)就會(huì)把它認(rèn)作轉(zhuǎn)義字符的標(biāo)志,把它和其后的字符一起作為一個(gè)轉(zhuǎn)義字符。,如果“”后面的字符不能與“”組成一個(gè)合法的轉(zhuǎn)義字符(如“c“),則在編譯時(shí)顯示出錯(cuò)信息。如果希望將“”字符也作為字符串中的一個(gè)字符,則應(yīng)寫為“abcn“,此時(shí)字符包括5個(gè)字符,即a,b,c,n。如果有以下輸出語句: cout“abcn“endl; 則會(huì)輸出: abc,然后換行。同理執(zhí)行 cout“I say “Thank you!“n“; 的輸出是: I say “Thank you!“ 如果在一個(gè)字符串中最后一個(gè)字符為“”,則表示它是續(xù)行符,下一行的字符是該字符串的一部分,且在兩行字符串間無空格。如,cout“We must study C /本行最后的“”后面的空格和換行均不起作用 + hard!“; /本行的字符緊連在上一行最后的“”前面字符之后 則輸出: We must study C+ hard!,為了編程和閱讀的方便,在C+程序設(shè)計(jì)中,常用一個(gè)符號(hào)名代表一個(gè)常量,稱為符號(hào)常量,即以標(biāo)識(shí)符形式出現(xiàn)的常量。 例2.3 符號(hào)常量的使用。 #define PRICE 30 /注意這不是語句,末尾不要加分號(hào) int main ( ) int num,total; num=10; total=num * PRICE; cout“total=“totalendl; return 0; ,2.2.4 符號(hào)常量,程序中用預(yù)處理命令#define指定PRICE在本程序單位中代表常量30,此后凡在本程序單位中出現(xiàn)的PRICE都代表30,可以和常量一樣進(jìn)行運(yùn)算,程序運(yùn)行結(jié)果為 total=300 請注意符號(hào)常量雖然有名字,但它不是變量。它的值在其作用域(在本例中為主函數(shù))內(nèi)是不能改變的,也不能被賦值。如用賦值語句“PRICE=40;”給PRICE賦值是錯(cuò)誤的。 使用符號(hào)常量的好處是: (1) 含義清楚。 (2) 在需要改變一個(gè)常量時(shí)能做到“一改全改”。 如 #define PRICE 35,其實(shí)在前面的例子中已經(jīng)多次用到了變量。在程序運(yùn)行期間其值可以改變的量稱為變量。一個(gè)變量應(yīng)該有一個(gè)名字,并在內(nèi)存中占據(jù)一定的存儲(chǔ)單元,在該存儲(chǔ)單元中存放變量的值。請注意區(qū)分變量名和變量值這兩個(gè)不同的概念,見圖2.6。 圖2.6,2.3 變量 2.3.1 什么是變量,先介紹標(biāo)識(shí)符的概念。和其他高級(jí)語言一樣,用來標(biāo)識(shí)變量、符號(hào)常量、函數(shù)、數(shù)組、類型等實(shí)體名字的有效字符序列稱為標(biāo)識(shí)符(identifier)。簡單地說,標(biāo)識(shí)符就是一個(gè)名字。變量名是標(biāo)識(shí)符的一種,變量的名字必須遵循標(biāo)識(shí)符的命名規(guī)則。 C+規(guī)定標(biāo)識(shí)符只能由字母、數(shù)字和下劃線3種字符組成,且第一個(gè)字符必須為字母或下劃線。下面列出的是合法的標(biāo)識(shí)符,也是合法的變量名: sum, average, total, day, month, Student_name, tan, BASIC, li_ling 下面是不合法的標(biāo)識(shí)符和變量名:,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ā)工作中,常習(xí)慣在變量前面加一個(gè)字母以表示該變量的類型,如iCount表示這是一個(gè)整型變量,cSex表示這是一個(gè)字符型變量。 C+沒有規(guī)定標(biāo)識(shí)符的長度(字符個(gè)數(shù)),但各個(gè)具體的C編譯系統(tǒng)都有自己的規(guī)定。有的系統(tǒng)取32個(gè)字符,超過的字符不被識(shí)別。,在C+語言中,要求對所有用到的變量作強(qiáng)制定義,也就是必須“先定義,后使用”,如例2.2和例2.3那樣。定義變量的一般形式是 變量類型 變量名表列; 變量名表列指的是一個(gè)或多個(gè)變量名的序列。如 float a,b,c,d,e; 定義a,b,c,d,e為單精度型變量,注意各變量間以逗號(hào)分隔,最后是分號(hào)。 可以在定義變量時(shí)指定它的初值。如 float a=83.5,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) 凡未被事先定義的,不作為變量名,這就能保證程序中變量名使用得正確。例如,如果在聲明部分寫了 int student; 而在執(zhí)行語句中錯(cuò)寫成statent。如 statent=30; 在編譯時(shí)檢查出statent未經(jīng)定義,作為錯(cuò)誤處理。輸出“變量statent未經(jīng)聲明”的信息,便于用戶發(fā)現(xiàn)錯(cuò)誤,避免變量名使用時(shí)出錯(cuò)。 (2) 每一個(gè)變量被指定為一確定類型,在編譯時(shí)就能為其分配相應(yīng)的存儲(chǔ)單元。如指定和為int型,一般的編譯系統(tǒng)對其各分配4個(gè)字節(jié),并按整數(shù)方式存儲(chǔ)數(shù)據(jù)。,(3) 指定每一變量屬于一個(gè)特定的類型,這就便于在編譯時(shí),據(jù)此檢查該變量所進(jìn)行的運(yùn)算是否合法。例如,整型變量a和b,可以進(jìn)行求余運(yùn)算: a%b 是“求余”(見24 節(jié)),得到a/b的余數(shù)。如果將a和b指定為實(shí)型變量,則不允許進(jìn)行“求余”運(yùn)算,在編譯時(shí)會(huì)給出有關(guān)的出錯(cuò)信息。,允許在定義變量時(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ù)測的值,即該存儲(chǔ)單元中當(dāng)時(shí)的內(nèi)容是不知道的。例如,若未對a和b賦值,執(zhí)行輸出語句,2.3.4 為變量賦初值,couta“ “b“ “cendl; 輸出結(jié)果可能為 1.48544e-38 15 1.81858 (各次運(yùn)行情況可能不同) 初始化不是在編譯階段完成的(只有在第4章中介紹的靜態(tài)存儲(chǔ)變量和外部變量的初始化是在編譯階段完成的),而是在程序運(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; a=b=c;,在定義變量時(shí),如果加上關(guān)鍵字const,則變量的值在程序運(yùn)行期間不能改變,這種變量稱為常變量(constant variable)。例如, const int a=3; /用const來聲明這種變量的值不能改變,指定其值始終為3 在定義常變量時(shí)必須同時(shí)對它初始化(即指定其值),此后它的值不能再改變。常變量不能出現(xiàn)在賦值號(hào)的左邊。例如上面一行不能寫成 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)注意,由于使用了系統(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è)以變量名命名的存儲(chǔ)單元,在一般情況下,存儲(chǔ)單元中的內(nèi)容是可以變化的。對常變量來說,無非在此變量的基礎(chǔ)上加上一個(gè)限定: 存儲(chǔ)單元中的值不允許變化。因此常變量又稱為只讀變量(read-only-variable)。,請區(qū)別用#define命令定義的符號(hào)常量和用const定義的常變量。符號(hào)常量只是用一個(gè)符號(hào)代替一個(gè)字符串,在預(yù)編譯時(shí)把所有符號(hào)常量替換為所指定的字符串,它沒有類型,在內(nèi)存中并不存在以符號(hào)常量命名的存儲(chǔ)單元。而常變量具有變量的特征,它具有類型,在內(nèi)存中存在著以它命名的存儲(chǔ)單元,可以用sizeof運(yùn)算符測出其長度。與一般變量惟一的不同是指定變量的值不能改變。用#define命令定義符號(hào)常量是C語言所采用的方法,C+把它保留下來是為了和C兼容。C+的程序員一般喜歡用const定義常變量。雖然二者實(shí)現(xiàn)的方法不同,但從使用的角度看,都可以認(rèn)為用了一個(gè)標(biāo)識(shí)符代表了一個(gè)常量。有些書上把用const定義的常變量也稱為定義常量,但讀者應(yīng)該了解它和符號(hào)常量的區(qū)別。,C+的運(yùn)算符十分豐富,使得C+的運(yùn)算十分靈活方便。例如把賦值號(hào)(=)也作為運(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)算符 (?:) () 逗號(hào)運(yùn)算符 (,) () 指針運(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á)式,逗號(hào)運(yùn)算符與逗號(hào)表達(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)為整型數(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)算符和括號(hào)將運(yùn)算對象(也稱操作數(shù))連接起來的、符合C+語法規(guī)則的式子,稱C+算術(shù)表達(dá)式。運(yùn)算對象包括常量、變量、函數(shù)等。例如,下面是一個(gè)合法的C+算術(shù)表達(dá)式: a*b/c-1.5+a C+語言規(guī)定了運(yùn)算符的優(yōu)先級(jí)和結(jié)合性。在求解表達(dá)式
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 青島轉(zhuǎn)業(yè)考試試題及答案
- 化工實(shí)驗(yàn)考試試題及答案
- 澳洲入籍考試試題及答案
- 化工設(shè)計(jì)考試試題及答案
- 績效考評(píng)考試題及答案
- 民政政策考試試題及答案
- 居家客服考試試題及答案
- 郵政鄉(xiāng)鎮(zhèn)考試試題及答案
- 起床模擬測試題及答案
- 電商平臺(tái)對農(nóng)民權(quán)益的保護(hù)研究試題及答案
- 鄂爾多斯市水發(fā)燃?xì)庥邢薰菊衅腹P試真題2024
- 2025年臨海市紀(jì)委市監(jiān)委下屬事業(yè)單位公開選聘工作人員1人筆試備考題庫及答案解析
- 河北省唐山市、廊坊市2025年高三高考第二次模擬演練思想政治試卷(含答案)
- 2025年春季江東控股集團(tuán)有限責(zé)任公司社會(huì)招聘15人(安徽)筆試參考題庫附帶答案詳解
- 湖北武漢市華中師大一附中2025屆高三3月押軸試題物理試題試卷含解析
- 司法雇員考試題目及答案
- 國家金融監(jiān)督管理總局所屬事業(yè)單位招聘真題2024
- 2024年全國高中數(shù)學(xué)聯(lián)賽(浙江預(yù)賽)試題含參考答案
- 2025年甘肅省公路發(fā)展集團(tuán)限公司招聘70人歷年高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 人教PEP版(2024)三年級(jí)下冊英語Unit5 Old toys單元整體教學(xué)設(shè)計(jì)(共6課時(shí))
- 知識(shí)產(chǎn)權(quán)投資從理論到實(shí)踐的轉(zhuǎn)化
評(píng)論
0/150
提交評(píng)論