第2章數(shù)據(jù)類型與表達(dá)式_第1頁(yè)
第2章數(shù)據(jù)類型與表達(dá)式_第2頁(yè)
第2章數(shù)據(jù)類型與表達(dá)式_第3頁(yè)
第2章數(shù)據(jù)類型與表達(dá)式_第4頁(yè)
第2章數(shù)據(jù)類型與表達(dá)式_第5頁(yè)
已閱讀5頁(yè),還剩74頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第2章數(shù)據(jù)類型與表達(dá)式2.1C++詞法單位2.2數(shù)據(jù)類型2.3常量2.4變量2.5表達(dá)式2.6C++的運(yùn)算符2.7算術(shù)運(yùn)算符與算術(shù)表達(dá)式2.8賦值運(yùn)算符與賦值表達(dá)式2.9逗號(hào)運(yùn)算符與逗號(hào)表達(dá)式2.1C++詞法單位

2.1.1C++的字符集每種語言都使用一組字符來構(gòu)造有意義的語句。C++程序是用下列字符所組成的字符集寫成的。26個(gè)小寫字母;26個(gè)大寫字母;10個(gè)數(shù)字;其他符號(hào)。2.1.2關(guān)鍵字關(guān)鍵字(保留字),是系統(tǒng)預(yù)先定義好的,有著特殊含義的標(biāo)識(shí)符。在程序中用到的其他名字(標(biāo)識(shí)符)不能與C++的關(guān)鍵字有相同的拼法和大小寫,關(guān)鍵字也不能重新定義。C++關(guān)鍵字asmdoifreturntryautodoubleinlineshorttypedefbooldynamic_castintsignedtypeidbreakelselongsizeoftypenamecaseenummutablestaticunioncatchexplicitnamespacestatic_castunsignedcharexportnewstructusingclassexternoperatorswitchvirtualconstfalseprivatetemplatevoidconst_castfloatprotectedthisvolatilecontinueforpublicthrowwchar_tdefaultfriendregistertruewhiledeletegotoreinterpret_castC++還保留了一些詞用作各種操作符的替代名,它們也不能用作標(biāo)識(shí)符。andbitandcomplnot_eqor_eqxor_eqand_eqbitornotorxor2.1.3標(biāo)識(shí)符標(biāo)識(shí)符是程序員定義的名字,用作變量名、函數(shù)名和類型名,標(biāo)識(shí)符由字母、數(shù)字和下劃線構(gòu)成,并且必須以字母或下劃線開頭。如:

aA1programDataStructureMyPen my_pen_system_logintdoublesort

都是標(biāo)識(shí)符。注意,在C++中,大寫字母與小寫字母是有區(qū)別的。如:MyPen和mypen不是同一標(biāo)識(shí)符。以下是不合法的標(biāo)識(shí)符:

3d(不是以字母開頭) C++(+號(hào)是非法字符)2.1.4標(biāo)點(diǎn)符號(hào)書寫程序時(shí),每個(gè)語法符號(hào)之間必須用分隔符隔開,起分隔作用的有運(yùn)算符、空格符、制表符、回車符等。2.2數(shù)據(jù)類型

2.2.1數(shù)據(jù)類型的含義數(shù)據(jù)類型是一個(gè)值的集合和定義在此集合上的一組操作的總稱。數(shù)據(jù)類型包含三個(gè)內(nèi)容:①具有同樣性質(zhì)的一個(gè)數(shù)據(jù)集合。②數(shù)據(jù)在計(jì)算機(jī)內(nèi)部的表示方式。③在該數(shù)據(jù)上的操作。C++的數(shù)據(jù)類型2.2.2C++基本數(shù)據(jù)類型類型名稱占用字節(jié)數(shù)取值范圍bool布爾型1true,false[signed]char有符號(hào)字符型1-128~127unsignedchar無符號(hào)字符型10~255[signed]short[int]有符號(hào)短整型2-32768~32767unsignedshort[int]無符號(hào)短整型20~65535[signed]int有符號(hào)整型4-231~(231-1)unsigned[int]無符號(hào)整型40~(232-1)[signed]long[int]有符號(hào)長(zhǎng)整型4-231~(231-1)unsignedlong[int]無符號(hào)長(zhǎng)整型40~(232-1)float單精度型4-1038~1038double雙精度型8-10308~10308longdouble長(zhǎng)雙精度型10-104932~104932void無值型0在vc中,longdouble等同double,也就是8字節(jié),在C++builder中為10字節(jié),在gcc中為12字節(jié),longdouble并不常用。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.3常量

