《c語言程序設(shè)計(jì)》第2章.ppt
《《c語言程序設(shè)計(jì)》第2章.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《《c語言程序設(shè)計(jì)》第2章.ppt(61頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
第二章基本數(shù)據(jù)類型、運(yùn)算符和表達(dá)式,C語言程序設(shè)計(jì),2,本章主要內(nèi)容,本章介紹C語言的基礎(chǔ),包括:數(shù)據(jù)類型運(yùn)算符和表達(dá)式均是程序設(shè)計(jì)的基本知識(shí)為什么討論這些知識(shí)?,,通常程序要對(duì)數(shù)據(jù)進(jìn)行操作處理:處理的對(duì)象是數(shù)據(jù)通過運(yùn)算符和表達(dá)式進(jìn)行操作,3,例如:,【例2.1】計(jì)算圓的面積,半徑為5cm。程序如下:,main(){floatr,area;r=5;area=3.14*r*r;printf("%f\n",area);},運(yùn)算結(jié)果是輸出圓的面積:78.500000,程序中用到的數(shù)據(jù):r、area、5、3.14對(duì)數(shù)據(jù)進(jìn)行的運(yùn)算:*、=,例jc2_1,4,分析:,計(jì)算機(jī)操作處理時(shí),要完成以下工作:在內(nèi)存中給半徑r和運(yùn)算結(jié)果area開辟存儲(chǔ)空間,存放它們的值。應(yīng)該留多大的地方來存放它們的值?數(shù)據(jù)5和3.14與r、area不同,它們是在編寫程序時(shí)就給出確定的值,在運(yùn)算過程中不會(huì)改變。這樣的數(shù)計(jì)算機(jī)怎么處理?對(duì)整數(shù)5和小數(shù)3.14,計(jì)算機(jī)存放時(shí)是否有區(qū)別?,涉及數(shù)據(jù)類型的基本知識(shí),5,C語言的數(shù)據(jù)類型,C數(shù)據(jù)類型,本章討論基本類型數(shù)據(jù),6,2.1.1整型數(shù)據(jù),1.整型數(shù)據(jù)的類型基本整型數(shù)據(jù)int,分配2Byte短整型數(shù)據(jù)shortint,分配2Byte長整型數(shù)據(jù)longint,分配4Byte整型數(shù)據(jù)均以二進(jìn)制補(bǔ)碼形式存儲(chǔ),問題:為什么要采用補(bǔ)碼?如何表示?,7,計(jì)算機(jī)中正、負(fù)數(shù)的表示,例如:109=(1101101)2要區(qū)別:+109和-109方法是:將符號(hào)也數(shù)碼化即:正的符號(hào)+用0表示負(fù)的符號(hào)-用1表示,∴計(jì)算機(jī)中的數(shù)表示方法是:符號(hào)位+二進(jìn)制數(shù)值(以8bit為例)+109→+1101101→01101101-109→-1101101→11101101,8,問題:計(jì)算機(jī)計(jì)算復(fù)雜化,例如計(jì)算:(-19)+(+22)10010011+00010110,解決的方法是:使用反碼或補(bǔ)碼的表示方法(按前述表示的編碼稱為原碼),即能將減法一律轉(zhuǎn)換為加法。,需要判斷符號(hào)是否相同:如果相同,結(jié)果符號(hào)不變,并進(jìn)行絕對(duì)值相加如果不同,結(jié)果取絕對(duì)值大的數(shù)的符號(hào),并進(jìn)行絕對(duì)值相減,9,原碼、反碼和補(bǔ)碼,正數(shù):原碼、反碼、補(bǔ)碼相同符號(hào)位為0,數(shù)值為對(duì)應(yīng)的二進(jìn)制數(shù)。+109,[01101101]原=[01101101]反=[01101101]補(bǔ)負(fù)數(shù):原碼符號(hào)位為1,數(shù)值為絕對(duì)值的二進(jìn)制數(shù)。-109[11101101]原反碼符號(hào)位為1,數(shù)值為絕對(duì)值的二進(jìn)制數(shù)各位變反。-109[10010010]反補(bǔ)碼符號(hào)位為1,數(shù)值為絕對(duì)值的二進(jìn)制數(shù)各位變反加1。-109[10010011]補(bǔ),10,2.有符號(hào)和無符號(hào)整型數(shù)據(jù),有符號(hào)的整型數(shù)據(jù)signedint無符號(hào)的整型數(shù)據(jù)unsignedint區(qū)別是將最高位看作符號(hào)位還是數(shù)據(jù)位,例如:1111111110101000作為有符號(hào)數(shù)使用時(shí),最高為符號(hào)位為負(fù)數(shù),值是:-88(再求一次補(bǔ))作為無符號(hào)數(shù)使用時(shí),最高為數(shù)據(jù)位為無符號(hào)的數(shù),值是:65448,11,例如:,main(){unsignedintm;m=65448;printf("\nm=%d\n",m);printf("m=%u\n",m);},例jc2_a,輸出結(jié)果:m=-88m=65448,按有符號(hào)數(shù)輸出,按無符號(hào)數(shù)輸出,12,整型數(shù)據(jù)的類型及規(guī)定,方括號(hào)表示可選項(xiàng)int分配2Byte,long分配4Byte,13,2.1.2實(shí)型數(shù)據(jù),1.實(shí)型數(shù)據(jù)的類型單精度實(shí)型數(shù)據(jù)float,分配4Byte雙精度實(shí)型數(shù)據(jù)double,分配8Byte2.實(shí)型數(shù)據(jù)的存儲(chǔ),單精度實(shí)型,指數(shù)部分,小數(shù)部分,,,,,小數(shù)的符號(hào)位,指數(shù)的符號(hào)位,14,實(shí)型數(shù)據(jù)的類型及規(guī)定,C標(biāo)準(zhǔn)并未具體規(guī)定各種實(shí)型數(shù)據(jù)所占字節(jié)數(shù),也不規(guī)定具體小數(shù)和指數(shù)部分的位數(shù)。一般而言,小數(shù)部分位數(shù)多,數(shù)據(jù)表示的有效數(shù)字多,精度就高;而指數(shù)部分位數(shù)多,則表示的數(shù)據(jù)范圍更大。,有效數(shù)字的意義?,例jC2_a,15,2.1.3字符型數(shù)據(jù),字符型數(shù)據(jù)char,分配1Byte字符型數(shù)據(jù)是指字母、數(shù)字、各種符號(hào)等用ASCII值表示的字符例如a是一個(gè)char類型數(shù)據(jù),稱作字符常量,存儲(chǔ):,01100001,2.1.4空類型,空類型void通常與指針或函數(shù)結(jié)合使用,16,2.2常量、變量與標(biāo)準(zhǔn)函數(shù),主要內(nèi)容:常量變量標(biāo)準(zhǔn)庫函數(shù),17,2.2.1常量,在運(yùn)行程序的過程中值保持不變的量1.整型常量十進(jìn)制:0~9八進(jìn)制:0~7,以0開頭十六進(jìn)制:0~9,A~F/a~f,以0 x或0X開頭,例如:100-80+12301002401000730 x380 x100X100XFF0 x0a,18,1.整型常量,整型常量的類型:根據(jù)值大小默認(rèn)類型。整型常量后面加l或L,則認(rèn)為是longint型例如:123L、0L、432l、0 x100l,注意:十六進(jìn)制常量中可以使用大寫字母A~F,也可以使用小寫字母a~f。八進(jìn)制常量中不能出現(xiàn)數(shù)字8或9例如:018、0921非法,19,2.實(shí)型常量,十進(jìn)制形式1.01.+12.0-12.00.0指數(shù)形式1e31.8e-3-123E-6-.1E-3,指數(shù)只能是整數(shù),而尾數(shù)則可以是整數(shù)也可以是小數(shù),無論指數(shù)或尾數(shù)均不能省略例如:1e、E.5、E-3非法實(shí)型常量的類型:默認(rèn)為double型,后面加F(或f),則強(qiáng)調(diào)表示該數(shù)是float類型例如:3.5f、1e2F,20,3.字符型常量,可視字符常量單引號(hào)括起來的單個(gè)可視字符例如:a、A、+、3、等轉(zhuǎn)義字符常量單引號(hào)括起來的\與可視字符組合,例如:,21,4.字符串常量,用雙引號(hào)括起的一個(gè)字符序列例如:"ABC"、"123"、"a"、"\n\t""\nGoodmorning"字符串常量的長度:所包含的字符個(gè)數(shù)字符串常量的存儲(chǔ)方式:,所占存儲(chǔ)單元數(shù):串長度+1例如:,字符串結(jié)束標(biāo)記,,,22,5.符號(hào)常量,以標(biāo)識(shí)符來代表的常量事先編譯預(yù)處理命令define定義編譯時(shí)先由系統(tǒng)替換為它所代表的常量,再進(jìn)行編譯例如:,#defineLEN2.5main(){floata,b;a=2*3.14*LEN;b=3.14*LEN*LEN;printf("a=%f,b=%f\n",a,b);},編譯前系統(tǒng)進(jìn)行替換,23,5.符號(hào)常量,main(){floata,b;a=2*3.14*2.5;b=3.14*2.5*2.5;printf("a=%f,b=%f\n",a,b);},define是編譯預(yù)處理命令,必須以“#”開頭編譯預(yù)處理命令在第7章討論。,替換為,,,24,2.2.2變量,1.變量的有關(guān)概念在程序運(yùn)行過程中,其值改變的數(shù)據(jù),稱為變量,變量用標(biāo)識(shí)符表示,稱為變量名。變量必須“先定義后使用”系統(tǒng)為變量分配存儲(chǔ)單元,存儲(chǔ)變量的值。編寫程序時(shí)通過變量名來存、取變量值。,例如:有變量a它的值是510,25,2.變量定義,變量定義的一般格式:數(shù)據(jù)類型說明符變量列表;例如:inti,j;longk,m;floatx,y;charch1,ch2;,,必須使用合法的標(biāo)識(shí)符作變量名不能使用關(guān)鍵字為變量命名,26,3.變量的初始化:,允許在說明變量的時(shí)候?qū)ψ兞抠x初值。例如:inta=5,b=10+2;doublex=23.568,y;charch1=a,ch2=66,ch3=\142;表示定義變量并對(duì)變量存儲(chǔ)單元賦值。錯(cuò)誤的初始化:inta=3+b,b=5;floatm=n=23.16;,27,2.2.3標(biāo)準(zhǔn)庫函數(shù),由C編譯系統(tǒng)定義的一種函數(shù),存放在系統(tǒng)函數(shù)庫中,用戶可以根據(jù)需要隨時(shí)調(diào)用常用函數(shù)如:printf、scanf、fabs、sqrt、sin、(常用數(shù)學(xué)函數(shù)參見教材P30表2.5)函數(shù)調(diào)用形式:函數(shù)名([參數(shù)表])例如:putchar(a)sqrt(x),例jc2_3,,28,2.3運(yùn)算符和表達(dá)式,主要內(nèi)容:算術(shù)運(yùn)算符和算術(shù)表達(dá)式賦值運(yùn)算符和賦值表達(dá)式關(guān)系運(yùn)算符和關(guān)系表達(dá)式邏輯運(yùn)算符和邏輯表達(dá)式位運(yùn)算符和位運(yùn)算表達(dá)式條件運(yùn)算符和條件表達(dá)式逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式其他運(yùn)算符及其運(yùn)算,29,運(yùn)算符的有關(guān)概念,作用:對(duì)運(yùn)算對(duì)象完成規(guī)定的操作運(yùn)算類型:按運(yùn)算對(duì)象分:單目、雙目、三目按功能分:算術(shù)、賦值、關(guān)系、邏輯條件、逗號(hào)、位、其他,30,運(yùn)算符的優(yōu)先級(jí)和結(jié)合性,優(yōu)先級(jí)指各種運(yùn)算符號(hào)的運(yùn)算優(yōu)先順序例如:算術(shù)運(yùn)算優(yōu)先于關(guān)系運(yùn)算算術(shù)運(yùn)算中先*/后+-,結(jié)合性指運(yùn)算符號(hào)和運(yùn)算對(duì)象的結(jié)合方向分為:從左向右(左結(jié)合)和從右向左(右結(jié)合)例如:算術(shù)運(yùn)算符為左結(jié)合a-b+4賦值運(yùn)算符為右結(jié)合a=b=5(C語言規(guī)定見教材P297附錄B),31,本章涉及的運(yùn)算符,+-*/%++--+-=+=-=*=/=%=a=a+1表達(dá)式的值為5,且a=6,b=5,37,說明:,++和--的運(yùn)算對(duì)象只能是變量(或運(yùn)算結(jié)果是變量的表達(dá)式),不能是常量(或運(yùn)算結(jié)果是數(shù)值的表達(dá)式)。例如:5++、(a+2)++不合法。具有右結(jié)合性,結(jié)合方向?yàn)閺挠业阶?。例如:–a++等價(jià)于-(a++)如果有多個(gè)運(yùn)算符連續(xù)出現(xiàn)時(shí),C系統(tǒng)盡可能多的從左到右將字符組合成一個(gè)運(yùn)算符例如:i+++j等價(jià)于(i++)+j-i+++-j等價(jià)于-(i++)+(-j),38,main(){inta=5;printf("%d%d\n",a,a++);},說明(續(xù)):,對(duì)函數(shù)參數(shù)的求值順序:TurboC系統(tǒng)先計(jì)算最右邊的參數(shù)值,再依次計(jì)算左面的參數(shù)值。,【例2.5】有多個(gè)函數(shù)參數(shù)且為同一變量自增的運(yùn)算處理。,輸出結(jié)果:65,運(yùn)行例2.5,39,說明(續(xù)):,【例2.6】有多個(gè)函數(shù)參數(shù)且為同一變量多次自增的運(yùn)算處理。,main(){inta=5;printf("%d%d\n",a,(a++)+(a++));},輸出結(jié)果:711,運(yùn)行例2.6,40,賦值運(yùn)算,賦值運(yùn)算符(右結(jié)合)=+=-=*=/=%=printf("%d%d\n",a},輸出結(jié)果:8102-11,0000000000001010printf("%d%d\n",a>b-1);},輸出結(jié)果:409,運(yùn)行jc2_c,請(qǐng)自行分析運(yùn)行結(jié)果,53,條件表達(dá)式運(yùn)算,條件運(yùn)算符:?:條件表達(dá)式的一般形式表達(dá)式1?表達(dá)式2:表達(dá)式3例如:m=10charch;可以對(duì)變量a、ch、student進(jìn)行doublex;printf("%d%d",sizeof(int),sizeof(a));printf("%d%d",sizeof(double),sizeof(x));printf("%d%d\n",sizeof(float),sizeof(char));},輸出結(jié)果:228841,運(yùn)行jc2_d,59,2.4運(yùn)算中數(shù)據(jù)類型的轉(zhuǎn)換,2.4.1數(shù)據(jù)類型的自動(dòng)轉(zhuǎn)換轉(zhuǎn)換原則:,自動(dòng)將精度低、表示范圍小的運(yùn)算對(duì)象類型向精度高、表示范圍大的運(yùn)算對(duì)象類型轉(zhuǎn)換,例如有定義:inta;charch;表達(dá)式:a-ch*2+35La-ch*2+35.,60,2.賦值運(yùn)算中的類型轉(zhuǎn)換,=小數(shù)部分自動(dòng)補(bǔ)0,=自動(dòng)舍去實(shí)型表達(dá)式的小數(shù)部分(注意不進(jìn)行四舍五入)==自動(dòng)截取表達(dá)式值的低字節(jié)賦值,舍去高字節(jié)==自動(dòng)給高字節(jié)補(bǔ)0或補(bǔ)1,61,2.4.2數(shù)據(jù)類型的強(qiáng)制轉(zhuǎn)換,強(qiáng)制轉(zhuǎn)換的一般形式(類型名)表達(dá)式例如:(int)(b+3*x)%31/(float)a+6,,注意:(float)22/5與(float)(22/5)不同錯(cuò)誤的類型轉(zhuǎn)換:(int)b=a+5b=int(3*a),- 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) 鍵 詞:
- c語言程序設(shè)計(jì) 語言程序設(shè)計(jì)
鏈接地址:http://www.3dchina-expo.com/p-11498765.html