C++程序設(shè)計(jì)第2章_第1頁(yè)
C++程序設(shè)計(jì)第2章_第2頁(yè)
C++程序設(shè)計(jì)第2章_第3頁(yè)
C++程序設(shè)計(jì)第2章_第4頁(yè)
C++程序設(shè)計(jì)第2章_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第2章數(shù)據(jù)類型與表達(dá)式2.1C++的數(shù)據(jù)類型2.2常量2.3變量2.4C++的運(yùn)算符2.5算術(shù)運(yùn)算符與算術(shù)表達(dá)式2.6賦值運(yùn)算符與賦值表達(dá)式2.7逗號(hào)運(yùn)算符與逗號(hào)表達(dá)式2023/2/61長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院計(jì)算機(jī)處理的對(duì)象是數(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)。C++可以使用的數(shù)據(jù)類型如下:2.1C++的數(shù)據(jù)類型2023/2/62長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院數(shù)據(jù)類型 基本類型 整型 短整型(shortint) 整型(int) 長(zhǎng)整型(longint) 字符型(char) 浮點(diǎn)型 單精度型(float) 雙精度型(double) 長(zhǎng)雙精度型(longdouble) 布爾型(bool)

構(gòu)造類型 枚舉類型(enum) 數(shù)組類型 結(jié)構(gòu)體類型(struct) 共用體類型(union) 類類型(class)

指針類型

引用類型

空類型(void)布爾型就是邏輯型,空類型就是無(wú)值型。2023/2/63長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院說(shuō)明:(1)整型數(shù)據(jù)分為長(zhǎng)整型(longint)、一般整型(int)和短整型(shortint)。在int前面加long和short分別表示長(zhǎng)整型和短整型。(2)整型數(shù)據(jù)的存儲(chǔ)方式為按二進(jìn)制數(shù)形式存儲(chǔ),例如十進(jìn)制整數(shù)85的二進(jìn)制形式為1010101,則在內(nèi)存中的存儲(chǔ)形式如圖2.1所示。圖2.12023/2/64長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院(3)在整型符號(hào)int和字符型符號(hào)char的前面,可以加修飾符signed(表示“有符號(hào)”)或unsigned(表示“無(wú)符號(hào)”)。如果指定為signed,則數(shù)值以補(bǔ)碼形式存放,存儲(chǔ)單元中的最高位(bit)用來(lái)表示數(shù)值的符號(hào)。如果指定為unsigned,則數(shù)值沒(méi)有符號(hào),全部二進(jìn)制位都用來(lái)表示數(shù)值本身。例如短整型數(shù)據(jù)占兩個(gè)字節(jié),見(jiàn)圖2.2。圖2.22023/2/65長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院有符號(hào)時(shí),能存儲(chǔ)的最大值為215-1,即32767,最小值為-32768。無(wú)符號(hào)時(shí),能存儲(chǔ)的最大值為216-1,即65535,最小值為0。有些數(shù)據(jù)是沒(méi)有負(fù)值的,可以使用unsigned,它存儲(chǔ)正數(shù)的范圍比用signed時(shí)要大一倍。(4)浮點(diǎn)型(又稱實(shí)型)數(shù)據(jù)分為單精度(float)、雙精度(double)和長(zhǎng)雙精度(longdouble)3種,在VisualC++6.0中,對(duì)float提供6位有效數(shù)字,對(duì)double提供15位有效數(shù)字,并且float和double的數(shù)值范圍不同。對(duì)float分配4個(gè)字節(jié),對(duì)double和longdouble分配8個(gè)字節(jié)。(5)表中類型標(biāo)識(shí)符一欄中,方括號(hào)[]包含的部分可以省寫(xiě),如short和shortint等效,unsignedint和unsigned等效。2023/2/66長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院常量的值是不能改變的,一般從其字面形式即可判別是否為常量。常量包括兩大類,即數(shù)值型常量(即常數(shù))和字符型常量。如12,0,-3為整型常量,4.6,-1.23為實(shí)型常量,包含在兩個(gè)單撇號(hào)之間的字符為字符常量,如′a′,′x′。這種從字面形式即可識(shí)別的常量稱為“字面常量”或“直接常量”。2.2常量