2.3.1什么是常量常量的值是不能改變的,一般從其字面形式即可判別是否為常量。常量包括兩大類,即數(shù)值型常量(即常數(shù))和字符型常量。如12,0,-3為整型常量,4.6,-1.23為實(shí)型常量,包含在兩個(gè)單撇號(hào)之間的字符為字符常量,如'a'、'x'。這種從字面形式即可識(shí)別的常量稱為“字面常量”或“直接常量”。2.3.2數(shù)值常量數(shù)值常量就是通常所說的常數(shù)。在C++中,數(shù)值常量是區(qū)分類型的,從字面形式即可識(shí)別其類型。1.整型常數(shù)整型常數(shù)可用3種表示方式:①十進(jìn)制整數(shù):12,-34。②八進(jìn)制整數(shù):0123。③十六進(jìn)制整數(shù):0X123,0x123。十進(jìn)制數(shù)有正負(fù)之分,但八進(jìn)制和十六進(jìn)制數(shù)只能表示無符號(hào)整數(shù)。12——int類型。12L,12l——longint類型。一個(gè)整型常數(shù)如果其范圍允許,那么計(jì)算機(jī)默認(rèn)將其認(rèn)為是int類型的,在其后面加L或l,則認(rèn)為是longint型常數(shù)。不過,這在以前的16位機(jī)器才有意義?,F(xiàn)在,我們的機(jī)器都是32位,longint和int完全一樣,都是占用4個(gè)字節(jié),所以我們沒有必要這樣用了。2.浮點(diǎn)數(shù)含有小數(shù)點(diǎn)或10的冪的數(shù)均為浮點(diǎn)數(shù)。浮點(diǎn)數(shù)一般只用10進(jìn)制表示。比如:123.45浮點(diǎn)數(shù)還可以使用科學(xué)計(jì)數(shù)法,或曰指數(shù)形式,如:123e4、或123E4都表示123×104,即1230000。E前的數(shù)字一定要寫,指數(shù)一定是整數(shù)。浮點(diǎn)數(shù)類型有:float,double,longdouble。在C++中,默認(rèn)的浮點(diǎn)數(shù)類型是double。比如:1.234 C++按double類型為這個(gè)數(shù)分配內(nèi)存,也就是說為它分配8個(gè)字節(jié)。如果要改變這一點(diǎn),可以通過加后綴字母來實(shí)現(xiàn)。加f或F,指定為float類型。加l或L,指定為longdouble類型。以下示例:12.3f//float類型12.3//默認(rèn)類型(double)12.3L//longdouble類型12.3e400//longdouble類型,因?yàn)橹狄巡辉赿ouble類型的取值范圍內(nèi)2.3.3字符常量

1.普通的字符常量字符常量是用單引號(hào)括起來的一個(gè)字符,如:'a'、'b'、'c'、''、'A'。注意:①字符常量只能包括一個(gè)字符,如'AB'是不合法的。②字符常量區(qū)分大小寫字母,如'A'和'a'是兩個(gè)不同的字符常量。③撇號(hào)(')是定界符,而不屬于字符常量的一部分。如cout<<'a';輸出的是一個(gè)字母“a”,而不是3個(gè)字符“'a'”。2.轉(zhuǎn)義字符常量除了以上形式的字符常量外,C++還允許用一種特殊形式的字符常量,就是以“\”開頭的字符序列。例如,'\n'代表一個(gè)“換行”符?!癱out<<'\n';”將輸出一個(gè)換行,其作用與“cout<<endl;”相同。這種“控制字符”,在屏幕上是不能顯示的,在程序中也無法用一個(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è)字符變量。也可以對(duì)字符數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算,此時(shí)相當(dāng)于對(duì)它們的ASCII碼進(jìn)行算術(shù)運(yùn)算。例將字符賦給整型變量。#include<iostream>usingnamespacestd;intmain(){ inti,j;//i和j是整型變量

i='A';//將一個(gè)字符常量賦給整型變量i j='B';//將一個(gè)字符常量賦給整型變量j cout<<i<<''<<j<<'\n';//輸出整型變量i和j的值

return0;}6566例字符數(shù)據(jù)與整數(shù)進(jìn)行算術(shù)運(yùn)算。

