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

下載本文檔

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

文檔簡介

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

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

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

最小值10000=-327687/23/202310超出取值范圍會怎樣?VC6中int的范圍是-2147483648~2147483647-231~231-1如果我們給它一個小于-2147483648或者大于2147483647的數(shù)會如何呢?小蛇能吞下大象嗎?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:以無符號整數(shù)形式輸出7/23/202312溢出(Overflow)造成的危害一臺安裝了Windows95/98的機器,如果連續(xù)運行49.7天沒有重新啟動,可能死機原因:Windows自啟動時刻起,有一個計數(shù)器,記錄系統(tǒng)已經(jīng)運行了多少毫秒。這個計數(shù)器是個unsigned

long類型的變量unsigned

long的最大值是:4294967295一天有24*60*60*1000=86400000毫秒4294967295/86400000=49.71026961805……當(dāng)49.7天的時候,此計數(shù)器會溢出,引起死機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默認signed如改為unsignedcharc=255;輸出2557/23/2023143.2.5浮點型數(shù)據(jù)double范圍大、精度高、速度稍快VC6TC27/23/202315浮點類型的取值范圍float.h7/23/202316浮點數(shù)的存儲7/23/202317IEEE標準7/23/202318浮點數(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:運行結(jié)果會是什么?7/23/202319浮點數(shù)的陷阱浮點數(shù)往往只是實際值的近似float的精度低,較易發(fā)生精度帶來的相等性判斷問題double精度高,這個問題發(fā)生的概率小一些,但也存在解決辦法:

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

……根據(jù)精度要求設(shè)定7/23/2023203.2.6怎樣確定常量的類型編譯器把實型常量默認為doubleconstfloatPI=3.14159f;longdoubled=1.23L;實型常量后加f或F,表示double實型常量后加L,表示longdouble7/23/2023213.2.7運算符和表達式7/23/202322算術(shù)運算符-負號:-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%求余運算,運算對象必須為整數(shù)7/23/202323自增和自減運算符i++,i--,++i,--i++讓參與運算的變量加1,--讓參與運算的變量減1運算符為后綴,先取i的值,然后加/減1,即先運算,后加減運算符為前綴,先加/減1,然后取i的值,即先加減,后運算i的初值為3,分析下面的賦值語句j=++i;j=i++;i=3;....7/23/202324++、--的使用規(guī)則在程序設(shè)計中,效率和易讀性是一對常見矛盾。有時簡潔的程序可能降低程序的可讀性和可理解性。而可讀性差的程序容易隱藏錯誤且難于糾正,不易維護,降低了程序的可靠性。鑒于“軟件危機”的教訓(xùn),人們在程序設(shè)計時遵守的基本規(guī)范是:可靠性第一,效率第二。為了保證可靠性,程序必須清晰易讀。因此,在一行語句中,使用自增或者自減運算的變量盡量只有1個不僅可讀性差,而且因為編譯器實現(xiàn)的方法不同,容易導(dǎo)致不同編譯器運行效果不一樣,貽害無窮7/23/202325類型轉(zhuǎn)換在進行賦值操作時,會發(fā)生類型轉(zhuǎn)換將取值范圍小的類型轉(zhuǎn)為取值范圍大的類型是安全的反之是不安全的如果大類型的值在小類型能容納的范圍之內(nèi),則平安無事但是,浮點數(shù)轉(zhuǎn)為整數(shù),會丟失小數(shù)部分(非四舍五入)反之,轉(zhuǎn)換后的結(jié)果必然是錯誤的,具體結(jié)果與機器和實現(xiàn)方式有關(guān)。避免如此使用7/23/202326自動類型轉(zhuǎn)換兩個同種數(shù)據(jù)類型的運算結(jié)果,還是該類型兩個不同種數(shù)據(jù)類型的運算結(jié)果,是兩種類型中取值范圍更大的那種long

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

=

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

+

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

%

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

doublesigned,unsigned算術(shù)運算、自增/自減運算類型轉(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;一定要分清==和=下面用法能起點小作用:inta=0;

if(0==a)

printf("OK");inta=0;

if(0=a)

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論