譚浩強(qiáng)C語(yǔ)言第3章數(shù)據(jù)類型講課教案_第1頁(yè)
譚浩強(qiáng)C語(yǔ)言第3章數(shù)據(jù)類型講課教案_第2頁(yè)
譚浩強(qiáng)C語(yǔ)言第3章數(shù)據(jù)類型講課教案_第3頁(yè)
譚浩強(qiáng)C語(yǔ)言第3章數(shù)據(jù)類型講課教案_第4頁(yè)
譚浩強(qiáng)C語(yǔ)言第3章數(shù)據(jù)類型講課教案_第5頁(yè)
已閱讀5頁(yè),還剩63頁(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)介

第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式各種進(jìn)制之間的轉(zhuǎn)換(zhuǎnhuàn)二進(jìn)制、八進(jìn)制、十六進(jìn)制轉(zhuǎn)換(zhuǎnhuàn)成十進(jìn)制方法:按權(quán)相加1第一頁(yè),共68頁(yè)。各種進(jìn)制之間的轉(zhuǎn)換(整數(shù))二進(jìn)制、八進(jìn)制、十六進(jìn)制(shíliùjìnzhì)轉(zhuǎn)換成十進(jìn)制方法:按權(quán)相加十進(jìn)制轉(zhuǎn)換成二進(jìn)制、八進(jìn)制、十六進(jìn)制(shíliùjìnzhì)原理:方法(fāngfǎ):連續(xù)除以基,從低到高記錄余數(shù),直至商為0例把十進(jìn)制數(shù)59轉(zhuǎn)換成二進(jìn)制數(shù)5922921427232120(59)10=(111011)2110111111011余余余余余余例把十進(jìn)制數(shù)159轉(zhuǎn)換成八進(jìn)制數(shù)1598198280(159)10=(237)8237余7余3余2例把十進(jìn)制數(shù)459轉(zhuǎn)換成十六進(jìn)制數(shù)4591628161160(459)10=(1CB)161CB余11余12余12第二頁(yè),共68頁(yè)。二進(jìn)制與八進(jìn)制之間的轉(zhuǎn)換二進(jìn)制轉(zhuǎn)換成八進(jìn)制:從右向左,每3位一組(不足(bùzú)3位左補(bǔ)0),轉(zhuǎn)換成八進(jìn)制八進(jìn)制轉(zhuǎn)換成二進(jìn)制:用3位二進(jìn)制數(shù)代替每一位八進(jìn)制數(shù)例(1101001)2=(001,101,001)2=(151)8例(246)8=(010,100,110)2=(10100110)2000~0001~1010~2011~3100~4101~5110~6111~73第三頁(yè),共68頁(yè)。二進(jìn)制與十六進(jìn)制之間的轉(zhuǎn)換(zhuǎnhuàn)二進(jìn)制轉(zhuǎn)換(zhuǎnhuàn)成十六進(jìn)制:從右向左,每4位一組(不足4位左補(bǔ)0),轉(zhuǎn)換(zhuǎnhuàn)成十六進(jìn)制十六進(jìn)制轉(zhuǎn)換(zhuǎnhuàn)成二進(jìn)制:用4位二進(jìn)制數(shù)代替每一位十六進(jìn)制數(shù)例(11010101111101)2=(0011,0101,0111,1101)2=(357D)16例(4B9E)16=(0100,1011,1001,1110)2=(100101110011110)20000~00001~10010~20011~30100~40101~50110~60111~71000~81001~91010~A1011~B1100~C1101~D1110~E1111~F4第四頁(yè),共68頁(yè)。字節(jié)和位內(nèi)存以字節(jié)為單元組成(zǔchénɡ)每個(gè)字節(jié)有一個(gè)地址一個(gè)字節(jié)一般由8個(gè)二進(jìn)制位組成(zǔchénɡ)每個(gè)二進(jìn)位的值是0或101234567012345678910……...5第五頁(yè),共68頁(yè)。數(shù)值的表示方法——原碼、反碼和補(bǔ)碼原碼:最高位為符號(hào)位,其余各位為數(shù)值本身的絕對(duì)值反碼:正數(shù)(zhèngshù):反碼與原碼相同負(fù)數(shù):符號(hào)位為1,其余位對(duì)原碼取反補(bǔ)碼:正數(shù)(zhèngshù):原碼、反碼、補(bǔ)碼相同負(fù)數(shù):最高位為1,其余位為原碼取反,再對(duì)整個(gè)數(shù)加13126912457810119-5=49+7=16=(4)126第六頁(yè),共68頁(yè)。原碼反碼補(bǔ)碼+7000001110000011100000111-7100001111111100011111001+0000000000000000000000000-0100000001111111100000000數(shù)的范圍01111111~11111111(-127~+127)01111111~10000000(-127~+127)01111111~10000000(-128~+127)(用一字節(jié)表示數(shù))負(fù)數(shù)補(bǔ)碼(bǔmǎ)轉(zhuǎn)換成十進(jìn)制數(shù):最高位不動(dòng),其余位取反加1例補(bǔ)碼(bǔmǎ):11111001取反:10000110加1:10000111=-77第七頁(yè),共68頁(yè)。3.1數(shù)據(jù)類型數(shù)據(jù)類型總表C數(shù)據(jù)類型基本類型構(gòu)造類型指針類型空類型void定義類型typedef字符類型char枚舉類型enum整型實(shí)型單精度型float雙精度型double數(shù)組結(jié)構(gòu)體struct共用體union短整型short長(zhǎng)整型long整型int數(shù)據(jù)類型決定:1.數(shù)據(jù)占內(nèi)存字節(jié)數(shù)2.數(shù)據(jù)取值范圍(fànwéi)3.其上可進(jìn)行的操作8第八頁(yè),共68頁(yè)?;?jīběn)數(shù)據(jù)類型類型符號(hào)關(guān)鍵字?jǐn)?shù)的表示范圍所占位數(shù)整型字符(zìfú)型實(shí)型有無(wú)(signed)int16-32768~32767(signed)short16-32768~32767(signed)long32-2147483648~214748364716unsigned