下面程序的作用是將小寫字母轉(zhuǎn)換為大寫字母。#include<iostream>usingnamespacestd;intmain(){ charc1,c2; c1='a'; c2='b'; c1=c1-32; c2=c2-32; cout<<c1<<''<<c2<<endl; return0;}AB'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.字符串常量字符串的是由一對(duì)雙引號(hào)括起的來的字符序列。字符串常量總是以'\0'結(jié)束。有兩個(gè)字符串:

"Hello" "What"假設(shè)二者在內(nèi)存中存儲(chǔ)的位置正好是連續(xù)的,那么內(nèi)存示意就為:Hello\0What\0

因?yàn)榭兆址麤]有任何輸出效果,所以正常的字符串中是不會(huì)出現(xiàn)空字符的。因此,用它來表示一個(gè)字符串的結(jié)束。

注意:"a"和'a'代表不同的含義,"a"是字符串常量,'a'是字符常量。前者占兩個(gè)字節(jié),后者占1個(gè)字節(jié)。請(qǐng)分析下面的程序片段:charc;//定義一個(gè)字符變量c='a';//正確c="a";//錯(cuò)誤,c只能容納一個(gè)字符思考:字符串常量"abc\n"包含幾個(gè)字符?它在內(nèi)存中占幾個(gè)字節(jié)?2.3.4符號(hào)常量(用宏表示常數(shù))宏的語法為:

#define宏名稱宏值如:#definePAI3.14159注意:宏定義不是C++嚴(yán)格意義上的語句,所以其行末不用加分號(hào)結(jié)束。宏名稱經(jīng)常使用全部大寫的字母。#include<iostream>usingnamespacestd;#definePRICE30//注意這不是語句,末尾不要加分號(hào)intmain(){ intnum,total; num=10; total=num*PRICE; cout<<"total="<<total<<endl; return0;}使用符號(hào)常量的好處是:(1)含義清楚。(2)在需要改變一個(gè)常量時(shí)能做到“一改全改”。2.4變量

2.4.1什么是變量在程序運(yùn)行期間其值可以改變的量稱為變量。變量必須用標(biāo)識(shí)符進(jìn)行標(biāo)識(shí),該標(biāo)識(shí)符稱為變量名。程序編譯時(shí),編譯器根據(jù)變量類型為每一個(gè)變量分配一段連續(xù)的內(nèi)存單元,用于存儲(chǔ)該變量的取值。注意區(qū)分變量名和變量值這兩個(gè)不同的概念,見下圖2.4.2變量命名規(guī)則變量命名規(guī)則同標(biāo)識(shí)符命名規(guī)則。①不能取名為C++的保留字。

intchar;//不行這是不被允許的。char是一個(gè)保留字。我們不能再拿來做變量。②不能以數(shù)字開頭

int100;//不行

int100ren;//不行③不能夾有空格

booldoyouloveme;//不行 可以用下劃線代替空格:

booldo_you_love_me;//OK④不能在同一作用范圍內(nèi)有同名變量(僅C++)比如:

intabc; intabcd; intabc;//不行在C里,上面重復(fù)定義變量abc是被允許的。⑤不要和C++中已有的全局變量、函數(shù)、類型名取相同的名字。

