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