2.2.1什么是常量2023/2/67長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院一個(gè)整型常量可以用3種不同的方式表示:(1)十進(jìn)制整數(shù)。如1357,-432,0等。在一個(gè)整型常量后面加一個(gè)字母l或L,則認(rèn)為是longint型常量。例如123L,421L,0L等,這往往用于函數(shù)調(diào)用中。(2)八進(jìn)制整數(shù)。在常數(shù)的開(kāi)頭加一個(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ù)的開(kāi)頭加一個(gè)數(shù)字0和一個(gè)英文字母X(或x),就表示這是以十六進(jìn)制數(shù)形式表示的常數(shù)。如0X20表示這是十六進(jìn)制數(shù)20,即(20)16,它相當(dāng)于十進(jìn)制數(shù)32。2.2.2數(shù)值常量2023/2/68長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院2.浮點(diǎn)數(shù)的表示方法一個(gè)浮點(diǎn)數(shù)可以用兩種不同的方式表示:(1)十進(jìn)制小數(shù)形式。如21.456,-7.98等。它一般由整數(shù)部分和小數(shù)部分組成。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ù)為長(zhǎng)雙精度數(shù)(longdouble),在VisualC++6.0中占8個(gè)字節(jié)。2023/2/69長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院(2)指數(shù)形式(即浮點(diǎn)形式)一個(gè)浮點(diǎn)數(shù)可以寫(xiě)成指數(shù)形式,如3.14159可以表示為0.314159×101,31.4159×10-1。在程序中應(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ù)形式來(lái)表示,數(shù)字部分中小數(shù)點(diǎn)的位置是浮動(dòng)的。例如:2023/2/610長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院a=0.314159e1;a=3.14159e0;a=31.4159e-1;a=314.159e-2;以上4個(gè)賦值語(yǔ)句中,用了不同形式的浮點(diǎn)數(shù),但其作用是相同的。在程序中不論把浮點(diǎn)數(shù)寫(xiě)成小數(shù)形式還是指數(shù)形式,在內(nèi)存中都是以指數(shù)形式(即浮點(diǎn)形式)存儲(chǔ)的。例如不論在程序中寫(xiě)成314.159或314.159e0,31.4159e1,3.14159e2,0.314159e3等形式,在內(nèi)存中都是以規(guī)范化的指數(shù)形式存放,如圖2.3所示。圖2.32023/2/611長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院1.普通的字符常量

用單撇號(hào)括起來(lái)的一個(gè)字符就是字符型常量。如′a′,′#′,′%′,′D′都是合法的字符常量,在內(nèi)存中占一個(gè)字節(jié)。注意:①字符常量只能包括一個(gè)字符,如′AB′是不合法的。②字符常量區(qū)分大小寫(xiě)字母,如′A′和′a′是兩個(gè)不同的字符常量。③撇號(hào)(′)是定界符,而不屬于字符常量的一部分。如cout<<′a′;輸出的是一個(gè)字母“a”,而不是3個(gè)字符“′a′”。2.轉(zhuǎn)義字符常量以“\”開(kāi)頭的字符序列。例如,′\n′代表一個(gè)“換行”符。“cout<<′\n′;”將輸出一個(gè)換行,其作用與“cout<<endl;”相同。這種“控制字符”,在屏幕上是不能顯示的。2.2.3字符常量2023/2/612長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院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.42023/2/613長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院字符數(shù)據(jù)是以ASCII碼存儲(chǔ)的,它的存儲(chǔ)形式就與整數(shù)的存儲(chǔ)形式類似。這樣,在C++中字符型數(shù)據(jù)和整型數(shù)據(jù)之間就可以通用。一個(gè)字符數(shù)據(jù)可以賦給一個(gè)整型變量,反之,一個(gè)整型數(shù)據(jù)也可以賦給一個(gè)字符變量。例2.1將字符賦給整型變量。#include<iostream>usingnamespacestd;intmain(){int