doublesin;這不合適。因?yàn)镃庫(kù)為我們提供了計(jì)算正弦值的函數(shù),名字就叫sin;以上幾點(diǎn)中,凡標(biāo)為“不能”,意味如果你違反了,你的程序便會(huì)在編譯時(shí)出錯(cuò)。而“不要”則僅屬建議內(nèi)容。真要這么做,程序也沒錯(cuò)。2.4.3定義變量語法:數(shù)據(jù)類型變量名;

intage; charletter; boolgender;其它類型,除了void不能直接定義一個(gè)變量以外,格式都是一樣的。

inta,b,c;一起定義多個(gè)同類型變量的方法是:在不同變量之間以逗號(hào)(,)分隔,最后仍以分號(hào)(;)結(jié)束。在一個(gè)語句里可建立多個(gè)同一類型的變量,不能混合定義不同類型的變量。C++要求對(duì)變量作強(qiáng)制定義的目的是:(1)凡未被事先定義的,不能作為變量名,這就能保證程序中變量名使用得正確。(2)每一個(gè)變量被指定為一確定類型,在編譯時(shí)就能為其分配相應(yīng)的存儲(chǔ)單元。如指定a和b為int型,一般的編譯系統(tǒng)對(duì)其各分配4個(gè)字節(jié),并按整數(shù)方式存儲(chǔ)數(shù)據(jù)。(3)指定每一變量屬于一個(gè)特定的類型,這就便于在編譯時(shí),據(jù)此檢查該變量所進(jìn)行的運(yùn)算是否合法。例如,整型變量a和b,可以進(jìn)行求余運(yùn)算:

a%b

%是“求余”,得到a/b的余數(shù)。如果將a和b指定為實(shí)型變量,則不允許進(jìn)行“求余”運(yùn)算,在編譯時(shí)會(huì)給出有關(guān)的出錯(cuò)信息。2.4.4為變量賦初值①在定義時(shí)初始化變量

inta=0;通過一個(gè)等號(hào),我們讓a的值等于0;同時(shí)定義多個(gè)變量時(shí)也一樣:

inta=0,b=1;當(dāng)然也可以根據(jù)需要,只給部分變量初始化。

inta=0,b;

或:

inta,b=1;對(duì)多個(gè)變量賦予同一初值,必須分別指定,不能寫成

floata=b=c=4.5;而應(yīng)寫成

floata=4.5,b=4.5,c=4.5;②在定義以后賦值

inta; a=100;注意:未初始化的變量,它的值將是“不確定的”。例:#include<iostream>usingnamespacestd;intmain(){ inta; doubleb; charc; cout<<a<<endl; cout<<b<<endl; cout<<c<<endl; return0;}25.56231e-308|變量允許的取值范圍等同于其數(shù)據(jù)類型的范圍。#include<iostream>#include<climits>usingnamespacestd;intmain(){inta=1234567890;intb=12345678901;cout<<a<<endl;cout<<INT_MAX<<endl;cout<<b<<endl;}2.4.5變量與內(nèi)存地址不同的變量擁有不同的內(nèi)存地址。 譬如:

chara; charb;上面有兩個(gè)字符類型的變量a和b,a擁有自已的內(nèi)存地址,b也擁有自已的內(nèi)存地址,二者絕不相同。而a、b只不過分別是那兩個(gè)內(nèi)存地址的“名字”,恰如“張三、李四”。在圖示的例子中,a、b是字符(char)類型。各占用1個(gè)字節(jié)。如果是int類型,那么應(yīng)該占4個(gè)字節(jié)。這4個(gè)字節(jié)必須是連續(xù)的。讓我們?cè)賮砜匆粋€(gè)例子:

inta; intb; charc;這里,我們聲明了兩個(gè)int類型和一個(gè)char類型的變量。同時(shí)和上面一樣,我們事實(shí)上是假設(shè)了這三個(gè)變量被依次序分配在相鄰的內(nèi)存地址上(真實(shí)情況下,這和其它因素,如指定的字節(jié)對(duì)齊方式等有關(guān))。從右圖中可以看到整型變量a占用了1000001~100004這4個(gè)字節(jié)。①不同的變量,存入在不同的內(nèi)存地址,所以變量之間相互獨(dú)立。②變量的數(shù)據(jù)類型決定了變量占用連續(xù)的多少個(gè)字節(jié)。③變量的內(nèi)存地址在程序運(yùn)行時(shí)得以確定。變量的內(nèi)存地址不能改變。④對(duì)變量的操作,等同于對(duì)變量所在地址的內(nèi)存操作。⑤反過來說:對(duì)指定內(nèi)存地址的內(nèi)存操作,等同對(duì)相應(yīng)變量的操作。2.4.6常變量在定義變量時(shí),如果加上關(guān)鍵字const,則變量的值在程序運(yùn)行期間不能改變,這種變量稱為常變量(constantvariable)。常變量定義的格式為:

const數(shù)據(jù)類型常變量名=常量值;

相比變量定義的格式,常變量定義必須以const開始,另外,常變量必須在定義的同時(shí)完成賦值。

constfloatPAI=3.1415926;const的作用就是指明這個(gè)量(PAI)是常變量,而非變量。

常變量必須一開始就指定一個(gè)值,然后,在以后的代碼中,我們不允許改變PAI的值,比如:

constdoublePAI=3.14159; doublezc=2*PAI*R; PAI=3.1415926;//錯(cuò)誤!,PAI不能再修改。

doublemj=PAI*R*R;在C++編程中,“常量”定義常用const,不用#define。思考:#definePAI3.14159constdoublePAI=3.14159;有何異同?2.5表達(dá)式

2.5.1表達(dá)式概述對(duì)常量或變量進(jìn)行運(yùn)算或處理的符號(hào)稱為運(yùn)算符,參與運(yùn)算的對(duì)象稱為操作數(shù)。表達(dá)式是操作符、操作數(shù)和標(biāo)點(diǎn)符號(hào)組成的序列,用于表達(dá)一個(gè)計(jì)算過程。比如寫一個(gè)計(jì)算圓面積,我們可以如下表達(dá):

area=PAI*r*r;其中,r是某一定義的變量,表示半徑,而PAI是事先定義的一個(gè)值為3.14的常變量?!癙AI*r*r”是一個(gè)表達(dá)式;“area=PAI*r*r”也是一個(gè)表達(dá)式。簡(jiǎn)單的如:3+2,也是一個(gè)表達(dá)式。表達(dá)式組成了C++語句,而語句組成C++的程序。表達(dá)式根據(jù)某些約定、求值次序、結(jié)合性和優(yōu)先級(jí)規(guī)則來進(jìn)行計(jì)算。約定:即類型轉(zhuǎn)換的約定。求值次序:指表達(dá)式中各個(gè)操作數(shù)的求值次序,視編譯器不同而不同。結(jié)合性:指表達(dá)式中出現(xiàn)同等優(yōu)先級(jí)操作符時(shí),該先做哪個(gè)操作的規(guī)定。優(yōu)先級(jí):指不同優(yōu)先級(jí)的操作符,總是先做優(yōu)先級(jí)高的操作。2.5.2左值和右值表達(dá)式可產(chǎn)生左值、右值或不產(chǎn)生值。左值:能出現(xiàn)在賦值表達(dá)式左邊的表達(dá)式。左值具有兩個(gè)條件:左值表達(dá)式具有存放數(shù)據(jù)的空間,并且該空間是允許修改的。

變量是左值。

賦值表達(dá)式是左值。