int0~65535320~4294967295unsigned

longunsigned

short160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127無(wú)unsignedchar80~255說(shuō)明:數(shù)據(jù)類型所占字節(jié)數(shù)隨機(jī)器(jīqì)硬件不同而不同,上表以IBMPC機(jī)為例:9第九頁(yè),共68頁(yè)。3.2常量與變量標(biāo)識(shí)符定義:用來(lái)標(biāo)識(shí)變量、常量、函數(shù)等的字符序列組成(zǔchénɡ):只能由字母、數(shù)字、下劃線組成(zǔchénɡ),且第一個(gè)字母必須是字母或下劃線大小寫敏感不能使用關(guān)鍵字長(zhǎng)度:最長(zhǎng)32個(gè)字符命名原則:見名知意不宜混淆如l與I,o與0例:判斷(pànduàn)下列標(biāo)識(shí)符號(hào)合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3chara>b_above$123M.D.John3days#33char$123a>b10第十頁(yè),共68頁(yè)。一般用大寫字母是宏定義預(yù)處理命令(mìnglìng),不是C語(yǔ)句如#definePRICE30常量定義(dìngyì):程序運(yùn)行時(shí)其值不能改變的量(即常數(shù))分類:符號(hào)常量:用標(biāo)識(shí)符代表常量定義(dìngyì)格式:#define符號(hào)常量常量例符號(hào)(fúhào)常量舉例(ch2_1.c)#definePRICE30main(){intnum,total;num=10;total=num*PRICE;printf("total=%d",total);}運(yùn)行結(jié)果:total=300說(shuō)明:

程序中用#define命令行定義PRICE代表常量30,此后凡在本文件中出現(xiàn)的PRICE都代表30,可以和常量一樣進(jìn)行運(yùn)算說(shuō)明:如再用賦值語(yǔ)句給PRICE賦值是錯(cuò)的PRICE=40;/*錯(cuò)誤,不能給符號(hào)常量賦值3.2常量與變量11第十一頁(yè),共68頁(yè)。變量變量代表內(nèi)存中具有特定屬性的一個(gè)存儲(chǔ)單元,它用來(lái)存放數(shù)據(jù),這就是變量的值。變量名實(shí)際上是一個(gè)以一個(gè)名字(míngzi)對(duì)應(yīng)代表一個(gè)地址,在對(duì)程序編譯連接時(shí)由編譯系統(tǒng)給每一個(gè)變量名分配對(duì)應(yīng)的內(nèi)存地址。從變量中取值,實(shí)際上是通過(guò)變量名找到相應(yīng)的內(nèi)存地址,從該存儲(chǔ)單元中讀取數(shù)據(jù)。12第十二頁(yè),共68頁(yè)。編譯程序根據(jù)變量定義為其分配指定字節(jié)的內(nèi)存單元…...地址inta=1,b=-3,c;abc2字節(jié)2字節(jié)2字節(jié)地址地址…...內(nèi)存1-3隨機(jī)數(shù)變量概念:其值可以改變的量變量名與變量值變量定義(dìngyì)的一般格式:數(shù)據(jù)類型變量1[,變量2,…,變量n];變量(biànliàng)初始化:定義時(shí)賦初值例:inta,b,c;floatdata;決定分配字節(jié)數(shù)和數(shù)的表示(biǎoshì)范圍合法標(biāo)識(shí)符例:inta=2,b,c=4;floatdata=3.67;charch=‘A’;intx=1,y=1,z=1;

intx=y=z=1;變量的使用:先定義,后使用例1intstudent;stadent=19;//Undefinedsymbol‘statent’infunctionmain

例2floata,b,c;c=a%b;//Illegaluseoffloatingpointinfunctionmain