i,j;//i和j是整型變量i=′A′;//將一個(gè)字符常量賦給整型變量ij=′B′;//將一個(gè)字符常量賦給整型變量jcout<<i<<′′<<j<<′\n′;//輸出整型變量i和j的值,′\n′是換行符return0;}2023/2/614長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院執(zhí)行時(shí)輸出6566i和j被指定為整型變量。但在第5和第6行中,將字符′A′和′B′分別賦給i和j,它的作用相當(dāng)于以下兩個(gè)賦值語(yǔ)句:i=65;j=66;因?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é),它只能存放0~255范圍內(nèi)的整數(shù)。2023/2/615長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院例2.2字符數(shù)據(jù)與整數(shù)進(jìn)行算術(shù)運(yùn)算。下面程序的作用是將小寫(xiě)字母轉(zhuǎn)換為大寫(xiě)字母。#include<iostream>usingnamespacestd;intmain(){charc1,c2;c1=′a′;c2=′b′;c1=c1-32;c2=c2-32;

cout<<c1<<′′<<c2<<endl;return0;}2023/2/616長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院4.字符串常量用雙撇號(hào)括起來(lái)的部分就是字符串常量,如″abc″,″Hello!″,″a+b″都是字符串常量。字符串常量″abc″在內(nèi)存中占4個(gè)字節(jié)(而不是3個(gè)字節(jié)),見(jiàn)圖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′。2023/2/617長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院注意:″a″和′a′代表不同的含義,″a″是字符串常量,′a′是字符常量。前者占兩個(gè)字節(jié),后者占1個(gè)字節(jié)。請(qǐng)分析下面的程序片段:charc;//定義一個(gè)字符變量c=′a′;//正確c=″a″;//錯(cuò)誤,c只能容納一個(gè)字符請(qǐng)思考:字符串常量″abc\n″包含幾個(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)義字符。2023/2/618長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院為了編程和閱讀的方便,在C++程序設(shè)計(jì)中,常用一個(gè)符號(hào)名代表一個(gè)常量,稱為符號(hào)常量,即以標(biāo)識(shí)符形式出現(xiàn)的常量。使用符號(hào)常量的好處是:(1)含義清楚。(2)在需要改變一個(gè)常量時(shí)能做到“一改全改”。

例2.3符號(hào)常量的使用。#definePRICE30//注意這不是語(yǔ)句,末尾不要加分號(hào)intmain(){int

num,total;num=10;total=num*PRICE;cout<<″total=″<<total<<endl;return0;}2.2.4符號(hào)常量2023/2/619長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院

在程序運(yùn)行期間其值可以改變的量稱為變量。一個(gè)變量應(yīng)該有一個(gè)名字,并在內(nèi)存中占據(jù)一定的存儲(chǔ)單元,在該存儲(chǔ)單元中存放變量的值。請(qǐng)注意區(qū)分變量名和變量值這兩個(gè)不同的概念,見(jiàn)圖2.6。圖2.62.3變量

2.3.1什么是變量2023/2/620長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院C++規(guī)定標(biāo)識(shí)符只能由字母、數(shù)字和下劃線3種字符組成,且第一個(gè)字符必須為字母或下劃線。下面列出的是合法的標(biāo)識(shí)符,也是合法的變量名:sum,average,Student_name,tan,BASIC,li_ling下面是不合法的標(biāo)識(shí)符和變量名:$123,#33,3G64,Lingli,C++,Zhang-ling,U.S.A.在C++語(yǔ)言中,要求對(duì)所有用到的變量作強(qiáng)制定義,也就是必須“先定義,后使用”。floata,b,c,d,e;定義a,b,c,d,e為單精度型變量,注意各變量間以逗號(hào)分隔,最后是分號(hào)??梢栽诙x變量時(shí)指定它的初值。如floata=83.5,b,c=64.5,d=81.2,e;//對(duì)變量a,c,d指定了初值,b和d未指定初值