返回引用的函數(shù)是左值。右值:能出現(xiàn)在賦值表達(dá)式右邊的表達(dá)式。右值表達(dá)式要求具有值。例:inta=3;//a是變量,a是左值constintb=5;//b是常量,b不是左值a=b;//正確b=a;//錯(cuò)誤(a=4)=25;//正確,a=4是左值表達(dá)式,可以被賦以值252.5.3優(yōu)先級(jí)和結(jié)合性含有兩個(gè)或更多操作符的表達(dá)式稱為復(fù)合表達(dá)式。在復(fù)合表達(dá)式中,操作數(shù)和操作符的結(jié)合方式?jīng)Q定了整個(gè)表達(dá)式的值——表達(dá)式的結(jié)果會(huì)因?yàn)椴僮鞣筒僮鲾?shù)的分組結(jié)合方式的不同而不同。操作的分組結(jié)合方式取決于操作符的優(yōu)先級(jí)和結(jié)合性。也就是說,優(yōu)先級(jí)和結(jié)合性決定了表達(dá)式的哪個(gè)部分用作哪個(gè)操作符的操作數(shù)。操作數(shù)的分組結(jié)合方式由如下兩個(gè)原則決定:①如果相鄰的兩個(gè)操作符優(yōu)先級(jí)不同,則優(yōu)先級(jí)高的先與操作數(shù)結(jié)合。②如果相鄰的兩個(gè)操作符優(yōu)先級(jí)相同,則結(jié)合順序由第一個(gè)操作符的結(jié)合性決定,如果結(jié)合性為“從左到右”,則操作數(shù)先與第一個(gè)操作符結(jié)合,否則其結(jié)合性為“從右到左”,需先與第二個(gè)操作符結(jié)合。在所有的操作符中,除了一元操作符(單目操作符)、賦值操作符和復(fù)合操作符的結(jié)合性為“從右到左”外,其余操作符的結(jié)合性均為“從左到右”。

a+b+c;//左結(jié)合(a+b)+c;a=b=c;//右結(jié)合a=(b=c);*求值順序C++標(biāo)準(zhǔn)中規(guī)定了操作數(shù)計(jì)算順序的操作符有&&、||、(?:)和逗號(hào)操作符。除此之外,其他操作符并未指定其操作數(shù)的求值順序。以什么次序求解操作數(shù)通常沒有多大關(guān)系。只有當(dāng)操作符的兩個(gè)操作數(shù)涉及到同一個(gè)對(duì)象,并改變其值時(shí),操作數(shù)的計(jì)算次序才會(huì)影響結(jié)果。3.5.4語句與塊C++中的所有操作運(yùn)算都通過表達(dá)式來實(shí)現(xiàn)。C++語句和表達(dá)式并沒有嚴(yán)格的區(qū)分。一個(gè)表達(dá)式,加上一個(gè)分號(hào)后,可以直接形成語句:

3+2;當(dāng)一些表達(dá)式組合起來,完成某一相對(duì)完整的功能后,再加一個(gè)分號(hào)表示結(jié)束,這就組成一條語句。如:

a=3+2;這是一行賦值語句,它改變了a的值。有時(shí)候,連續(xù)的多個(gè)語句屬于同一控制范圍,這時(shí),我們用一對(duì)花括號(hào)將這些語句括起:

{inta=100;intb=a*20;....}括在一對(duì)花括號(hào){}里的語句序列稱為塊或復(fù)合語句。從語法上來說,塊可以被認(rèn)為是單個(gè)語句。2.6C++的運(yùn)算符C++的運(yùn)算符十分豐富,使得C++的運(yùn)算十分靈活方便。例如把賦值號(hào)(=)也作為運(yùn)算符處理,這樣,a=b=c=4就是合法的表達(dá)式。C++提供了以下運(yùn)算符:⑴算術(shù)運(yùn)算符

+(加)-(減)*(乘)/(除)%(整除求余)++(自加)--(自減)⑵關(guān)系運(yùn)算符>(大于)<(小于)==(等于)>=(大于或等于)<=(小于或等于)!=(不等于)⑶邏輯運(yùn)算符&&(邏輯與)||(邏輯或)!(邏輯非)⑷位運(yùn)算符<<(按位左移)>>(按位右移)&(按位與)|(按位或)^(按位異或)~(按位取反)⑸賦值運(yùn)算符(=及其擴(kuò)展賦值運(yùn)算符)⑹條件運(yùn)算符(?:)⑺逗號(hào)運(yùn)算符(,)⑻指針運(yùn)算符(*)⑼引用運(yùn)算符和地址運(yùn)算符(&)⑽求字節(jié)數(shù)運(yùn)算符(sizeof)⑾強(qiáng)制類型轉(zhuǎn)換運(yùn)算符((類型)或類型())⑿成員運(yùn)算符(.)⒀指向成員的運(yùn)算符(->)⒁下標(biāo)運(yùn)算符([])⒂其他(如函數(shù)調(diào)用運(yùn)算符())在本章中主要介紹算術(shù)運(yùn)算符與算術(shù)表達(dá)式,賦值運(yùn)算符與賦值表達(dá)式,逗號(hào)運(yùn)算符與逗號(hào)表達(dá)式,其他運(yùn)算符將在以后各章中陸續(xù)介紹。2.7算術(shù)運(yùn)算符與算術(shù)表達(dá)式