變量定義位置:一般放在函數(shù)開頭main(){inta,b=2;floatdata;a=1;data=(a+b)*1.2;printf(“data=%f\n”,data);}變量定義可執(zhí)行語(yǔ)句main(){inta,b=2;a=1;floatdata;data=(a+b)*1.2;printf(“data=%f\n”,data);}13第十三頁(yè),共68頁(yè)。3.2常量與變量標(biāo)識(shí)(biāozhì)符定義:用來(lái)標(biāo)識(shí)(biāozhì)變量、常量、函數(shù)等的字符序列組成:只能由字母、數(shù)字、下劃線組成,且第一個(gè)字母必須是字母或下劃線大小寫敏感不能使用關(guān)鍵字長(zhǎng)度:最長(zhǎng)32個(gè)字符命名原則:見名知意不宜混淆如l與I,o與0例:判斷(pànduàn)下列標(biāo)識(shí)符號(hào)合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3chara>b_above$123M.D.John3days#33char$123a>b建議(jiànyì)變量名的長(zhǎng)度最好不要超過(guò)8個(gè)字符.14第十四頁(yè),共68頁(yè)。整型常量(整常數(shù))三種形式:十進(jìn)制整數(shù):由數(shù)字(shùzì)0~9和正負(fù)號(hào)表示.如123,-456,0八進(jìn)制整數(shù):由數(shù)字(shùzì)0開頭,后跟數(shù)字(shùzì)0~7表示.如0123,011十六進(jìn)制整數(shù):由0x開頭,后跟0~9,a~f,A~F表示.如0x123,0xff例12與12L例30000為int型65536為longint型整型常量的類型根據(jù)(gēnjù)其值所在范圍確定其數(shù)據(jù)類型在整常量后加字母l或L,認(rèn)為它是longint型常量問(wèn)題:0123=()100x123=()100xff=()1083291255問(wèn)題(wèntí):0123=()100x123=()100xff=()103.3整型數(shù)據(jù)15第十五頁(yè),共68頁(yè)。3.3.2整型變量(1)整型數(shù)據(jù)在內(nèi)存中的存放形式數(shù)據(jù)在內(nèi)存中是以二進(jìn)制形式存放的。如:inti;/*定義(dìngyì)為整型變量*/i=10;/*給i賦以整數(shù)10*/注意:十進(jìn)制數(shù)10的二進(jìn)制形式為1010,TurboC2.0和TurboC++3.0為一個(gè)整型變量在內(nèi)存中分配2個(gè)字節(jié)的存儲(chǔ)單元(cúnchǔdānyuán)(不同的編譯系統(tǒng)為整型數(shù)據(jù)分配的字節(jié)數(shù)是不相同的,VC++6.0則分配4個(gè)字節(jié))。數(shù)值是以補(bǔ)碼(complement)表示的。16第十六頁(yè),共68頁(yè)。(2)整型變量(biànliàng)的分類共六種有符號(hào)(fúhào)基本整型有符號(hào)(fúhào)短整型有符號(hào)(fúhào)長(zhǎng)整型無(wú)符號(hào)(fúhào)基本整型無(wú)符號(hào)(fúhào)短整型無(wú)符號(hào)(fúhào)長(zhǎng)整型(signed)int(signed)short(int)(signed)long(int)unsignedintunsignedshort(int)unsignedlong(int)注意:括號(hào)表示(biǎoshì)其中的內(nèi)容是可選的.17第十七頁(yè),共68頁(yè)。整數(shù)(zhěngshù)類型的有關(guān)數(shù)據(jù):類型類型說(shuō)明符長(zhǎng)度數(shù)的范圍(fànwéi)基本型int2字節(jié)-32768~32767短整型short2字節(jié)-215~215-1長(zhǎng)整型long4字節(jié)-231~231-1無(wú)符號(hào)整型unsigned2字節(jié)0~65535無(wú)符號(hào)短整型unsignedshort2字節(jié)0~65535無(wú)符號(hào)長(zhǎng)整型unsignedlong4字節(jié)0~(232-1)18第十八頁(yè),共68頁(yè)。例如:整數(shù)(zhěngshù)13在內(nèi)存中實(shí)際存放的情況:19第十九頁(yè),共68頁(yè)。例3.2整型變量的定義與使用(shǐyòng)

#include<stdio.h>

voidmain()

{inta,b,c,d;/*指定a、b、c、d為整型變量*/

unsignedu;/*指定u為無(wú)符號(hào)整型變量*/

a=12;b=-24;u=10;

c=a+u;d=b+u;

printf(″a+u=%d,b+u=%d\n″,c,d);

}說(shuō)明:可以看到不同種類的整型數(shù)據(jù)(shùjù)可以進(jìn)行算術(shù)運(yùn)算運(yùn)行(yùnxíng)結(jié)果:a+u=22,b+u=-1420第二十頁(yè),共68頁(yè)。例3.3整型數(shù)據(jù)(shùjù)的溢出

#include<stdio.h>

voidmain()

{inta,b;

a=32767;

b=a+1;

printf(“%d,%d\n”,a,b);

}

說(shuō)明:數(shù)值是以補(bǔ)碼(bǔmǎ)表示的。一個(gè)整型變量只能容納-32768~32767范圍內(nèi)的數(shù),無(wú)法表示大于32767或小于-32768的數(shù)。遇此情況就發(fā)生“溢出”。運(yùn)行(yùnxíng)結(jié)果:32767,-3276821第二十一頁(yè),共68頁(yè)。3.3.3整型常量的類型(1)一個(gè)整數(shù),如果其值在-32768~+32767范圍內(nèi),認(rèn)為它是int型,它可以賦值給int型和longint型變量。(2)一個(gè)整數(shù),如果其值超過(guò)了上述范圍,而在-2147483637~+2147483647范圍內(nèi),則認(rèn)為它是為長(zhǎng)整型。可以將它賦值給一個(gè)longint型變量。(3)如果所用的C版本(如TurboC)分配給shortint與int型數(shù)據(jù)在內(nèi)存中占據(jù)的長(zhǎng)度相同,則它的表數(shù)范圍與int型相同。因此(yīncǐ)一個(gè)int型的常量同時(shí)也是一個(gè)shortint型常量,可以賦給int型或shortint型變量。

