C語言程序設(shè)計(十分詳細).ppt
C數(shù)據(jù)類型及其運算,C語言程序設(shè)計,2,C語言的數(shù)據(jù)類型,C數(shù)據(jù)類型,3,整型數(shù)據(jù),1整型數(shù)據(jù)的類型基本整型數(shù)據(jù)int,分配2Byte短整型數(shù)據(jù)shortint,分配2Byte長整型數(shù)據(jù)longint,分配4Byte整型數(shù)據(jù)均以二進制補碼形式存儲,問題:為什么要采用補碼?如何表示?,4,計算機中正、負數(shù)的表示,例如:109(1101101)2要區(qū)別:109和109方法是:將符號也數(shù)碼化即:正的符號用0表示負的符號用1表示,計算機中的數(shù)表示方法是:符號位二進制數(shù)值(以8bit為例)109110110101101101109110110111101101,5,2.有符號和無符號整型數(shù)據(jù),有符號的整型數(shù)據(jù)signedint無符號的整型數(shù)據(jù)unsignedint區(qū)別是將最高位看作符號位還是數(shù)據(jù)位,例如:1111111110101000作為有符號數(shù)使用時,最高為符號位為負數(shù),值是:-88作為無符號數(shù)使用時,最高為數(shù)據(jù)位為無符號的數(shù),值是:65448,6,例如:,main()unsignedintm;m=65448;printf("nm=%dn",m);printf("m=%un",m);,輸出結(jié)果:m=-88m=65448,按有符號數(shù)輸出,按無符號數(shù)輸出,7,整型數(shù)據(jù)的類型及規(guī)定,方括號表示可選項int分配2Byte,long分配4Byte,8,2.1.2實型數(shù)據(jù),1實型數(shù)據(jù)的類型單精度實型數(shù)據(jù)float,分配4Byte雙精度實型數(shù)據(jù)double,分配8Byte2實型數(shù)據(jù)的存儲,單精度實型,指數(shù)部分,小數(shù)部分,小數(shù)的符號位,指數(shù)的符號位,9,實型數(shù)據(jù)的類型及規(guī)定,C標(biāo)準(zhǔn)并未具體規(guī)定各種實型數(shù)據(jù)所占字節(jié)數(shù),也不規(guī)定具體小數(shù)和指數(shù)部分的位數(shù)。一般而言,小數(shù)部分位數(shù)多,數(shù)據(jù)表示的有效數(shù)字多,精度就高;而指數(shù)部分位數(shù)多,則表示的數(shù)據(jù)范圍更大。,有效數(shù)字的意義?,10,字符型數(shù)據(jù),字符型數(shù)據(jù)char,分配1Byte字符型數(shù)據(jù)是指字母、數(shù)字、各種符號等用ASCII值表示的字符例如a是一個char類型數(shù)據(jù),稱作字符常量,存儲:單片機中常用int和char數(shù)據(jù)類型。,01100001,2.1.4空類型,空類型void通常與指針或函數(shù)結(jié)合使用,11,常量、變量與標(biāo)準(zhǔn)函數(shù),主要內(nèi)容:常量變量,12,2.2.1常量,在運行程序的過程中值保持不變的量1整型常量十進制:09八進制:07,以0開頭十六進制:09,AF/af,以0 x或0X開頭(單片機編程常用16進制),例如:100-80+12301002401000730 x380 x100X100XFF0 x0a,13,1.整型常量,整型常量的類型:根據(jù)值大小默認類型。整型常量后面加l或L,則認為是longint型例如:123L、0L、432l、0 x100l,注意:十六進制常量中可以使用大寫字母AF,也可以使用小寫字母af。八進制常量中不能出現(xiàn)數(shù)字8或9例如:018、0921非法,14,2.實型(浮點型)常量,十進制形式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非法實型常量的類型:默認為double型,后面加F(或f),則強調(diào)表示該數(shù)是float類型例如:3.5f、1e2F,15,3.字符型常量,可視字符常量單引號括起來的單個可視字符例如:a、A、+、3、等轉(zhuǎn)義字符常量單引號括起來的與可視字符組合,例如:,16,4.字符串常量,用雙引號括起的一個字符序列例如:"ABC"、"123"、"a"、"nt""nGoodmorning"字符串常量的長度:所包含的字符個數(shù)字符串常量的存儲方式:,所占存儲單元數(shù):串長度1例如:,字符串結(jié)束標(biāo)記,17,5.符號常量,以標(biāo)識符來代表的常量事先編譯預(yù)處理命令define定義編譯時先由系統(tǒng)替換為它所代表的常量,再進行編譯例如:,#defineLEN2.5main()floata,b;a=2*3.14*LEN;b=3.14*LEN*LEN;printf("a=%f,b=%fn",a,b);,編譯前系統(tǒng)進行替換,18,5.符號常量,main()floata,b;a=2*3.14*2.5;b=3.14*2.5*2.5;printf("a=%f,b=%fn",a,b);,define是編譯預(yù)處理命令,必須以“#”開頭,替換為,19,變量,1.變量的有關(guān)概念在程序運行過程中,其值改變的數(shù)據(jù),稱為變量,變量用標(biāo)識符表示,稱為變量名。變量必須“先定義后使用”系統(tǒng)為變量分配存儲單元,存儲變量的值。編寫程序時通過變量名來存、取變量值。,例如:有變量a它的值是510,20,變量定義,變量定義的一般格式:數(shù)據(jù)類型說明符變量列表;例如:inti,j;longk,m;floatx,y;charch1,ch2;,必須使用合法的標(biāo)識符作變量名不能使用關(guān)鍵字為變量命名,21,3.變量的初始化:,允許在說明變量的時候?qū)ψ兞抠x初值。例如:inta=5,b=10+2;doublex=23.568,y;charch1=a,ch2=66,ch3=142;表示定義變量并對變量存儲單元賦值。錯誤的初始化:inta=3+b,b=5;floatm=n=23.16;,22,運算符和表達式,主要內(nèi)容:算術(shù)運算符和算術(shù)表達式賦值運算符和賦值表達式關(guān)系運算符和關(guān)系表達式邏輯運算符和邏輯表達式位運算符和位運算表達式條件運算符和條件表達式逗號運算符和逗號表達式其他運算符及其運算,23,運算符的有關(guān)概念,作用:對運算對象完成規(guī)定的操作運算類型:按運算對象分:單目、雙目、三目按功能分:算術(shù)、賦值、關(guān)系、邏輯條件、逗號、位、其他,24,運算符的優(yōu)先級和結(jié)合性,優(yōu)先級指各種運算符號的運算優(yōu)先順序例如:算術(shù)運算優(yōu)先于關(guān)系運算算術(shù)運算中先*/后+-,結(jié)合性指運算符號和運算對象的結(jié)合方向分為:從左向右(左結(jié)合)和從右向左(右結(jié)合)例如:算術(shù)運算符為左結(jié)合a-b+4賦值運算符為右結(jié)合a=b=5(C語言規(guī)定見教材),25,運算符,+-*/%+-+-=+=-=*=/=%=a=a+1表達式的值為5,且a=6,b=5,31,說明:,+和-的運算對象只能是變量(或運算結(jié)果是變量的表達式),不能是常量(或運算結(jié)果是數(shù)值的表達式)。例如:5+、(a+2)+不合法。具有右結(jié)合性,結(jié)合方向為從右到左。例如:a+等價于-(a+)如果有多個運算符連續(xù)出現(xiàn)時,C系統(tǒng)盡可能多的從左到右將字符組合成一個運算符例如:i+j等價于(i+)+j-i+-j等價于-(i+)+(-j),32,main()inta=5;printf("%d%dn",a,a+);,說明(續(xù)):,對函數(shù)參數(shù)的求值順序:TurboC系統(tǒng)先計算最右邊的參數(shù)值,再依次計算左面的參數(shù)值。,【例2.5】有多個函數(shù)參數(shù)且為同一變量自增的運算處理。,輸出結(jié)果:65,運行例2.5,33,說明(續(xù)):,【例2.6】有多個函數(shù)參數(shù)且為同一變量多次自增的運算處理。,main()inta=5;printf("%d%dn",a,(a+)+(a+);,輸出結(jié)果:711,運行例2.6,34,賦值運算,賦值運算符(右結(jié)合)=+=-=*=/=%=printf("%d%dn",a,輸出結(jié)果:8102-11,0000000000001010&00000000000010000000000000001000即:a&b的值是8,運行jc2_b,45,HEX文件,IntelHEX由任意數(shù)量的十六進制記錄組成。每個記錄包含5個域,它們按以下格式排列::llaaaattdd.cc每一組字母對應(yīng)一個不同的域,每一個字母對應(yīng)一個十六進制編碼的數(shù)字。每一個域由至少兩個十六進制編碼數(shù)字組成,它們構(gòu)成一個字節(jié),就像以下描述的那樣:,46,HEX文件,:每個IntelHEX記錄都由冒號開頭.ll是數(shù)據(jù)長度域,它代表記錄當(dāng)中數(shù)據(jù)字節(jié)(dd)的數(shù)量。aaaa是地址域,它代表記錄當(dāng)中數(shù)據(jù)的起始地址。tt是代表HEX記錄類型的域,它可能是以下數(shù)據(jù)當(dāng)中的一個:00數(shù)據(jù)記錄01文件結(jié)束記錄02擴展段地址記錄04擴展線性地址記錄dd是數(shù)據(jù)域,它代表一個字節(jié)的數(shù)據(jù)。一個記錄可以有許多數(shù)據(jù)字節(jié).記錄當(dāng)中數(shù)據(jù)字節(jié)的數(shù)量必須和數(shù)據(jù)長度域(ll)中指定的數(shù)字相符。cc是校驗和域,它表示這個記錄的校驗和。校驗和的計算是通過將記錄當(dāng)中所有十六進制編碼數(shù)字對的值相加,以256為模進行以下補足。,