2.7.1基本的算術(shù)運(yùn)算符在C++中,加減乘除分別使用字符'+'、'-'、'*'、'/'作為運(yùn)算符號(hào)。加、減、乘的操作沒有什么需要特別說明之處,和生活中的相關(guān)運(yùn)算完全一樣。注意:“/”對(duì)于整型數(shù)為除法取整操作,對(duì)于浮點(diǎn)數(shù)則為通常意義的除法。如果除數(shù)或被除數(shù)中有一個(gè)為負(fù)值,則舍入的方向是不固定的。多數(shù)編譯系統(tǒng)采取“向零取整”的方法。inta=5/2;//結(jié)果為2doubleb=5/2;//結(jié)果為2doublec=5.0/2;//結(jié)果為2.5intd=5.0/2;//會(huì)有警告inte=-5/3;//結(jié)果為-1“%”操作也是C++常用的操作符,進(jìn)行求余數(shù)(求模)運(yùn)算。

inta=5%2;

結(jié)果是,a等1,即:5除以2,余數(shù)為1。注意:①%只能對(duì)整型數(shù)進(jìn)行操作!②如果兩個(gè)整數(shù)中有負(fù)數(shù),則結(jié)果的符號(hào)與被除數(shù)相同。例:設(shè)某四位數(shù)的千位數(shù)字平方與十位數(shù)字的平方之和等于百位數(shù)字的立方與個(gè)位數(shù)字的立方之和,例如,對(duì)于四位數(shù):3201,32+02=23+13,試問所有這樣的四位數(shù)之和是多少?

#include<iostream>#include<cmath>usingnamespacestd;intmain(){inti,s=0;for(i=1000;i<=9999;i++){inta,b,c,d;a=i/1000;b=(i/100)%10;c=(i/10)%10;d=i%10;if(a*a+c*c==pow(b,3)+pow(d,3))s+=i;}cout<<s<<endl;return0;}例:#include<iostream>usingnamespacestd;intmain(){inti,a[]={1,2,3};for(i=0;i<21;i++)cout<<a[i%3];cout<<endl;return0;}思考:17個(gè)人圍成圈,編號(hào)為1~17,從第1號(hào)開始報(bào)數(shù),報(bào)到3的倍數(shù)的人離開,一直數(shù)下去,直到最后只剩下1人,求此人的編號(hào)。2.7.2自增和自減運(yùn)算符當(dāng)運(yùn)算是自加或自減1的時(shí)候,C++提供了更為優(yōu)化的運(yùn)算操作符:++、--。 a=a+1;→a++;或++a; a=a-1;→a--;或--a;++a和a++的區(qū)別:在C++語言里,++a和--a稱為前置運(yùn)算,而a++和a--稱為后置運(yùn)算。inta=2;++a: a的值增1后返回a。a++: 先保存a的值,然后a的值增1,再返回保存的值。如果僅僅是進(jìn)行前置運(yùn)算或后置運(yùn)算,那么結(jié)果是相同的。例如:設(shè)a為10,則無論是++a或a++,執(zhí)行結(jié)果都是讓a遞增1,成為11。但在有其它運(yùn)算的復(fù)雜表達(dá)式中,前置++和后置++對(duì)運(yùn)算結(jié)果的影響不一樣。例1:inta=10;intb=++a;//前置++運(yùn)算結(jié)果:a的值為11,b的值也為11。計(jì)算過程解析:先計(jì)算++a,結(jié)果a值為11;然后再計(jì)算b=a;結(jié)果a值也為11。例2:inta=10intb=a++;