22第二十二頁(yè),共68頁(yè)。(4)一個(gè)整常量后面加一個(gè)字母u或U,認(rèn)為是unsignedint型,如12345u,在內(nèi)存中按unsignedint規(guī)定的方式存放(存儲(chǔ)單元中最高位不作為符號(hào)位,而用來(lái)存儲(chǔ)數(shù)據(jù))。如果寫成-12345u,則先將-12345轉(zhuǎn)換成其補(bǔ)碼(bǔmǎ)53191,然后按無(wú)符號(hào)數(shù)存儲(chǔ)。(5)在一個(gè)整常量后面加一個(gè)字母l或L,則認(rèn)為是longint型常量。例如:123l.432L.0L用于函數(shù)調(diào)用中。如果函數(shù)的形參為longint型,則要求實(shí)參也為longint型。23第二十三頁(yè),共68頁(yè)。實(shí)型常量(實(shí)數(shù)或浮點(diǎn)數(shù))表示形式:十進(jìn)制數(shù)形式:(必須有小數(shù)點(diǎn))如0.123,.123,123.0,0.0,123.指數(shù)(zhǐshù)形式:(e或E之前必須有數(shù)字;指數(shù)(zhǐshù)必須為整數(shù))如12.3e3,123E2,1.23e4,e-5,1.2E-3.5實(shí)型常量的類型默認(rèn)(mòrèn)double型在實(shí)型常量后加字母f或F,認(rèn)為它是float型C編譯系統(tǒng)將浮點(diǎn)型常量作為雙精度來(lái)處理。例如:f=2.45678*4523.65系統(tǒng)先把2.45678和4523.65作為雙精度數(shù),然后進(jìn)行相乘的運(yùn)算,得到的乘也是一個(gè)雙精度數(shù)。最后取其前7位賦給浮點(diǎn)型變量f。如是在數(shù)的后面加字母(zìmǔ)f或F(如1.65f,654.87F),這樣編譯系統(tǒng)就會(huì)把它們按單精度(32位)處理.24第二十四頁(yè),共68頁(yè)。規(guī)范化的指數(shù)形式:在字母e(或E)之前的小數(shù)部分中,小數(shù)點(diǎn)左邊(zuǒbian)應(yīng)有一位(且只能有一位)非零的數(shù)字.例如:123.456可以表示為:123.456e0,12.3456e1,1.23456e2,0.123456e3,0.0123456e4,0.00123456e其中的1.23456e3稱為“規(guī)范化的指數(shù)形式”。25第二十五頁(yè),共68頁(yè)。3.4.2浮點(diǎn)型變量(1)浮點(diǎn)型數(shù)據(jù)在內(nèi)存中的存放形式一個(gè)浮點(diǎn)型數(shù)據(jù)一般在內(nèi)存中占4個(gè)字節(jié)(32位)。與整型數(shù)據(jù)的存儲(chǔ)方式不同,浮點(diǎn)型數(shù)據(jù)是按照指數(shù)形式存儲(chǔ)的。系統(tǒng)把一個(gè)浮點(diǎn)型數(shù)據(jù)分成(fēnchénɡ)小數(shù)部分和指數(shù)部分,分別存放。指數(shù)部分采用規(guī)范化的指數(shù)形式。26第二十六頁(yè),共68頁(yè)。類型位數(shù)數(shù)的范圍(fànwéi)有效數(shù)字float3210-37~10386~7位double型6410-307~1030815~16位longdouble12810-4931~10493218~19位3.4浮點(diǎn)型數(shù)據(jù)(shùjù)(2)浮點(diǎn)型變量的分類(fēnlèi)浮點(diǎn)型變量分為單精度(float型)、雙精度(double型)和長(zhǎng)雙精度型(longdouble)三類形式。例floata;a=111111.111;/*a=111111.1*/doubleb;b=111111.111;/*b=111111.111*/27第二十七頁(yè),共68頁(yè)。例3.4浮點(diǎn)型數(shù)據(jù)(shùjù)的舍入誤差

#include<stdio.h>

voidmain()

{floata,b;

a=123456.789e5;

b=a+20;

printf(“%f\n”,b);

}

說(shuō)明:一個(gè)浮點(diǎn)型變量只能(zhīnénɡ)保證的有效數(shù)字是7位有效數(shù)字,后面的數(shù)字是無(wú)意義的,并不準(zhǔn)確地表示該數(shù)。應(yīng)當(dāng)避免將一個(gè)很大的數(shù)和一個(gè)很小的數(shù)直接相加或相減,否則就會(huì)“丟失”小的數(shù)運(yùn)行(yùnxíng)結(jié)果:123456.789e528第二十八頁(yè),共68頁(yè)。字符常量定義:用單引號(hào)括起來(lái)(qǐlái)的單個(gè)普通字符或轉(zhuǎn)義字符.字符(zìfú)常量的值:該字符(zìfú)的ASCII碼值<轉(zhuǎn)義字符及其含義:轉(zhuǎn)義字符含義\n\v\r\a\‘\ddd\t\b\f\\\“\xhh轉(zhuǎn)義字符含義換行垂直制表回車響鈴單引號(hào)3位8進(jìn)制數(shù)代表的字符水平制表退格換頁(yè)反斜線雙引號(hào)2位16進(jìn)制數(shù)代表的字符如‘\101’-----------‘A’‘\012’-----------’\n’‘\376’-----------’’‘\x61’-----------’a’‘\60’-----------’0’‘\483’----------()例:‘A’-------’\101’-------’\x41’--------65如‘A’——65,‘a(chǎn)’——97,‘0’——48,‘\n’——10如‘a(chǎn)’‘A’‘?’‘\n’‘\101’轉(zhuǎn)義字符:反斜線后面跟一個(gè)字符或一個(gè)代碼(dàimǎ)值表示例轉(zhuǎn)義字符舉例(ch2_001.c,ch2_004.c)