2.3.2變量名規(guī)則2023/2/621長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院允許在定義變量時(shí)對(duì)它賦予一個(gè)初值,這稱為變量初始化。初值可以是常量,也可以是一個(gè)有確定值的表達(dá)式。如floata,b=5.78*3.5,c=2*sin(2.0);表示定義了a,b,c為單精度浮點(diǎn)型變量,變量a未初始化。對(duì)b初始化為5.78*3,對(duì)c初始化為2*sin(2.0),在編譯連接后,從標(biāo)準(zhǔn)函數(shù)庫(kù)得到正弦函數(shù)sin(2.0)的值,因此變量c有確定的初值。inta=3;相當(dāng)于以下兩個(gè)語(yǔ)句:inta;//指定a為整型變量a=3;//賦值語(yǔ)句,將3賦給a2.3.4為變量賦初值

2023/2/622長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院在定義變量時(shí),如果加上關(guān)鍵字const,則變量的值在程序運(yùn)行期間不能改變,這種變量稱為常變量(constantvariable)。例如,constinta=3;//用const來(lái)聲明這種變量的值不能改變,指定其值始終為3在定義常變量時(shí)必須同時(shí)對(duì)它初始化,此后它的值不能再改變。常變量不能出現(xiàn)在賦值號(hào)的左邊。例如上面一行不能寫(xiě)成constinta;a=3;//常變量不能被賦值2.3.5常變量2023/2/623長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院C++的運(yùn)算符十分豐富,使得C++的運(yùn)算十分靈活方便。例如把賦值號(hào)(=)也作為運(yùn)算符處理,這樣,a=b=c=4就是合法的表達(dá)式,這是與其他語(yǔ)言不同的。C++提供了以下運(yùn)算符:(1)算術(shù)運(yùn)算符

