C語(yǔ)言ch032數(shù)據(jù)類型及運(yùn)算符表達(dá)式課件_第1頁(yè)
C語(yǔ)言ch032數(shù)據(jù)類型及運(yùn)算符表達(dá)式課件_第2頁(yè)
C語(yǔ)言ch032數(shù)據(jù)類型及運(yùn)算符表達(dá)式課件_第3頁(yè)
C語(yǔ)言ch032數(shù)據(jù)類型及運(yùn)算符表達(dá)式課件_第4頁(yè)
C語(yǔ)言ch032數(shù)據(jù)類型及運(yùn)算符表達(dá)式課件_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

上一節(jié)我們學(xué)到了各種類型常量、轉(zhuǎn)義字符、ASCII碼5.05.0f'a'""""保存不變量的兩種方法:#defineconst變量先聲明后使用標(biāo)識(shí)符的命名規(guī)則variableNameCONST_VARIABLE_NAME7/23/20231內(nèi)容3.1順序程序設(shè)計(jì)舉例3.2數(shù)據(jù)的表現(xiàn)形式及其運(yùn)算3.3C語(yǔ)句3.4數(shù)據(jù)的輸入輸出7/23/20232內(nèi)容3.1順序程序設(shè)計(jì)舉例3.2數(shù)據(jù)的表現(xiàn)形式及其運(yùn)算3.2.1常量和變量3.2.2數(shù)據(jù)類型3.2.3整型數(shù)據(jù)3.2.4字符型數(shù)據(jù)3.2.5浮點(diǎn)型數(shù)據(jù)3.2.6怎樣確定常量的類型3.2.7運(yùn)算符和表達(dá)式3.3C語(yǔ)句3.4數(shù)據(jù)的輸入輸出7/23/202333.2.2數(shù)據(jù)類型不同的類型分配不同的長(zhǎng)度和存儲(chǔ)形式。7/23/20234基本數(shù)據(jù)類型(DataType)int整數(shù),在目前絕大多數(shù)機(jī)器上占4個(gè)字節(jié)TC2中是2個(gè)字節(jié)所占字節(jié)數(shù)取決于機(jī)器字長(zhǎng)float單精度浮點(diǎn)數(shù),一般是4個(gè)字節(jié)長(zhǎng)double雙精度浮點(diǎn)數(shù),一般是8個(gè)字節(jié)長(zhǎng)char字符,一般是1個(gè)字節(jié)長(zhǎng)用來表示256個(gè)ASCII字符,或者0~255的整數(shù)7/23/20235sizeof.c#include<stdio.h>#include<stdlib.h>intmain(void){printf("類型\t\t大?。╞ytes)\n");printf("short\t\t%d\n",sizeof(short));printf("int\t\t%d\n",sizeof(int));printf("long\t\t%d\n",sizeof(long));printf("float\t\t%d\n",sizeof(float));printf("double\t\t%d\n",sizeof(double));printf("longdouble\t%d\n",sizeof(longdouble));printf("char\t\t%d\n",sizeof(char));

return0;}7/23/20236數(shù)據(jù)類型修飾符shortshort

int,短整數(shù),一般2個(gè)字節(jié)長(zhǎng)。通常簡(jiǎn)寫為shortlonglong

int,長(zhǎng)整數(shù),一般是4個(gè)字節(jié)長(zhǎng)。通常簡(jiǎn)寫為longlong

double,高精度浮點(diǎn)數(shù),VC6占8個(gè)字節(jié)。signed用來修飾char、int、short和long,說明他們是有符號(hào)的整數(shù)(正整數(shù)、0和負(fù)整數(shù))。一般缺省都是有符號(hào)的,所以這個(gè)修飾符通常省略u(píng)nsigned用來修飾char、int、short和long,說明他們是無符號(hào)的整數(shù)(正整數(shù)和0)7/23/202373.2.3整型數(shù)據(jù)以補(bǔ)碼形式存儲(chǔ)正整數(shù):本身負(fù)整數(shù):對(duì)應(yīng)正整數(shù)按位取反+1Q:下面的語(yǔ)句輸出?unsignedshortprice=-1;printf("%d\n",price);A:65535why?-1的補(bǔ)碼:1111111111111111最左一位不是符號(hào)7/23/20238整型類型的取值范圍---取決于字節(jié)數(shù)limits.h7/23/2023915位215-1=327672個(gè)字節(jié)有符號(hào)整數(shù)的最小最大值最大值0111111111111111=215-1=32767

最小值10000=-327687/23/202310超出取值范圍會(huì)怎樣?VC6中int的范圍是-2147483648~2147483647-231~231-1如果我們給它一個(gè)小于-2147483648或者大于2147483647的數(shù)會(huì)如何呢?小蛇能吞下大象嗎?7/23/202311整數(shù)溢出/*toobig.c-exceedsmaximumintsizeonoursystem*/#include<stdio.h>intmain(void){inti=2147483647;//int最大值unsignedintj=4294967295;//unsignedint最大值printf("%d%d%d\n",i,i+1,i+2);printf("%u%u%u\n",j,j+1,j+2);return0;}輸出:2147483647-2147483648-2147483647

429496729501%u:以無符號(hào)整數(shù)形式輸出7/23/202312溢出(Overflow)造成的危害一臺(tái)安裝了Windows95/98的機(jī)器,如果連續(xù)運(yùn)行49.7天沒有重新啟動(dòng),可能死機(jī)原因:Windows自啟動(dòng)時(shí)刻起,有一個(gè)計(jì)數(shù)器,記錄系統(tǒng)已經(jīng)運(yùn)行了多少毫秒。這個(gè)計(jì)數(shù)器是個(gè)unsigned

long類型的變量unsigned

long的最大值是:4294967295一天有24*60*60*1000=86400000毫秒4294967295/86400000=49.71026961805……當(dāng)49.7天的時(shí)候,此計(jì)數(shù)器會(huì)溢出,引起死機(jī)7/23/2023133.2.4字符型數(shù)據(jù)Q:輸出結(jié)果?charc='?';printf("%d%c\n",c,c);A:63?Q:輸出結(jié)果?charc=255;

printf("%d\n",c);A:-1why默認(rèn)signed如改為unsignedcharc=255;輸出2557/23/2023143.2.5浮點(diǎn)型數(shù)據(jù)double范圍大、精度高、速度稍快VC6TC27/23/202315浮點(diǎn)類型的取值范圍float.h7/23/202316浮點(diǎn)數(shù)的存儲(chǔ)7/23/202317IEEE標(biāo)準(zhǔn)7/23/202318浮點(diǎn)數(shù)的陷阱#include<stdio.h>intmain(){

floatf;

f=123.456f;

if(f==123.456)

printf("fisequalto123.456indeed.");

else

printf("Infact,fisequalto%f\n",f); return0;}float.cQ:運(yùn)行結(jié)果會(huì)是什么?7/23/202319浮點(diǎn)數(shù)的陷阱浮點(diǎn)數(shù)往往只是實(shí)際值的近似float的精度低,較易發(fā)生精度帶來的相等性判斷問題double精度高,這個(gè)問題發(fā)生的概率小一些,但也存在解決辦法:

if(fabs(f–123.456)<1E-5)

……根據(jù)精度要求設(shè)定7/23/2023203.2.6怎樣確定常量的類型編譯器把實(shí)型常量默認(rèn)為doubleconstfloatPI=3.14159f;longdoubled=1.23L;實(shí)型常量后加f或F,表示double實(shí)型常量后加L,表示longdouble7/23/2023213.2.7運(yùn)算符和表達(dá)式7/23/202322算術(shù)運(yùn)算符-負(fù)號(hào):-expr1,returnsthenegationofexpr1.+,-,*,/先算乘除,后算加減,先算左,后算右printf("%d\n",

1+2*3);printf("%d\n",

1

+

2

+

3/4);printf("%d\n",

(1+2+3)/4);VC6中商向零靠攏-5/3=-1%求余運(yùn)算,運(yùn)算對(duì)象必須為整數(shù)7/23/202323自增和自減運(yùn)算符i++,i--,++i,--i++讓參與運(yùn)算的變量加1,--讓參與運(yùn)算的變量減1運(yùn)算符為后綴,先取i的值,然后加/減1,即先運(yùn)算,后加減運(yùn)算符為前綴,先加/減1,然后取i的值,即先加減,后運(yùn)算i的初值為3,分析下面的賦值語(yǔ)句j=++i;j=i++;i=3;....7/23/202324++、--的使用規(guī)則在程序設(shè)計(jì)中,效率和易讀性是一對(duì)常見矛盾。有時(shí)簡(jiǎn)潔的程序可能降低程序的可讀性和可理解性。而可讀性差的程序容易隱藏錯(cuò)誤且難于糾正,不易維護(hù),降低了程序的可靠性。鑒于“軟件危機(jī)”的教訓(xùn),人們?cè)诔绦蛟O(shè)計(jì)時(shí)遵守的基本規(guī)范是:可靠性第一,效率第二。為了保證可靠性,程序必須清晰易讀。因此,在一行語(yǔ)句中,使用自增或者自減運(yùn)算的變量盡量只有1個(gè)不僅可讀性差,而且因?yàn)榫幾g器實(shí)現(xiàn)的方法不同,容易導(dǎo)致不同編譯器運(yùn)行效果不一樣,貽害無窮7/23/202325類型轉(zhuǎn)換在進(jìn)行賦值操作時(shí),會(huì)發(fā)生類型轉(zhuǎn)換將取值范圍小的類型轉(zhuǎn)為取值范圍大的類型是安全的反之是不安全的如果大類型的值在小類型能容納的范圍之內(nèi),則平安無事但是,浮點(diǎn)數(shù)轉(zhuǎn)為整數(shù),會(huì)丟失小數(shù)部分(非四舍五入)反之,轉(zhuǎn)換后的結(jié)果必然是錯(cuò)誤的,具體結(jié)果與機(jī)器和實(shí)現(xiàn)方式有關(guān)。避免如此使用7/23/202326自動(dòng)類型轉(zhuǎn)換兩個(gè)同種數(shù)據(jù)類型的運(yùn)算結(jié)果,還是該類型兩個(gè)不同種數(shù)據(jù)類型的運(yùn)算結(jié)果,是兩種類型中取值范圍更大的那種long

double>(double>float>long>int>short>char)只要兩者中有一個(gè)是unsigned,就都轉(zhuǎn)為unsigned再計(jì)算把數(shù)據(jù)賦值給另外一種類型變量也會(huì)發(fā)生自動(dòng)類型轉(zhuǎn)換從小到大,順利轉(zhuǎn)換從大到小,發(fā)出警告(好的編譯器會(huì)給出)7/23/202327自動(dòng)類型轉(zhuǎn)換舉例inti=3;floatf=2.5f;doubled=7.5;分析10+'a'+i*f-d/3編譯時(shí),從左至右掃描。1.先計(jì)算10+'a'(97),結(jié)果為1072.先計(jì)算優(yōu)先級(jí)高的i*f,將i和f轉(zhuǎn)換為double型,結(jié)果為7.5,double型3.......12+'A'//12+65('A'的ASCII碼)7/23/202328例3.3給定一個(gè)大寫字母,要求用小寫字母輸出。//3_3.c--給定一個(gè)大寫字母,要求用小寫字母輸出#include<stdio.h>intmain(){charcUpper,cLower;cUpper

=

'A';cLower=cUpper+32;printf("%c\n",cLower);printf("%d\n",cLower);return0;}7/23/202329類型強(qiáng)轉(zhuǎn)可以通過“(類型)表達(dá)式”的方式把表達(dá)式的值轉(zhuǎn)為任意類型(double)a(將a轉(zhuǎn)換成double類型)(int)(x

+

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

%

3)(將5%3的值轉(zhuǎn)換成float型)注意強(qiáng)轉(zhuǎn)時(shí),你必須知道你在做什么強(qiáng)轉(zhuǎn)與指針,并稱C語(yǔ)言兩大神器,用好了可以呼風(fēng)喚雨,用壞了就損兵折將7/23/202330這一節(jié)我們學(xué)到了數(shù)據(jù)類型char,short,int,long,float,double,long

doublesigned,unsigned算術(shù)運(yùn)算、自增/自減運(yùn)算類型轉(zhuǎn)換7/23/202331找別扭inta

=

1;

if(a==0)

printf("OK");inta

=

0;

if(a==0)

printf("OK");inta

=

1;

if(a=0)

printf("OK");inta

=

0;

if(a=0)

printf("OK");7/23/202332==和=inta;

a=0;

a==1;inta;

a==0;

a=1;一定要分清==和=下面用法能起點(diǎn)小作用:inta=0;

if(0==a)

printf("OK");inta=0;

if(0=a)

printf("OK");編譯出錯(cuò)7/23/202

溫馨提示

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