main(){printf("\101\x42C\n");printf("Isay:\"Howareyou?\"\n");printf("\\CProgram\\\n");printf("Turbo\'C\'");}運(yùn)行結(jié)果:(屏幕顯示)ABCIsay:”Howareyou?”\CProgram\Turbo‘C’例main(){printf(“Y\b=\n”);}運(yùn)行結(jié)果:屏幕顯示:=打印機(jī)輸出:¥29第二十九頁(yè),共68頁(yè)。3.5字符(zìfú)型數(shù)據(jù)3.5.2字符變量字符型變量用來(lái)存放字符常量,注意只能放一個(gè)字符。字符變量的定義形式如下:charc1,c2;可以用下面語(yǔ)句對(duì)c1,c2賦值:c1=‘a(chǎn)’;c2=‘b’;一個(gè)字符變量在內(nèi)存(nèicún)中占一個(gè)字節(jié)。30第三十頁(yè),共68頁(yè)。3.5字符(zìfú)型數(shù)據(jù)3.5.3字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式及其使用方法一個(gè)(yīɡè)字符常量存放到一個(gè)(yīɡè)字符變量中,實(shí)際上并不是把該字符的字型放到內(nèi)存中去,而是將該字符的相應(yīng)的ASCII代碼放到存儲(chǔ)單元中。這樣使字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用。注意(zhùyì):一個(gè)字符數(shù)據(jù)既可以以字符形式輸出,也可以以整數(shù)形式輸出。31第三十一頁(yè),共68頁(yè)。例3.6向字符(zìfú)變量賦以整數(shù)。

#include<stdio.h>

voidmain()

{charc1,c2;

c1=97;

c2=98;

printf(“%c%c\n”,c1,c2);

printf(“%d%d\n”,c1,c2);

}說(shuō)明:在第3和第4行中,將整數(shù)97和98分別(fēnbié)賦給c1和c2,它的作用相當(dāng)于以下兩個(gè)賦值語(yǔ)句: c1=′a′;c2=′b′;因?yàn)椤痑’和’b’的ASCII碼為97和98運(yùn)行(yùnxíng)結(jié)果:ab979832第三十二頁(yè),共68頁(yè)。例3.7大小寫字母的轉(zhuǎn)換(zhuǎnhuàn)

#include<stdio.h>

voidmain()

{charc1,c2;

c1=’a’;

c2=’b’;

c1=c1-32;

c2=c2-32;

printf(“%c%c″,c1,c2);

}說(shuō)明:程序的作用是將兩個(gè)小寫字母a和b轉(zhuǎn)換成大寫字母A和B。從ASCII代碼表中可以看到每一個(gè)小寫字母比它相應(yīng)的大寫字母的ASCII碼大32。C語(yǔ)言允許字符數(shù)據(jù)與整數(shù)直接進(jìn)行算術(shù)(suànshù)運(yùn)算。運(yùn)行(yùnxíng)結(jié)果:AB

33第三十三頁(yè),共68頁(yè)。說(shuō)明:有些系統(tǒng)(如TurboC)將字符變量定義為signedchar型。其存儲(chǔ)單元中的最高位作為符號(hào)位,它的取值范圍是-128~127。如果在字符變量中存放一個(gè)ASCII碼為0~127間的字符,由于字節(jié)中最高位為0,因此(yīncǐ)用%d輸出字符變量時(shí),輸出的是一個(gè)正整數(shù)。如果在字符變量中存放一個(gè)ASCII碼為128~255間的字符,由于在字節(jié)中最高位為1,用%d格式符輸出時(shí),就會(huì)得到一個(gè)負(fù)整數(shù)。

34第三十四頁(yè),共68頁(yè)。字符(zìfú)常量與字符(zìfú)串常量不同字符串常量定義:用雙引號(hào)(“”)括起來(lái)的字符序列存儲(chǔ)(cúnchǔ):每個(gè)字符串尾自動(dòng)加一個(gè)‘\0’作為字符串結(jié)束標(biāo)志hello\0例字符串“hello”在內(nèi)存中aa\0例‘a(chǎn)’“a”例空串“”\0例:charch;ch=“A”;例:charch;ch=‘A’;結(jié)論:不能把一個(gè)字符(zìfú)串常量賦給一個(gè)字符(zìfú)變量。35第三十五頁(yè),共68頁(yè)。3.6變量(biànliàng)賦初值(1)C語(yǔ)言允許在定義變量(biànliàng)的同時(shí)使變量(biànliàng)初始化如:inta=3;//指定a為整型變量(biànliàng),初值為3

floatf=3.56;//指定f為浮點(diǎn)型變量(biànliàng),初值為3.56