//后置++運(yùn)算結(jié)果:a的值為11,但b的值為10。計(jì)算過程解析:先計(jì)算b=a,因此,b的值是未加1之前的a,所以為10;然后再計(jì)算a++,a的值為11。注意:①++,--運(yùn)算符要求操作數(shù)只能是左值。②前增操作返回的是左值,后增操作返回的是右值。

constinta=4;intb=3,c=1;a++;//×3++;//×c=++b;c=b++;b++-=2;//× ++b+=5;3.7.3算術(shù)類型轉(zhuǎn)換C++遇到兩種不同數(shù)據(jù)類型的數(shù)值進(jìn)行運(yùn)算時(shí),會(huì)將某個(gè)數(shù)做適當(dāng)?shù)念愋娃D(zhuǎn)換,然后再進(jìn)行轉(zhuǎn)換。轉(zhuǎn)換總是朝表達(dá)能力強(qiáng)的方向進(jìn)行,并且轉(zhuǎn)換總是逐個(gè)運(yùn)算符進(jìn)行的。doublea=5.0/2;計(jì)算機(jī)在計(jì)算5.0/2時(shí),發(fā)現(xiàn)5.0是實(shí)型(帶小數(shù)點(diǎn)),而2是整型,二者不一,所以將2先自動(dòng)轉(zhuǎn)換成double數(shù),然后現(xiàn)和5.0進(jìn)行除運(yùn)算。doublea=5/2;//?這個(gè)轉(zhuǎn)換過程,在程序運(yùn)行時(shí)自動(dòng)進(jìn)行,稱為隱式轉(zhuǎn)換。隱式(自動(dòng))轉(zhuǎn)換盡量使我們的程序更加合理,但有時(shí)它并不能完全符合我們的要求。比如:

intb=5,c=2; doublea=b/c;由于除號(hào)兩邊的操作數(shù):b、c都是有明確類型的變量。這時(shí),既不會(huì)有隱式轉(zhuǎn)換進(jìn)行,我們也不能通過加'.0'來改變其中某個(gè)數(shù)的數(shù)據(jù)類型:doublea=b.0/c.0;//這種寫法是錯(cuò)誤的,不可能實(shí)現(xiàn)這種情況下,我們需要顯式(強(qiáng)制)類型轉(zhuǎn)換。例如:

(double)a(將a轉(zhuǎn)換成double類型)

(int)(x+y)(將x+y的值轉(zhuǎn)換成整型)

(float)(5%3)(將5%3的值轉(zhuǎn)換成float型)

(double)(5)/2強(qiáng)制類型轉(zhuǎn)換的一般形式為

(類型名)(表達(dá)式)注意:如果要進(jìn)行強(qiáng)制類型轉(zhuǎn)換的對(duì)象是一個(gè)變量,該變量可以不用括號(hào)括起來。如果要進(jìn)行強(qiáng)制類型轉(zhuǎn)換的對(duì)象是一個(gè)包含多項(xiàng)的表達(dá)式,則表達(dá)式應(yīng)該用括號(hào)括起來。需要說明的是在強(qiáng)制類型轉(zhuǎn)換時(shí),得到一個(gè)所需類型的中間變量,但原來變量的類型未發(fā)生變化。以上強(qiáng)制類型轉(zhuǎn)換的形式是原來C語言使用的形式,C++把它保留了下來,以利于兼容。C++還增加了以下形式:⑴類型名(表達(dá)式)

如int(x)或int(x+y)

類型名不加括號(hào),而變量或表達(dá)式用括號(hào)括起來。⑵static_cast<類型名>(變量或數(shù)值)

例如:

intb=5,c=2; doublea=static_cast<double>(b)

/c;2.8賦值運(yùn)算符與賦值表達(dá)式

2.8.1賦值運(yùn)算符賦值符號(hào)“=”就是賦值運(yùn)算符,它的作用是將一個(gè)數(shù)據(jù)賦給一個(gè)變量。如“a=3”的作用是執(zhí)行一次賦值操作(或稱賦值運(yùn)算)。把常量3賦給

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論