+(加)-(減)*(乘)/(除)%(整除求余)++(自加)--(自減)(2)關(guān)系運(yùn)算符>(大于)<(小于)==(等于)>=(大于或等于)<=(小于或等于)?。?不等于)(3)邏輯運(yùn)算符&&(邏輯與)||(邏輯或)!(邏輯非)(4)位運(yùn)算符<<(按位左移)>>(按位右移)&(按位與)|(按位或)∧(按位異或)~(按位取反)在本章中主要介紹算術(shù)運(yùn)算符與算術(shù)表達(dá)式,賦值運(yùn)算符與賦值表達(dá)式,逗號(hào)運(yùn)算符與逗號(hào)表達(dá)式,其他運(yùn)算符將在以后各章中陸續(xù)介紹。2.4C++的運(yùn)算符2023/2/624長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院+(加法運(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ù),如7%4的值為3)。兩個(gè)整數(shù)相除的結(jié)果為整數(shù),如5/3的結(jié)果值為1,舍去小數(shù)部分。 C++語(yǔ)言規(guī)定了運(yùn)算符的優(yōu)先級(jí)和結(jié)合性。在求解表達(dá)式時(shí),先按運(yùn)算符的優(yōu)先級(jí)別高低次序執(zhí)行,例如先乘除后加減。如有表達(dá)式a-b*c,b的左側(cè)為減號(hào),右側(cè)為乘號(hào),而乘號(hào)優(yōu)先于減號(hào),因此,相當(dāng)于a-(b*c)。如果在一個(gè)運(yùn)算對(duì)象兩側(cè)的運(yùn)算符的優(yōu)先級(jí)別相同,如a-b+c,則按規(guī)定的“結(jié)合方向”處理。2.5算術(shù)運(yùn)算符與算術(shù)表達(dá)式2023/2/625長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院在表達(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.72.5.3表達(dá)式中各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算2023/2/626長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院假設(shè)已指定i為整型變量,f為float變量,d為double型變量,e為long型,有下面表達(dá)式:10+′a′+i*f-d/e運(yùn)算次序?yàn)椋孩龠M(jìn)行10+′a′的運(yùn)算,先將′a′轉(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.000…00),結(jié)果為double型。④將變量e轉(zhuǎn)換成double型,d/e結(jié)果為double型。⑤將10+′a′+i*f的結(jié)果與d/e的商相減,結(jié)果為double型。上述的類型轉(zhuǎn)換是由系統(tǒng)自動(dòng)進(jìn)行的。2023/2/627長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院使用自增(++)和自減(--)運(yùn)算符,他們的作用是使變量的值增1或減1,如++i(使用i之前,先使i的值加1,若i的原值為3,執(zhí)行j=++i后,j值為4)--i(在使用i之前,先使i的值減1,當(dāng)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)?)(1)自增運(yùn)算符(++)和自減運(yùn)算符(--)只能用于變量,而不能用于常量或表達(dá)式。(2)++和--的結(jié)合方向是“自右至左”,見(jiàn)附錄B。(3)自增運(yùn)算符(++)和自減運(yùn)算符(--)使用十分靈活,但在很多情況下可能出現(xiàn)歧義性,產(chǎn)生“意想不到”的副作用。(4)自增(減)運(yùn)算符在C++程序中是經(jīng)常見(jiàn)到的,常用于循環(huán)語(yǔ)句中,使循環(huán)變量自動(dòng)加1。也用于指針變量,使指針指向下一個(gè)地址。2.5.4自增和自減運(yùn)算符2023/2/628長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院程序編制者還可以利用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符將一個(gè)表達(dá)式轉(zhuǎn)換成所需類型。例如:(double)a(將a轉(zhuǎn)換成double類型)(int)(x+y)(將x+y的值轉(zhuǎn)換成整型)(float)(5%3)(將5%3的值轉(zhuǎn)換成float型)強(qiáng)制類型轉(zhuǎn)換的一般形式為(類型名)(表達(dá)式)如果寫(xiě)成(int)x+y則只將x轉(zhuǎn)換成整型,然后與y相加。以上強(qiáng)制類型轉(zhuǎn)換的形式是原來(lái)C語(yǔ)言使用的形式,C++把它保留了下來(lái),以利于兼容。C++還增加了以下形式:類型名(表達(dá)式)如int(x)或int(x+y)類型名不加括號(hào),而變量或表達(dá)式用括號(hào)括起來(lái)。這種形式類似于函數(shù)調(diào)用。(int)x如果x原指定為float型,值為3.6,進(jìn)行強(qiáng)制類型運(yùn)算后得到一個(gè)int型的中間變量,它的值等于3,而x原來(lái)的類型和值都不變。2.5.5強(qiáng)制類型轉(zhuǎn)換運(yùn)算符2023/2/629長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院例2.4強(qiáng)制類型轉(zhuǎn)換。#include<iostream>usingnamespacestd;intmain(){floatx;

inti;x=3.6;i=(int)x;

cout<<″x=″<<x<<″,i=″<<i<<endl;return0;}運(yùn)行結(jié)果如下:x=3.6,i=3x的型仍為float型,值仍等于3.6。2023/2/630長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院賦值符號(hào)“=”就是賦值運(yùn)算符,它的作用是將一個(gè)數(shù)據(jù)賦給一個(gè)變量。如“a=3”的作用是執(zhí)行一次賦值操作(或稱賦值運(yùn)算)。把常量3賦給變量a。也可以將一個(gè)表達(dá)式的值賦給一個(gè)變量。如果賦值運(yùn)算符兩側(cè)的類型不一致,但都是數(shù)值型或字符型時(shí),在賦值時(shí)會(huì)自動(dòng)進(jìn)行類型轉(zhuǎn)換。(1)將浮點(diǎn)型數(shù)據(jù)(包括單、雙精度)賦給整型變量時(shí),舍棄其小數(shù)部分。(2)將整型數(shù)據(jù)賦給浮點(diǎn)型變量時(shí),數(shù)值不變,但以指數(shù)形式存儲(chǔ)到變量中。(3)將一個(gè)double型數(shù)據(jù)賦給float變量時(shí),要注意數(shù)值范圍不能溢出。(4)字符型數(shù)據(jù)賦給整型變量,將字符的ASCII碼賦給整型變量。2.6賦值運(yùn)算符與賦值表達(dá)式