charc=‘a(chǎn)’;//指定c為字符變量(biànliàng),初值為‘a(chǎn)’36第三十六頁(yè),共68頁(yè)。3.6變量(biànliàng)賦初值(2)可以使被定義的變量的一部分賦初值。如:inta,b,c=5;表示指定a、b、c為整型變量,但只對(duì)c初始化,c的初值為5(3)如果(rúguǒ)對(duì)幾個(gè)變量賦以同一個(gè)初值,應(yīng)寫成:inta=3,b=3,c=3;表示a、b、c的初值都是3。不能寫成∶inta=b=c=3;注意:初始化不是在編譯階段(jiēduàn)完成的而是在程序運(yùn)行時(shí)執(zhí)行本函數(shù)時(shí)賦初值的,相當(dāng)于有一個(gè)賦值語(yǔ)句。37第三十七頁(yè),共68頁(yè)。2.3不同類型數(shù)據(jù)間的轉(zhuǎn)換隱式轉(zhuǎn)換什么情況下發(fā)生運(yùn)算轉(zhuǎn)換------不同類型數(shù)據(jù)混合運(yùn)算時(shí)賦值轉(zhuǎn)換------把一個(gè)值賦給與其類型不同的變量(biànliàng)時(shí)輸出轉(zhuǎn)換------輸出時(shí)轉(zhuǎn)換成指定的輸出格式函數(shù)調(diào)用轉(zhuǎn)換------實(shí)參與形參類型不一致時(shí)轉(zhuǎn)換運(yùn)算轉(zhuǎn)換規(guī)則:不同類型數(shù)據(jù)運(yùn)算時(shí)先自動(dòng)轉(zhuǎn)換成同一類型<>38第三十八頁(yè),共68頁(yè)。doublefloatlongunsignedintchar,short低高說(shuō)明:必定的轉(zhuǎn)換運(yùn)算對(duì)象類型不同時(shí)轉(zhuǎn)換例charch;inti;floatf;doubled;ch/i+f*d-(f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble10+‘a(chǎn)’+i*f-d/l例inti;floatf;doubled;longl;<>39第三十九頁(yè),共68頁(yè)。顯式轉(zhuǎn)換(強(qiáng)制轉(zhuǎn)換)一般形式(xíngshì):(類型名)(表達(dá)式)例(int)(x+y)(int)x+y(double)(3/2)(int)3.6說(shuō)明:強(qiáng)制轉(zhuǎn)換得到所需類型的中間變量,原變量類型不變例main(){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}結(jié)果(jiēguǒ):x=3.600000,i=3精度損失(sǔnshī)問(wèn)題較高類型向較低類型轉(zhuǎn)換時(shí)可能發(fā)生<>40第四十頁(yè),共68頁(yè)。2.4

