c2第二章基本數(shù)據(jù)類型及其運(yùn)算.ppt
《c2第二章基本數(shù)據(jù)類型及其運(yùn)算.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《c2第二章基本數(shù)據(jù)類型及其運(yùn)算.ppt(65頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
第2章數(shù)據(jù)類型及其運(yùn)算,程序由算法和數(shù)據(jù)構(gòu)成。數(shù)據(jù)是算法的處理對(duì)象。要學(xué)習(xí)程序設(shè)計(jì),首先要了解處理對(duì)象—數(shù)據(jù)的特點(diǎn)。本章中我們討論C語言中基本數(shù)據(jù)及其類型和基本的運(yùn)算方法。,,,,2.1數(shù)據(jù)類型通過對(duì)上一章的學(xué)習(xí),我們知道:不同的數(shù)據(jù)在計(jì)算機(jī)中的表示方法是不同的(如:定點(diǎn)數(shù)、浮點(diǎn)數(shù)、字符數(shù)據(jù)等不同類型),這是由計(jì)算機(jī)的二進(jìn)制存儲(chǔ)特性所決定的。在程序中要指定數(shù)據(jù)的類型,以便編譯系統(tǒng)能夠按指定類型確定其表示方法、字節(jié)個(gè)數(shù)、以及運(yùn)算方式。,,,,,,,圖2-1C語言的數(shù)據(jù)類型,表2-1中,給出了TurboC的基本類型名和長度以及取值范圍。234頁的附錄表-12中,給出了VC++的基本類型名和長度以及取值范圍。需要指出的是:,(1)在各種C的版本中:char、signedchar、unsignedchar型數(shù)據(jù)的長度都是1個(gè)字節(jié)。,(2)在VC++中int與long型數(shù)據(jù)在長度、取值范圍是一致的:-21億─+21億。在TurboC中int與short型數(shù)據(jù)在長度、取值范圍是一致的:-32768─+32767。,(3)需要指出的是:char型與signedchar型或unsignedchar型二者之一相同。int型與short型或long型二者之一相同。具體如何,視不同編譯系統(tǒng)而定。,(4)在C語言中,字符型數(shù)據(jù)存放的是字符的ASCII碼值。有符字符型數(shù)據(jù)用一個(gè)字節(jié)的最高位作為符號(hào)位,低七位表示字符的ASCII碼值。無符字符型用一字節(jié)的全部八位表示字符的ASCII碼值。利用這個(gè)存儲(chǔ)特點(diǎn),C語言允許字符型數(shù)據(jù)以其ASCII碼值(整型數(shù))參加數(shù)值運(yùn)算。,(5)在VC++和TurboC中,float型數(shù)據(jù)的存儲(chǔ)格式為:階碼占8位,尾數(shù)占23位,1位符號(hào)位,共32位;double型數(shù)據(jù)的存儲(chǔ)格式為:階碼占11位,尾數(shù)占52位,1位符號(hào)位,共64位。TurboC采用IEEE標(biāo)準(zhǔn)的浮點(diǎn)數(shù)據(jù)存貯格式。詳見(美國)電子和電氣工程師協(xié)會(huì)網(wǎng)站http://standards.ieee.orgTheInstituteofElectricalandElectronicsEngineers,從表中可以看出:C語言中基本數(shù)據(jù)類型很多,短的、長的、有符的、無符的,變化豐富。初學(xué)者可能感到比較困難,其實(shí)從數(shù)據(jù)的存儲(chǔ)形式上來看,歸納起來實(shí)質(zhì)上只有兩大類型的數(shù)據(jù)—整型數(shù)據(jù)和實(shí)型數(shù)據(jù),即定點(diǎn)整數(shù)和浮點(diǎn)數(shù)。,,2.2常量與變量2.2.1常量所謂“常量”是指在程序運(yùn)行過程中,其值不能被改變的量。C語言中常量有整型常量、實(shí)型常量、字符型常量、字符串常量、符號(hào)常量和枚舉常量。本節(jié)將介紹上述除枚舉常量外的所有常量,枚舉常量在第九章中介紹。,,1.整型常量整型常量又簡(jiǎn)稱整數(shù),它有三種形式:十進(jìn)制整數(shù)、八進(jìn)制整數(shù)、十六進(jìn)制整數(shù)。十進(jìn)制整數(shù)十進(jìn)制整數(shù)由0~9十個(gè)數(shù)字、正號(hào)、負(fù)號(hào)組成,正負(fù)號(hào)只能出現(xiàn)在最左邊,表示一個(gè)整數(shù)時(shí),正號(hào)可以省略,多位數(shù)時(shí),最左邊的數(shù)字不能為0。例如:123?597―4250―0是合法的整數(shù)。而0932是非法的整數(shù)表示方法。,,八進(jìn)制整數(shù)八進(jìn)制整數(shù)必須以0(零)開頭并由0~7八個(gè)數(shù)字、正號(hào)、負(fù)號(hào)組成,正負(fù)號(hào)只能出現(xiàn)在最左邊。例如:0123?0404―0453―00是合法的八進(jìn)制整數(shù),而0128是非法的。,,十六進(jìn)制整數(shù)十六進(jìn)制整數(shù)必須以0 x或0X開頭,由0~9,a,b,c,d,e,f(或A,B,C,D,E,F)這十六個(gè)符號(hào)和正負(fù)號(hào)組成,正負(fù)號(hào)只能出現(xiàn)在最左邊。例如:0 x123?0Xfa1―0 x9a12―0 x0是合法的十六進(jìn)制數(shù)。0 x12g―x897a25b是非法的十六進(jìn)制數(shù)。,,整型常量的后綴U和LU和L分別是unsigned和long的第一個(gè)字母,可以跟在整型常量的后面,以指明該整數(shù)為長整型常數(shù)(long型)、無符整型常數(shù)(unsigned型)以及無符長整型整數(shù)(unsignedlong型)。使用時(shí)U和L可以小寫。例如:長整型數(shù):32768l―0761L0 xd1dL無符整型數(shù):32768u―0 x2a7U0277U無符長整型數(shù):555ul0 xabcLU0722ul*對(duì)于TC編輯器:當(dāng)一個(gè)整型常數(shù)的值是在―32768~32767之間,則該整型常量為int型,當(dāng)它的值超過―32768~32767而在―21億~21億之間時(shí),則該整型常量為long型。通過使用L和U后綴,可以使在―32768~32767之間的int型常量成為long型常量或使有符常量成為無符常量。,,2.實(shí)型常量實(shí)型常量又稱浮點(diǎn)型常量,它有兩種表示方法:十進(jìn)制小數(shù)形式和指數(shù)形式。十進(jìn)制小數(shù)形式十進(jìn)制小數(shù)由0~9十個(gè)數(shù)字、小數(shù)點(diǎn)、正號(hào)、負(fù)號(hào)組成,正負(fù)號(hào)只能出現(xiàn)在最左邊。例如:?123.5―032.45―.00.是合法的實(shí)型常量。,,指數(shù)形式指數(shù)的一般形式如下:[][整數(shù)部分][.小數(shù)部分][en]其中[]中內(nèi)容為可選,但“整數(shù)部分”和“小數(shù)部分”二者至少選其一,不可全無。[en]為指數(shù)部分,e可大寫,n是一個(gè)1~3位的十進(jìn)制整數(shù)(第一位可為0),2e2表示2?102,。例如:?123.5E3―0.45e―41E?0120e5是合法的指數(shù)形式。-E5-1E2.05.e50.8E?k是非法的指數(shù)形式。,,實(shí)型常量的后綴F和L因?yàn)閷?shí)型常量缺省的類型為雙精度實(shí)型,為了達(dá)到存儲(chǔ)、精度、類型轉(zhuǎn)換的需要,可用后綴F和L。F和L分別是float和longdouble的第一個(gè)字母,可以跟在實(shí)型常量的后面,以指明該實(shí)數(shù)為單精度實(shí)數(shù)(float型)或長雙精度實(shí)數(shù)(longdouble型)。使用時(shí)F和L可以小寫。例如:?jiǎn)尉葘?shí)數(shù):32.768f―1F1.2e3F長雙精度實(shí)數(shù):1.2e309l―0.1L5L,,,3.字符型常量字符型常量是用一對(duì)單引號(hào)括起來的一個(gè)字符,如:a,A,$,等??兆址彩亲址?個(gè)字符,它的值是0,可以表示為,也可以表示為\0,程序中總是用\0表示空字符。在C語言中還有另外一種字符常量,稱為轉(zhuǎn)義字符(EscapeSequences),它是以反斜線(\)開頭的字符串,通常也把它們稱為控制字符,因?yàn)樗鼈冎械拇蠖鄶?shù)具有控制功能,如\n代表換行符,在printf函數(shù)中使用它可以實(shí)現(xiàn)換行的功能。C語言中的轉(zhuǎn)義字符見表2-2。,,UsingEscapeSequences轉(zhuǎn)義字符的應(yīng)用,EscapeSequenceacombinationoftwocharactersthatproducesaspecialeffectwithinatextstring.The1stcharacterisalwaysabackslash(\).轉(zhuǎn)義字符是兩個(gè)字符構(gòu)成字符串組合,用于實(shí)現(xiàn)一種特殊效果。轉(zhuǎn)義字符的第一個(gè)字符總是反杠\。,EscapeSequenceList,Escapechar.Meaning\0null空字符\aalarm響鈴\bback退格,從當(dāng)前位置向前移動(dòng)一格\ffeed換頁,從當(dāng)前位置換到下一頁開頭\nnewline換行,從當(dāng)前位置換到下一行開頭\rreturn回車,從當(dāng)前位置換到本行的開頭\ttabkey水平制表,水平換到下一tab位置\\backslash反斜線字符\\ˊsinglequote單引號(hào)字符ˊ\〞doublequote雙引號(hào)字符〞\ddd000~377范圍里1到3位8進(jìn)制數(shù)字對(duì)應(yīng)的ASCII字符\xhh0 x00~0 xff范圍里1到2位16進(jìn)制數(shù)字對(duì)應(yīng)的ASCII字符,在C語言中,字符型常量是一個(gè)整數(shù),其值是它所對(duì)應(yīng)的ASCII碼的值(見第222頁附錄Ⅰ),字符型數(shù)據(jù)可以與數(shù)值型數(shù)據(jù)通用,即可以進(jìn)行算術(shù)運(yùn)算。,,如:a的值是97,A的值是65,\的值是39。也可以用\ddd或\xhh來表示一個(gè)字符。以下都是表示水平制表符\t:\t\011\\11\x09\x9而a也可以寫成以下形式:\141\x61例2.1,main(){printf(Hello,C\n);printf(\110\145\154\154\157\54\103\12);printf(\12/4=3\\t\\isastring\\\n);getch();}運(yùn)行結(jié)果:Hello,CHello,C12/4=3\isastring\,,4.字符串常量字符串常量是由雙引號(hào)括起來的一串字符。如:1234、中國,北京等。值得注意的是:字符是用單引號(hào)括起來的,而字符串是用雙引號(hào)括起來的。a是字符,而a是字符串。字符串可以為空串即包含0個(gè)字符的串,表示為。C語言規(guī)定:在每一個(gè)字符串后,系統(tǒng)自動(dòng)加一個(gè)\0,作為字符串的結(jié)束標(biāo)志符,以便判字符串的長度。由于這個(gè)原因,字符串的長度比實(shí)際長度大1。空串的長度為1,而不是0。,,在使用字符串時(shí),應(yīng)當(dāng)注意以下情況:(1)單引號(hào)作為字符串的組成字符時(shí),可以直接使用。例如:printf(Itsmybook\n);執(zhí)行后輸出為:Itsmybook(2)一個(gè)字符串不能分寫在兩行或多行上,如果非要寫在兩行上,則可在前一行的字符串尾部加一個(gè)反斜線\或者把不同行上的字符串分別用雙引號(hào)括起來。例如:printf(Cprogramming\languageispowerful\n);或者:printf(Cprogramminglanguageispowerful\n);,5.符號(hào)常量符號(hào)常量是代表一個(gè)字符序列的標(biāo)識(shí)符(又稱宏名)。一旦定義了一個(gè)符號(hào)常量,則它就與該字符序列是等價(jià)的。在C語言中,定義符號(hào)常量的方法有三種:一是使用編譯預(yù)處理的宏替換功能#define;二是使用類型限定符const說明并初始化。三是使用枚舉類型來定義。,,宏替換功能#define定義符號(hào)常量,格式如下:#define標(biāo)識(shí)符字符序列其中:字符序列可以由任意字符組成,還可以是已經(jīng)定義過的符號(hào)常量。符號(hào)常量應(yīng)先定義后使用,可以出現(xiàn)在程序中的任何位置,習(xí)慣上盡量放在程序的前面且符號(hào)常量(宏名)用大寫字母書寫,以示與其它標(biāo)識(shí)符的區(qū)別。需要指出的是:當(dāng)一個(gè)標(biāo)識(shí)符被定義成符號(hào)常量,則在編譯時(shí),編譯預(yù)處理首先將程序中所有該標(biāo)識(shí)符用相應(yīng)的字符序列來替換,然后再進(jìn)行后續(xù)處理。例如:#definePI3.14159#defineSPACE‘’等。例2.2,#defineSTR1"Thisisa"main(){#defineSTR2"joke"#defineMSTR1STR2printf(M);getch();}運(yùn)行結(jié)果:Thisisajoke,,用#undef取消已定義了的符號(hào)常量。例如:#undefM取消定義后,該符號(hào)常量(宏名)還可再定義并使用。,在實(shí)際應(yīng)用中,#define常用來(臨時(shí))替換程序中的一些變量名或函數(shù)名,以避免對(duì)源程序的多處修改。,(補(bǔ)充)NamedConstants常變量,諸如50,3.1416等在C++中稱為literalconstants,即字面常量.literalconstants在使用中存在兩方面問題:讀者常難以理解常量的(物理)含義;當(dāng)改變常量的值時(shí),必須逐一的變更.在定義變量時(shí),如果加上關(guān)鍵字const,則變量的值在程序運(yùn)行期間不能改變,這種變量稱為常變量(也稱為定義符號(hào)常量)。定義常變量的一般格式為:const類型說明符常變量名=常量值;例如:constintPASS_MARK=50;ItisstandardpracticeinC/C++touseuppercasewhennamingconstants.Thishelpsdistinguishthemfromvariables.常變量名應(yīng)使用大寫字母,以便與變量名區(qū)別,使用常變量的例子:constintPASS_MARK=50;main(){printf("%d",PASS_MARK+1);getch();},2.2.2變量所謂“變量”是指在程序運(yùn)行過程中,其值可以被改變的量。變量用變量名來表示,當(dāng)程序運(yùn)行時(shí),系統(tǒng)為每一個(gè)變量分配一個(gè)內(nèi)存單元并在變量名和該內(nèi)存單元地址間建立一一對(duì)應(yīng)的關(guān)系,引用該變量名時(shí),實(shí)際上就是引用該變量名所對(duì)應(yīng)地址單元的內(nèi)容。如圖2-2所示:,數(shù)據(jù)是有不同類型的,它們的長度、表示方法也各不相同,因此變量也應(yīng)有不同的類型,用以存放各種類型的數(shù)據(jù)。常量的類型是通過書寫形式確定的,是隱式說明的。變量的類型則需要預(yù)先定義,是顯式說明的。在程序執(zhí)行時(shí),系統(tǒng)為已經(jīng)定義的不同類型的變量分配單元,如為一個(gè)char型變量分配一個(gè)1字節(jié)的存儲(chǔ)單元,為一個(gè)float型變量分配一個(gè)4字節(jié)的存儲(chǔ)單元等,并確定了數(shù)據(jù)在其中的存儲(chǔ)形式。,變量定義的格式如下:類型定義符變量名表;例如:intstudent_num;floatstudent_score,aver;其中,類型定義符(見表2-1)定義變量名表中所列變量的類型,變量名表由一個(gè)或多個(gè)變量名組成,其間用逗號(hào)分隔,變量名的命名應(yīng)符合C語言標(biāo)識(shí)符的規(guī)定。,定義變量時(shí),可以在定義的同時(shí)對(duì)變量進(jìn)行初始化(賦初值),其格式如下:類型定義符變量名=表達(dá)式,;例如:longdistance=700000,height;doublearea=9.6e7;floats=3*distance;其中,變量名=表達(dá)式中的“=”稱為賦值號(hào),其含義是將“=”右邊表達(dá)式的值賦給其左邊的變量。,在定義變量時(shí),應(yīng)注意以下幾點(diǎn):(1)在使用變量時(shí),應(yīng)注意“先定義,后使用”的原則。C語言程序中,使用的任何變量必須在使用前已經(jīng)定義過,否則編譯會(huì)給出錯(cuò)誤信息undeclaredidentifier。(2)一般在一個(gè)函數(shù)中,變量名不能重復(fù)定義,如果重復(fù)定義,則編譯會(huì)給出錯(cuò)誤信息redefinition。(3)除非有特定的需要,通常把定義變量的語句集中放在函數(shù)的開始處,在C語言程序中,將變量定義語句放在不同的位置,其含義有所不同,隨意放置可能引起不必要的錯(cuò)誤。,建議:初學(xué)者加強(qiáng)對(duì)不同類型數(shù)據(jù)之表示方法以及存儲(chǔ)方式的理解。如:inta;語句定義了一個(gè)什么類型的變量,變量名是什么?該變量所對(duì)應(yīng)的內(nèi)存單元有幾個(gè)字節(jié)?是有符還是無符的?數(shù)據(jù)范圍是多少?floata;或doublea;或longa;呢?注意:計(jì)算機(jī)內(nèi)部是以二進(jìn)制處理數(shù)據(jù)的,因此會(huì)產(chǎn)生誤差:main(){floatx=3.1;printf("%.8f",x);getch();顯示的是:3.0999999},指針的概念,指針是C語言最具特色的語言成分。也是C語言最具爭(zhēng)論的語言成分。簡(jiǎn)單地說,指針就是地址。地址是計(jì)算機(jī)內(nèi)存管理中的重要概念。計(jì)算機(jī)內(nèi)存中的變量,指令的存取均是通過地址來進(jìn)行的。例如,在程序中對(duì)變量的訪問是通過變量名進(jìn)行的,而實(shí)際上系統(tǒng)是通過變量的地址來訪問變量的。,定義存放3的整型變量a可以用:inta=3;而定義存放變量a所在內(nèi)存的地址2006,就要用指針變量了:int*p;,也就是說:int*p定義了一個(gè)可以存放任何整型變量地址的指針變量p。要想讓上邊的a的地址2006存入到p里面,可以用賦值的方式:p=,main(){//顯示a的內(nèi)存地址inta=3;int*p;p=},指針變量,定義指針變量的一般形式是:類型標(biāo)識(shí)符*指針變量名例如:int*p;定義了一個(gè)指向整形變量的指針變量p。通常,將指針和被指變量一起定義:intx,*p=指針變量是一種特殊的變量,它里面存儲(chǔ)的數(shù)是另一個(gè)變量的內(nèi)存(首)地址。指針變量必須先定義,并且指向了指定類型的變量(獲得實(shí)際地址值)后才能使用。否則其值為隨機(jī)數(shù),獲取其引用變量的值時(shí)出現(xiàn)運(yùn)行錯(cuò)。指針變量的類型是它指向的那個(gè)變量的類型。在一個(gè)指針變量中只能存放同一類型變量的地址。否則造成數(shù)據(jù)提取的錯(cuò)誤。,指針變量的引用,在表達(dá)式中,可以使用float*q;p=},運(yùn)行結(jié)果:0013FF7C30013FF7C0,由于p為整型指針,q為實(shí)型指針,在提取指向?qū)ο髕的值時(shí)候就造成了不一致(應(yīng)當(dāng)都是3)。,2.3運(yùn)算符與表達(dá)式C語言的的特點(diǎn)之一就是運(yùn)算符(Operator)多,涉及的運(yùn)算范圍廣,使用時(shí)變化非常豐富??梢愿鶕?jù)運(yùn)算符的功能進(jìn)行分類(見表2-3),也可以根據(jù)運(yùn)算符所需操作對(duì)象——操作數(shù)(Operand)的個(gè)數(shù)分類。如:?jiǎn)文窟\(yùn)算符(一個(gè)操作數(shù))、雙目運(yùn)算符(兩個(gè)操作數(shù))、三目運(yùn)算符(三個(gè)操作數(shù))等。用運(yùn)算符將若干個(gè)操作數(shù)連接起來構(gòu)成的式子稱為表達(dá)式。單個(gè)的常量、變量、有返回值的函數(shù)調(diào)用也是表達(dá)式(簡(jiǎn)單表達(dá)式)。表達(dá)式運(yùn)算的結(jié)果是一個(gè)值,稱為表達(dá)式的值。表達(dá)式結(jié)果值的類型稱為表達(dá)式的類型。,注意:(1)運(yùn)算符對(duì)操作數(shù)有什么要求(類型、個(gè)數(shù)等)以及運(yùn)算結(jié)果的數(shù)據(jù)類型。(2)運(yùn)算符的優(yōu)先級(jí)別和運(yùn)算符的結(jié)合方向,它是決定表達(dá)式的運(yùn)算規(guī)則的重要因素。運(yùn)算符的優(yōu)先級(jí)別與結(jié)合型見附錄Ⅱ。,運(yùn)算符名稱表達(dá)式結(jié)果及類型+加法運(yùn)算符或正值運(yùn)算符(雙目)1+2.63.6實(shí)型-減法運(yùn)算符或負(fù)值運(yùn)算符(雙目)3-12整型*乘法運(yùn)算符(雙目)4*312整型/除法運(yùn)算符(雙目)4/31整型%模運(yùn)算符或稱求余運(yùn)算符(雙目)8%-53整型+正號(hào)運(yùn)算符(單目)+2.6+2.6實(shí)型-負(fù)號(hào)運(yùn)算符(單目)-3-3整型表2-4,2.3.1算術(shù)運(yùn)算符和算術(shù)表達(dá)式算術(shù)運(yùn)算符如表2-4所示:,1.說明:(1)算術(shù)運(yùn)算符是雙目運(yùn)算符,要求有兩個(gè)運(yùn)算對(duì)象,其中,+和-運(yùn)算符還可作單目運(yùn)算符。用算術(shù)運(yùn)算符將運(yùn)算對(duì)象(操作數(shù))連接起來的式子稱為算術(shù)表達(dá)式。(2)算術(shù)運(yùn)算符優(yōu)先級(jí)別的由高到低的順序是:?jiǎn)文窟\(yùn)算符+和-、*、/、%、雙目運(yùn)算符+和-。同級(jí)運(yùn)算符的運(yùn)算順序是從左至右。(3)單目運(yùn)算符+和-的結(jié)合方向?yàn)閺挠抑磷螅渌p目運(yùn)算符的結(jié)合方向是從左至右。例如(3),(4)求余運(yùn)算符%只能用于整型量之間,且以被除數(shù)的符號(hào)作為余數(shù)的符號(hào)。例如(4)(5)TurboC提供了豐富的包括數(shù)學(xué)函數(shù)在內(nèi)的庫函數(shù)(見附錄Ⅲ),以供編程使用。使用數(shù)學(xué)庫函數(shù)時(shí)應(yīng)在程序中加上編譯預(yù)處理命令#include。在使用庫函數(shù)時(shí),應(yīng)遵守函數(shù)對(duì)參數(shù)的要求,如:參數(shù)個(gè)數(shù),參數(shù)類型以及參數(shù)的單位等。例如(5)另外,可以使用一對(duì)或多對(duì)()運(yùn)算符,()的優(yōu)先級(jí)別最高,其中的表達(dá)式優(yōu)先運(yùn)算。思考:5*2+8/2+2與5*2+8/(2+2)的值各為多少?go,例如(3)表達(dá)式-5*2+8/2的值為-6,先算-5(右結(jié)合,負(fù)號(hào)運(yùn)算),再乘以2,然后處理8除以2,最后完成加法。例如(4)表達(dá)式-5%2的值為-1,而表達(dá)式5%-2的值為1。例如(5)#include運(yùn)行后結(jié)果為:main()3.000000{floatr=9.0;printf(“%f\n”,sqrt(r));},,2.算術(shù)表達(dá)式的類型轉(zhuǎn)換規(guī)則如下:(1)算術(shù)表達(dá)式中,當(dāng)操作數(shù)的類型相同時(shí),其結(jié)果類型不變。例如(1)(2)在C語言中,字符型操作數(shù)可以以其ASCII碼值參加算術(shù)運(yùn)算。例如(2)(3)在C語言中,不同類型的操作數(shù)是可以進(jìn)行混合運(yùn)算的,其結(jié)果類型將按照規(guī)則發(fā)生變化。具體規(guī)則參見2.3.7節(jié)。go,例如(1)5/2的結(jié)果不是2.5而是2,就是因?yàn)檫@個(gè)原因。例如(2)a+3的結(jié)果是整型數(shù)100,因?yàn)閍的ASCII碼值為97。,,2.3.2賦值運(yùn)算符和賦值表達(dá)式賦值運(yùn)算符以及復(fù)合賦值運(yùn)算符如表2-5所示:算符名稱表達(dá)式等價(jià)于=賦值運(yùn)算符(雙目)a=6+2+=加賦值運(yùn)算符(雙目)a+=3a=a+3-=減賦值運(yùn)算符(雙目)a-=4a=a-4*=乘賦值運(yùn)算符(雙目)a*=9a=a*9/=除賦值運(yùn)算符(雙目)a/=5a=a/5%=運(yùn)算符(雙目)a%=6a=a%6表2-5,1.說明:(1)賦值運(yùn)算符“=”的作用是將其右邊表達(dá)式的值賦給其左邊的一個(gè)變量,用賦值運(yùn)算符將變量和表達(dá)式連接起來組成賦值表達(dá)式。例如(1)(2)一個(gè)變量可以被多次賦值,變量僅保存最后一次賦給的值。賦值運(yùn)算符“=”的右邊可以是表達(dá)式,而左邊只能是變量。(3)賦值運(yùn)算符不同于數(shù)學(xué)上的“等號(hào)”,a=b和b=a再數(shù)學(xué)上是等價(jià)的,但在C語言中,前者表示將變量b的值賦給變量a,而后者正好相反。(4)賦值表達(dá)式的值是賦給變量的值。(5)賦值運(yùn)算符是雙目運(yùn)算符,賦值運(yùn)算符的優(yōu)先級(jí)別相同,其結(jié)合方向?yàn)閺挠抑磷?。算術(shù)運(yùn)算符的優(yōu)先級(jí)高于賦值運(yùn)算符。例如(5)go,例如(1)a=5是一個(gè)賦值表達(dá)式,它表示將5賦給變量a。例如(5)a=3+2先算+,因?yàn)?的優(yōu)先級(jí)高。然后將5賦給a。運(yùn)算完成后,變量a的值為5,表達(dá)式的值為5。a=b=7先算b=7,因?yàn)?的結(jié)合方向?yàn)橛医Y(jié)合。賦值表達(dá)式b=7的值為7,再將7賦給a。運(yùn)算完成后,變量a和b的值為7,整個(gè)表達(dá)式的值為7。a=(b=5)/(c=2)先算b=5,再算c=2,然后進(jìn)行除法運(yùn)算結(jié)果為2,最終將2賦給a。運(yùn)算完成后,b的值為5,c的值為2,a的值為2,整個(gè)表達(dá)式的值為2。,,思考:若變量a已經(jīng)有值且為9,那么表達(dá)式b=(a=4)/(b=a)的值是1還是0?回答是1,為什么?2.賦值表達(dá)式的類型轉(zhuǎn)換規(guī)則如下:(1)將整型數(shù)據(jù)賦給實(shí)型變量時(shí),數(shù)據(jù)以浮點(diǎn)數(shù)形式存儲(chǔ)到實(shí)型變量中去,但值的大小不變。例如:若已經(jīng)定義floata,如果a=19,則將19轉(zhuǎn)換成19.00000(單精度實(shí)型有7位有效數(shù)字),然后賦給變量a。若已經(jīng)定義doubleb,如果b=19,則賦給b的值是19.00000000000000(雙精度實(shí)型有16位有效數(shù)字)。,(2)將實(shí)型數(shù)據(jù)賦給整型變量時(shí),舍去小數(shù)部分后,再賦給整型變量。這里要注意變量的類型(short、int、long)以及相應(yīng)的數(shù)值范圍,避免賦值后數(shù)據(jù)的溢出。例如:若已經(jīng)定義floatf=65538.0和shorti,如果i=f,那么就會(huì)出現(xiàn)數(shù)據(jù)溢出的錯(cuò)誤,表現(xiàn)為顯示錯(cuò)誤的數(shù)字。main(){floatf=65538.0;shorti;i=f;printf("%d%f\n",i,f);getch();},265538.000000,(3)將float型數(shù)據(jù)賦給double型變量時(shí),數(shù)值不變,有效位數(shù)擴(kuò)展至16位(小數(shù)點(diǎn)后補(bǔ)0)。main(){floatf=65538.0;doublei;i=f;printf("i=%lff=%f\n",i,f);getch();}反之,將double型數(shù)據(jù)賦給float型變量時(shí),則截取double型數(shù)據(jù)的前7位有效數(shù)字,再賦給float型變量。這里,同樣要注意數(shù)據(jù)溢出問題。main(){doublef=22000000000.0;floati;i=f;printf("i=%fy=%lf\n",i,f);getch();},(4)將整型數(shù)據(jù)賦給整型變量時(shí),要格外關(guān)注兩者間長度(char、short、int、long)和符號(hào)類型(singned、unsigned)上的差異,正是由于這些差異使得賦值完成后,變量里的值有所變化。具體如下:①將“長的”(字節(jié)數(shù)多的)整型數(shù)據(jù)賦給“短的”(字節(jié)數(shù)少的)整型變量時(shí),采取截?cái)嗟姆椒窗凑铡岸痰摹弊止?jié)數(shù)截取“長的”數(shù)據(jù)相應(yīng)的低字節(jié)并按位賦給短的整型變量,截?cái)鄷r(shí)不考慮符號(hào)類型(見圖2-3)。to②,例如:inti=345;charc=a;c=i;printf(%d\n,c);運(yùn)行后,輸出:89,,,②將“短的”(字節(jié)數(shù)少的)整型數(shù)據(jù)賦給“長的”(字節(jié)數(shù)多的)整型變量時(shí),存在著“符號(hào)擴(kuò)展”的問題,具體分兩種情況即算術(shù)擴(kuò)展和邏輯擴(kuò)展。,有符“短的”整型數(shù)據(jù)(signed)賦給“長的”整型變量在TurboC中,采用算術(shù)擴(kuò)展方式,在將有符數(shù)據(jù)按位賦給“長的”整型變量的低字節(jié)的同時(shí),將其符號(hào)位的值填充高字節(jié)所有的二進(jìn)制位(其目的是保持?jǐn)?shù)據(jù)值不變)。(見圖2-4、圖2-5),,例如:運(yùn)行后,輸出:97charc=a;注意:在TurboC中,charinti=123;型與signedchar型等i=c;價(jià)printf(%d\n,i);(TurboC采用算術(shù)擴(kuò)展),,又如:運(yùn)行后,輸出:–234inti=–234;注意:在TurboC中,int型與longlt;signedint型等價(jià)。lt=i(TurboC采用算術(shù)擴(kuò)展)printf(%ld\n,lt);,,思考:charc=66;inti;i=c;試寫出i的值,并畫出示意圖。,無符“短的”整型數(shù)據(jù)(unsigned)賦給“長的”整型變量在TurboC中,采用邏輯擴(kuò)展方式:在將無符數(shù)據(jù)按位賦給“長的”整型變量的低字節(jié)的同時(shí)用0填充高字節(jié)所有的所有二進(jìn)制位(見圖2-6)。go,例如:unsignedcharc=0 xea;inti;i=c;printf(%d\n,i);運(yùn)行后,輸出:234注意:由于c是無符字符型變量,0 xea是無符十進(jìn)制整數(shù)234,將c賦給i后,i的高位充0(最高位也為0),故輸出的為正數(shù)234。,,在上述兩種情況的討論中,我們并沒有涉及“長的”整型變量是“有符”還是“無符”,實(shí)際上,采用算術(shù)擴(kuò)展還是邏輯擴(kuò)展取決于短的整型變量是有符還是無符,有符則進(jìn)行算術(shù)擴(kuò)展,無符則進(jìn)行邏輯擴(kuò)展。③將整型數(shù)據(jù)賦給長度相等的整型變量時(shí)。按位賦值即可。,2.3.3自增和自減運(yùn)算,++為單目自增運(yùn)算符,a++含義為a=a+1++只能用于(整型)變量。不能用于常量和表達(dá)式。在使用中要特別注意:,2.3.4逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式,逗號(hào)運(yùn)算符是雙目運(yùn)算符,其運(yùn)算對(duì)象是表達(dá)式。,1.逗號(hào)運(yùn)算符,注意:由逗號(hào)運(yùn)算符組成的式子是一個(gè)表達(dá)式,表達(dá)式的逗號(hào)值為最后分式的值。,2.逗號(hào)運(yùn)算符的優(yōu)先級(jí)任何運(yùn)算符優(yōu)先于逗號(hào)運(yùn)算符,,,解答:20解釋:逗號(hào)表達(dá)式求解過程自左至右,依次計(jì)算各表達(dá)式的值,“表達(dá)式n”的值即為整個(gè)逗號(hào)表達(dá)式的值。先求解a=3*5,得a=15;再求a*4=60;最后求解a+5=20,所以逗號(hào)表達(dá)式的值=20。,例1:逗號(hào)表達(dá)式(a=3*5,a*4),a+5的值,,,main(){inti,t;i=(t=99,printf("t=%d\n",t));printf("i=%d\n",i);getch();},例2:逗號(hào)表達(dá)式t=99,printf("t=%d\n",t)的值,t=99i=5,,,,,- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- c2 第二 基本 數(shù)據(jù)類型 及其 運(yùn)算
鏈接地址:http://kudomayuko.com/p-11494377.html