2023/2/631長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院(5)將一個(gè)int、short或long型數(shù)據(jù)賦給一個(gè)char型變量,只將其低8位原封不動(dòng)地送到char型變量(發(fā)生截?cái)啵?。例如shortinti=289;charc;c=i;//將一個(gè)int型數(shù)據(jù)賦給一個(gè)char型變量賦值情況見(jiàn)圖2.8。為方便起見(jiàn),以一個(gè)int型數(shù)據(jù)占兩個(gè)字節(jié)(16位)的情況來(lái)說(shuō)明。圖2.82023/2/632長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院(6)將signed(有符號(hào))型數(shù)據(jù)賦給長(zhǎng)度相同的unsigned(無(wú)符號(hào))型變量,將存儲(chǔ)單元內(nèi)容原樣照搬(連原有的符號(hào)位也作為數(shù)值一起傳送)。例2.5將有符號(hào)數(shù)據(jù)傳送給無(wú)符號(hào)變量。#include<iostream>usingnamespacestd;intmain(){unsignedshorta;shortintb=-1;a=b;

cout<<″a=″<<a<<endl;return0;}2023/2/633長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院運(yùn)行結(jié)果為65535賦給b的值是-1,怎么會(huì)得到65535呢?請(qǐng)看圖2.9所示的賦值情況。圖2.9-1的補(bǔ)碼形式為1111111111111111(即全部16個(gè)二進(jìn)制位均為1),將它傳送給a,而a是無(wú)符號(hào)型變量,16個(gè)位全1是十進(jìn)制的65535。如果b為正值,且在0~32767之間,則賦值后數(shù)值不變。不同類型的整型數(shù)據(jù)間的賦值歸根結(jié)底就是一條:按存儲(chǔ)單元中的存儲(chǔ)形式直接傳送。C和C++使用靈活,在不同類型數(shù)據(jù)之間賦值時(shí),常常會(huì)出現(xiàn)意想不到的結(jié)果,而編譯系統(tǒng)并不提示出錯(cuò),全靠程序員的經(jīng)驗(yàn)來(lái)找出問(wèn)題。這就要求編程人員對(duì)出現(xiàn)問(wèn)題的原因有所了解,以便迅速排除故障。2023/2/634長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院在賦值符“=”之前加上其他運(yùn)算符,可以構(gòu)成復(fù)合的運(yùn)算符。如果在“=”前加一個(gè)“+”運(yùn)算符就成了復(fù)合運(yùn)算符“+=”。例如,可以有

a+=3等價(jià)于a=a+3x*=y+8等價(jià)于x=x*(y+8)x%=3等價(jià)于x=x%3以“a+=3”為例來(lái)說(shuō)明,它相當(dāng)于使a進(jìn)行一次自加3的操作。即先使a加3,再賦給a。同樣,“x*=y+8”的作用是使x乘以(y+8),再賦給x。C++可以使用以下幾種復(fù)合賦值運(yùn)算符:+=,-=,*=,/=,%=,<<=,>>=,&=,∧=,|=其中后5種是有關(guān)位運(yùn)算的。2.6.3復(fù)合的賦值運(yùn)算符2023/2/635長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院對(duì)賦值表達(dá)式求解的過(guò)程是:先求賦值運(yùn)算符右側(cè)的“表達(dá)式”的值,然后賦給賦值運(yùn)算符左側(cè)的變量。賦值運(yùn)算符左側(cè)的標(biāo)識(shí)符稱為“左值”(leftvalue,簡(jiǎn)寫(xiě)為lvalue)。常變量也不能作為左值,因?yàn)槌W兞坎荒鼙毁x值。出現(xiàn)在賦值運(yùn)算符右側(cè)的表達(dá)式稱為“右值”(rightvalue,簡(jiǎn)寫(xiě)為rvalue)。如inta=3,b,c;b=a;//b是左值c=b;//b也是右值賦值表達(dá)式中的“表達(dá)式”,又可以是一個(gè)賦值表達(dá)式。如a=(b=5)下面是賦值表達(dá)式的例子:

a=b=c=5(賦值表達(dá)式值為5,a,b,c值均為5)

a=5+(c=6)(表達(dá)式值為11,a值為11,c值

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論