運(yùn)算符和表達(dá)式C運(yùn)算符算術(shù)運(yùn)算符:(+-*/%++--)關(guān)系運(yùn)算符:(<<===>>=!=)邏輯運(yùn)算符:((!&&||)位運(yùn)算符:(<<>>~|^&)賦值運(yùn)算符:(=及其擴(kuò)展)條件運(yùn)算符:(?:)逗號(hào)運(yùn)算符:(,)指針運(yùn)算符:(*&)求字節(jié)數(shù):(sizeof)強(qiáng)制類型轉(zhuǎn)換:(類型)分量運(yùn)算符:(.->)下標(biāo)運(yùn)算符:([])其它:(()-)<>41第四十一頁(yè),共68頁(yè)。算術(shù)運(yùn)算符和表達(dá)式基本算術(shù)運(yùn)算符:+-*/%結(jié)合方向:從左向右優(yōu)先級(jí):----->*/%----->+-(2)(3)(4) 說(shuō)明:“-”可為單目運(yùn)算符時(shí),右結(jié)合性兩整數(shù)(zhěngshù)相除,結(jié)果為整數(shù)(zhěngshù)%要求兩側(cè)均為整型數(shù)據(jù)例5/2=-5/2.0=例5%2=-5%2=1%10=

5%1=5.5%2<>例5/2=2

-5/2.0=-2.5例5%2=1

-5%2=-11%10=

1

5%1=

05.5%2()42第四十二頁(yè),共68頁(yè)。自增、自減運(yùn)算符++--作用:使變量值加1或減1種類(zhǒnglèi):前置++i,--i(先執(zhí)行i+1或i-1,再使用i值)后置i++,i--(先使用i值,再執(zhí)行i+1或i-1)例j=3;k=++j;j=3;k=j++;j=3;printf(“%d”,++j);j=3;printf(“%d”,j++);a=3;b=5;c=(++a)*b;a=3;b=5;c=(a++)*b;<>//k=4,j=4//k=3,j=4//4//3//c=20,a=4//c=15,a=443第四十三頁(yè),共68頁(yè)。自增、自減運(yùn)算符++--作用:使變量值加1或減1種類:前置++i,--i(先執(zhí)行i+1或i-1,再使用(shǐyòng)i值)后置i++,i--(先使用(shǐyòng)i值,再執(zhí)行i+1或i-1)說(shuō)明:++--不能用于常量和表達(dá)式,如5++,(a+b)++++--結(jié)合(jiéhé)方向:自右向左優(yōu)先級(jí):-++-------->*/%----->+-(2)(3)(4)例-i++-(i++)i=3;printf(“%d”,-i++);//-3

例j+++k;(j++)+k;例-i++i=3;printf(“%d”,-i++);44第四十四頁(yè),共68頁(yè)。(5)有關(guān)表達(dá)式使用中的問(wèn)題說(shuō)明①ANSIC并沒(méi)有具體(jùtǐ)規(guī)定表達(dá)式中的子表達(dá)式的求值順序,允許各編譯系統(tǒng)自己安排。例如:對(duì)表達(dá)式a=f1()+f2()并不是所有的編譯系統(tǒng)都先調(diào)用f1(),然后調(diào)用f2()。在有的情況下結(jié)果可能不同。有時(shí)會(huì)出現(xiàn)一些令人容易搞混的問(wèn)題,因此務(wù)必要小心謹(jǐn)慎。

45第四十五頁(yè),共68頁(yè)。②C語(yǔ)言中有的運(yùn)算符為一個(gè)字符,有的運(yùn)算符由兩個(gè)字符組成,為避免(bìmiǎn)誤解,最好采取大家都能理解的寫法。例如:不要寫成i+++j的形式,而應(yīng)寫成(i++)+j的形式.46第四十六頁(yè),共68頁(yè)。③在調(diào)用函數(shù)時(shí),實(shí)參數(shù)的求值順序,C標(biāo)準(zhǔn)并無(wú)統(tǒng)一規(guī)定。例如(lìrú):i的初值為3,如果有下面的函數(shù)調(diào)用:printf(″%d,%d″,i,i++)在有的系統(tǒng)中,從左至右求值,輸出“3,3”。在多數(shù)系統(tǒng)中對(duì)函數(shù)參數(shù)的求值順序是自右而左,printf函數(shù)輸出的是“4,3”。以上這種寫法不宜提倡,最好改寫成j=i++;printf("%d,%d",j,i)47第四十七頁(yè),共68頁(yè)。賦值運(yùn)算符和表達(dá)式簡(jiǎn)單賦值運(yùn)算符符號(hào):=格式:變量標(biāo)識(shí)符=表達(dá)式作用:將一個(gè)(yīɡè)數(shù)據(jù)(常量或表達(dá)式)賦給一個(gè)(yīɡè)變量復(fù)合(fùhé)賦值運(yùn)算符種類:+=-=*=/=%=《=》=&=^=|=含義:exp1op=exp2exp1=exp1opexp2a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3<>例a=3;d=func();c=d+2;48第四十八頁(yè),共68頁(yè)。說(shuō)明:結(jié)合方向:自右向左優(yōu)先級(jí):14左側(cè)必須(bìxū)是變量,不能是常量或表達(dá)式賦值表達(dá)式的值與變量值相等(xiāngděng),且可嵌套賦值轉(zhuǎn)換規(guī)則:使賦值號(hào)右邊(yòubian)表達(dá)式值自動(dòng)轉(zhuǎn)換成其左邊變量的類型例3=x-2*y;a+b=3;例

floatf;inti;i=10;f=i;則

f=10.0例inti;i=2.56;//結(jié)果i=2;例:a=b=c=5a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)<>//表達(dá)式值為5,a,b,c值為5//b=5;a=5//表達(dá)式值11,c=6,a=11//表達(dá)式值10,a=10,b=4,c=6//表達(dá)式值5,a=5,b=10,c=249第四十九頁(yè),共68頁(yè)。說(shuō)明:結(jié)合方向:自右向左優(yōu)先級(jí):12左側(cè)必須是變量(biànliàng),不能是常量或表達(dá)式賦值表達(dá)式的值與變量值相等(xiāngděng),且可嵌套賦值轉(zhuǎn)換規(guī)則:使賦值號(hào)右邊(yòubian)表達(dá)式值自動(dòng)轉(zhuǎn)換成其左邊變量的類型例:a=12;a+=a-=a*a例:inta=2;a%=4-1;a+=a*=a-=a*=3;<>//a=-264等價(jià)于a=a+(a=a-(a*a))//a=0等價(jià)于a=a+(a=a*(a=a-(a=a*3)))50第五十頁(yè),共68頁(yè)。1.將整型數(shù)據(jù)賦給單、雙精度變量時(shí),數(shù)值不變但以浮點(diǎn)數(shù)形式存儲(chǔ)到變量中如:將23賦給float變量f,即執(zhí)行f=23,先將23轉(zhuǎn)換成23.00000,再存儲(chǔ)在f中。將23賦給double型變量d,即執(zhí)行d=23,系統(tǒng)(xìtǒng)將23補(bǔ)足有效位數(shù)字為23.00000000000000,然后以雙精度浮點(diǎn)數(shù)形式存儲(chǔ)到變量d中。51第五十一頁(yè),共68頁(yè)。2.將一個(gè)double型數(shù)據(jù)賦給float變量時(shí),截取其前面7位有效數(shù)字,存放到float變量的存儲(chǔ)單元(4個(gè)字節(jié)(zìjié))中。但應(yīng)注意數(shù)值范圍不能溢出。如:floatf;doubled=123.456789e100;f=d;就出現(xiàn)溢出的錯(cuò)誤。如果將一個(gè)float型數(shù)據(jù)賦給double變量時(shí),數(shù)值不變,有效位數(shù)擴(kuò)展到16位,在內(nèi)存中以8個(gè)字節(jié)(zìjié)存儲(chǔ).52第五十二頁(yè),共68頁(yè)。3.字符型數(shù)據(jù)賦給整型變量時(shí),由于(yóuyú)字符只占1個(gè)字節(jié),而整型變量為2個(gè)字節(jié),因此將字符數(shù)據(jù)(8?jìng)€(gè)二進(jìn)位)放到整型變量存儲(chǔ)單元的低8位中.53第五十三頁(yè),共68頁(yè)。第一種情況:低位對(duì)應(yīng)(duìyìng)、高位補(bǔ)零若所用系統(tǒng)將字符處理為無(wú)符號(hào)字符類型,或程序已將字符變量定義為unsignedchar型,則將字符的8位放到整型變量低8位,高8位補(bǔ)零。例如:將字符‘\376’賦給int型變量i第二種情況:符號(hào)擴(kuò)展若所用系統(tǒng)(如TurboC++)將字符處理為帶符號(hào)(signedchar)時(shí),若字符最高位為0,則整型變量高8位補(bǔ)0;若字符最高位為1,則高8位全補(bǔ)1。這稱為“符號(hào)擴(kuò)展”,這樣做的目的是使數(shù)值保持不變,如變量c(字符‘\376’)以整數(shù)形式(xíngshì)輸出為-2,i的值也是-2。54第五十四頁(yè),共68頁(yè)。4.將一個(gè)int、short、long型數(shù)據(jù)賦給一個(gè)char型變量時(shí),只將其低8位原封不動(dòng)地送到char型變量(biànliàng)(即截?cái)啵?。例如:inti=289;charc=′a′;c=i;c的值為33,如果用“%c”輸出c,將得到(dédào)字符“!”!的ASCII碼為33。賦值情況(qíngkuàng):55第五十五頁(yè),共68頁(yè)。5.將帶符號(hào)的整型數(shù)據(jù)(int型)賦給long型變量(biànliàng)時(shí),要進(jìn)行符號(hào)擴(kuò)展,將整型數(shù)的16位送到long型低16位中:如果int型數(shù)據(jù)為正值(符號(hào)位為0),則long型變量(biànliàng)的高16位補(bǔ)0;如果int型變量(biànliàng)為負(fù)值(符號(hào)位為1),則long型變量(biànliàng)的高16位補(bǔ)1,以保持?jǐn)?shù)值不改變。反之,若將一個(gè)long型數(shù)據(jù)賦給一個(gè)int型變量(biànliàng),只將long型數(shù)據(jù)中低16位原封不動(dòng)地送到整型變量(biànliàng)(即截?cái)啵?6第五十六頁(yè),共68頁(yè)。例如(lìrú):inta;longb=8;a=b賦值情況如下:如果(rúguǒ)b=65536(八進(jìn)制數(shù)0200000),則賦值后a值為0。57第五十七頁(yè),共68頁(yè)。6.將unsignedint型數(shù)據(jù)賦給longint型變量時(shí),不存在符號(hào)擴(kuò)展問(wèn)題,只需將高位補(bǔ)0即可。將一個(gè)unsigned類型數(shù)據(jù)賦給一個(gè)占字節(jié)數(shù)相同的非unsigned型整型變量(例如:unsignedint->int,unsignedlong->long,unsignedshort->short),將unsigned型變量的內(nèi)容原樣(yuányànɡ)送到非unsigned型變量中,但如果數(shù)據(jù)范圍超過(guò)相應(yīng)整型的范圍,則會(huì)出現(xiàn)數(shù)據(jù)錯(cuò)誤。58第五十八頁(yè),共68頁(yè)。逗號(hào)運(yùn)算符和表達(dá)式形式:表達(dá)式1,表達(dá)式2,……表達(dá)式n結(jié)合性:從左向右優(yōu)先級(jí):15逗號(hào)表達(dá)式的值:等于表達(dá)式n的值用途:常用(chánɡyònɡ)于循環(huán)for語(yǔ)句中例a=3*5,a*4a=3*5,a*4,a+5例x=(a=3,6*3)x=a=3,6*a例a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);<>//a=15,表達(dá)式值60//a=15,表達(dá)式值20//賦值表達(dá)式,表達(dá)式值18,x=18//逗號(hào)(dòuhào)表達(dá)式,表達(dá)式值18,x=3//1,2,3//3,2,359第五十九頁(yè),共68頁(yè)。逗號(hào)運(yùn)算符和表達(dá)式形式:表達(dá)式1,表達(dá)式2,……表達(dá)式n結(jié)合性:從左向右優(yōu)先級(jí):15逗號(hào)表達(dá)式的值:等于表達(dá)式n的值用途(yòngtú):常用于循環(huán)for語(yǔ)句中例:/*ch2_6.c*/#include<stdio.h>main(){intx,y=7;floatz=4;x=(y=y+6,y/z);printf("x=%d\n",x);}運(yùn)行(yùnxíng)結(jié)果:x=3<>60第六十頁(yè),共68頁(yè)。關(guān)系運(yùn)算符和表達(dá)式關(guān)系運(yùn)算符種類(zhǒnglèi):<<===>=>!=結(jié)合方向:自左向右優(yōu)先級(jí)別:<<=>>===!=優(yōu)先級(jí)6(高)優(yōu)先級(jí)7(低)例c>a+b//c>(a+b)a>b!=c//(a>b)!=ca==b<c//a==(b<c)a=b>c//a=(b>c)關(guān)系(guānxì)表達(dá)式的值:是邏輯值“真”或“假”,用1和0表示例inta=3,b=2,c=1,d,f;a>b(a>b)==cb+c<ad=a>bf=a>b>c<>//表達(dá)式值1//表達(dá)式值1//表達(dá)式值0//d=1//f=061第六十一頁(yè),共68頁(yè)。關(guān)系(guānxì)運(yùn)算注意:<>例若a=0;b=0.5;x=0.3;則a<=x<=b的值為0例5>2>7>8在C中是允許(yǔnxǔ)的,值為0例inti=1,j=7,a;a=i+(j%4!=0);則a=2例‘a(chǎn)’>0結(jié)果(jiēguǒ)為‘A’>100結(jié)果(jiēguǒ)為1062第六十二頁(yè),共68頁(yè)。關(guān)系(guānxì)運(yùn)算注意:例注意(zhùyì)區(qū)分“=”與“==”inta=0,b=1;if(a=b)printf(“aequaltob”);else

溫馨提示

  • 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)論