天天看點

c 語言的資料類型ppt,C語言第3章資料類型.ppt

c 語言的資料類型ppt,C語言第3章資料類型.ppt

C語言第3章資料類型.ppt

1,第 3 章 資料類型、運算符及表達式,基本資料類型的存儲方式和表示方式 不同類型間資料轉換的原則與方法 有關運算符與表達式的運用,2,一個C程式是由一個或多個函數組成,函數體由若幹條C語句組成,那麼,C語句又是由什麼組成,思考,主函數 函數n,C語句1 C語句2 C語句n,關鍵字 辨別符 字元集,C 程 序3,注意所有關鍵字都要用小寫英文字母表示,且不允許被用作辨別符使用,auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while,關 鍵 字,4,标 識 符,辨別符是由英文字母、數字及下劃線構成的字元串,并且首字元必須為字母或下劃線。 用來辨別常量、變量、函數名、數組名、類型定義符等。 注意關鍵字是使用者辨別符的禁區 命名原則見名知意大小寫有差別 不同C語言版本允許的長度不一樣 ANSI C為8個字元 Turbo C 為32,5,練習請找出不合法的辨別符.,union abc_123 2ab3 db abc8* INT,stu _bc8 abcdefghi -s10 * r2.5; aPI*r*r; c2*PI*r; printf“rf,af;cfn”,r,a,c; 10,關于變量,變量的定義 變量是程式執行過程中其值可以改變的量。 變量的分類 整型變量 實型變量 字元變量 變量的命名同辨別符的命名 變量的使用 先定義後使用,每一個變量指定為一确定類型 含義清楚 count name day 一般用小寫字母表示11,3.3 整 型 數 據 int,三種形式 十進制數 如12、345、0 八進制數以0開頭 如012、045 十六進制數0 x開頭 如0 x12、0 x345,整型常量,0123 ( )10 0X123 ( )10 0XFF ( )10,83,255,291,例 30000為int型 65536為long int型,例 12與12L,整型常量的類型 根據其值所在範圍确定其資料類型;,在整常量後加字母L或l,認為它是long int型常量。,十進制無符号整常數的範圍為065535,有符号數為3276832767 八進制無符号數的表示範圍為00177777 十六進制無符号數的表示範圍為0X00XFFFF,12,整型常量舉例,include void main printf“d,o,xn”,123,123,123; printf“d,o,xn”,023,023,023; printf“d,o,xn”,0 x12,0 x12,0 x12; ,例整型常量的不同進制表示。,d,o,x是輸入輸出的格式字元串 d表示十進制 o表示八進制 x表示十六進制,上述程式中的n 表示輸出後回車換行,13,分 類 基本型int 短整型short int、short 長整型long int、long 無符号型 無符号整型unsigned int 無符号短整型unsigned short 無符号長整型unsigned long,整型變量,取值範圍 -3276832767 -3276832767 -21億21億 065535 065535 042億,所占位數 16 16 32 16 16 32,14,整型變量在記憶體中存儲高位元組,低位元組,符号位 0表示正整數 1 表示負整數,采用補碼表示 正整數補碼與原碼相同 負整數補碼 原碼(取反)1,例如 47 0 x2F 原碼 0000,0000,0010,1111 取反 1111,1111,1101,0000 加1得到 - 47的補碼 1111,1111,1101,0001,取值範圍-215 215-1 -3276832767,15,整型變量定義,定義形式 數值類型 變量名表; 說明 數值類型即類型說明符int、short、long等。 變量名表可為一個或多個變量名,之間用逗号間隔。 變量被定義後,其取值範圍也被确定。,include void main int a,b,c; a4; b5; ca*b; printf“a*bdn”,c; ,等價于 int a; int b; int c;,16,include void main int a,b; a32767; ba1; printf“d,d”,a,b; ,運作結果 32767,32768,a,b,整型資料的溢出,32767,-32768,溢出不報錯 會出現不可預料後果,17,使用整型資料時的注意事項,若某系統的C版本确定short int與int型資料在記憶體中占據的長度相同,則二者等價。 一個int型常量-3276832767可以指派給int型變量或long型變量。 其值在-231231-1内,而在-215215-1外的整數隻可指派給long型變量。 int a; a111111; 不報錯但結果不對 常量無unsigned型,但一個非負整數可指派給unsigned型整數變量 ,但要注意值的範圍。 unsigned a; a10; 不報錯但結果不對 長整型數的表示方法是在數值後面加字母l或L,如234L。 不同的資料類型有不同的存儲字長,使用時注意其取值範圍。,18,3.4 浮點型資料,浮點型常量 即實數。以十進制形式表示。 表示形式 小數形式由數字和小數點組成 如1.56、 - 0.231 指數形式科學計數法小數E或e整數 “小數”表示實數的數值位,即尾數部分。 “E”代表十進制數的基數10。 “整數”表示10的乘幂。,浮點型常量,1.23103,3.918e-2,1.23E3,3.91810-2,注意字母E 之前必須 有數字,19,浮點型變量,分 類 單精度float 雙精度double 長雙精度long double,有效數字 7位 1516位 1819位,所占位數 32 64 128,變量的定義 float x,y; double z; ,浮點型常量不分單、雙精度,都按雙精度double處理。一個浮點型常量可以賦給一個float型或double型,根據變量的類型截取浮點型常量中相應的有效位數字。,如 float a; a123456.123;,20,浮點型資料的舍入誤差,由于浮點型變量的存儲單元有限,因而小數部分的有效數字是有限的,超過部分将舍去。, include void main float a,b; a123456.789E5; ba20; printf“f”,b; ,運作結果 12345678848.000000,避免大數與很小數直接加減 判斷兩個浮點型變量是否相等,是判斷二者的差的絕對值是否小于一個很小的數21,變量初始化定義時賦初值,變量的使用先定義,後使用,變量定義位置一般放在函數開頭,例 int a2,b,c4; float data3.67; char chA; int x1,y1,z1; int xyz1;,例1 int student; stadent19; Undefined symbol statent in function main,例2 float a,b,c; cab; Illegal use of floating point in function main,22,3.5 字元型資料,概念指用單引号撇号括起來的單個字元。 例 a b 5 字元常量的值該字元的ASCII碼值,字元常量,字元常量的分類 一般字元常量 x a A 2 轉義字元常量 以一個反斜杠“”開頭的字元序列,有特定含義。,ASCII碼(見教材P364附錄A) 8 位對字元編碼, 碼值0-255 032 為控制字元(不可印刷字元) 33-255為可印刷字元 128-255 為擴充ASCII碼,23,轉義字元常量表,101 - A 012 - n 376 - x61 - a 60 - 0 483 - ,24,include void main printf“101 x42 Cn“; printf“I say“How are you“n“; printf“C Programn“; printf“Turbo C“; ,運作結果螢幕顯示 A B C I say”How are you” C Program Turbo C,例 include void main printf“Ybn”; ,運作結果 螢幕顯示 列印機輸出,轉義字元的使用,25,運作結果 螢幕顯示,螢幕輸出在後面的字元會取代原來螢幕上該位置上顯示的字元,include void main printf“_ab_ct_derftgn“; printf“htibbj_k“; ,列印機輸出,f,a,b,c,g,d,e,h,j,i,k,轉義字元的使用,26,字元變量,關于字元變量 字元變量用來存放字元常量。 一個字元變量隻能存放一個字元常量。 一個字元變量在記憶體中占用一個位元組的空間。,字元變量的定義格式 char 變量名表;字元變量的指派 變量名字元常量; 變量名整型資料; 舉例 char c; char ch1,ch2; c97;ch1B;ch2C;,27,include void main char c1,c2; c197;c298; printf“c,cn”,c1,c2; printf“d,dn”,c1,c2; ,include void main char c1,c2; c1a;c2b; c1c1-32;c2c2-32; printf“c,c”,c1,c2; ,運作結果 A,B,字元變量存放字元ASCII碼 char與int資料間可進行算術運算 char與int資料可以互相指派,運作結果 a,b 97,98,28,define PRICE 12.5 include void main int num3; float total; char ch1,ch2D; totalnum*PRICE; ch1ch2-Aa; printf“totalf,ch1cn”,total,ch1; ,運作結果 total37.50000, ch1d,29,分 類 基本型int 短整型short int、short 長整型long int、long 無符号型 無符号整型unsigned int 無符号短整型unsigned short 無符号長整型unsigned long,整型變量,取值範圍 -3276832767 -3276832767 -21億21億 065535 065535 042億,所占位數 16 16 32 16 16 32,30,浮點型變量,分 類 單精度float 雙精度double 長雙精度long double,有效數字 7位 1516位 1819位,所占位數 32 64 128,31,字元變量,關于字元變量 字元變量用來存放字元常量。 一個字元變量隻能存放一個字元常量。 一個字元變量在記憶體中占用一個位元組的空間。,字元變量的定義格式 char 變量名表;字元變量的指派 變量名字元常量; 變量名整型資料; 舉例 char c; char ch1,ch2; c97;ch1B;ch2C;,32,概念字元串常量是指用一對雙引号括起來的字元序列。如“ Hello”、 “good”等。 字元串常量的存儲 系統自動在字元串的末尾加上一個字元串結束标記0,以此判斷字元串是否結束。 程式中長度為n個字元的字元串常量,在記憶體中需要用n1個位元組空間來存儲它。,字元串常量例字元串“string”的存儲,33,字元常量與字元串常量的差別,二者表示形式不同。 字元常量的定界符是,而字元串常量的定界符是“”。 如a是字元常量,而“a”是字元串常量。 存儲空間不同。 一個字元常量隻占1個位元組,而一個含有單個字元的字元串常量需要占用2個位元組。 如a在記憶體中隻占1個位元組,“a”則需占用2個位元組空間。 不允許将一個字元串常量賦給一個字元型變量。 如cha 是正确的;而ch“a” 不正确。,34,允許定義變量的同時使變量初始化 例如 int a3; 等價于 int a; a3; 允許隻對其中一部分變量賦初值 例如int a3,b,c4; char ch1x,ch2; 若有幾個變量初值相同,必須分别指派 例如int a2,b2,c2;,3.6 變量賦初值,int abc2;,對字元型變量初始化時,既可以将字元用單引号括起來直接指派,也可以使用該字元的ASCII碼進行指派。 例如char chA; 等價于 char ch65;,35,變量的位址,程式運作時,變量的值以二進制的形式存儲在記憶體中。存儲空間的大小由變量的資料類型決定。,記憶體的編址 記憶體分為若幹個存儲單元。 每個單元存放一個位元組的資料。 每個單元有唯一的一個位址。 變量存放在記憶體單元中,若變量所占空間包括多個存儲單元,則把首位址作為變量位址。,36,不同類型的資料混合運算,先轉換成同一類型,然後進行運算。,3.7 各類數值型資料間的混合運算,double,float,long,unsigned,int,char, short必定的轉換,不同類型資料轉換方向,37,隐式轉換 運算轉換不同類型資料混合運算時 指派轉換把一個值賦給與其類型不同的變量時 輸出轉換輸出時轉換成指定的輸出格式 函數調用轉換實參與形參類型不一緻時轉換 顯式轉換(強制轉換) 一般形式(類型名)(表達式) 例 intxy intxy double3/2 int3.6 說明強制轉換得到所需類型的中間變量,原變量類型不變 可能發生較高類型向較低類型轉換,不同類型資料間的轉換, include void main float x; int i; x3.6; iintx; printf“xf,id”,x,i; ,結果x3.600000 , i3,38,例如習題3.9 1 xa3*intxy2/4 x2.5, a7, y4.7,2.573*int2.54.72/4,2.573*int7.22/4,2.51*72/4,2.572/4,2.51/4,2.50,2.5,39,按照運算類型分 算術運算符 、-、*、/、 關系運算符 、、| kj; j3; kj; j3; printf“d”,j; j3; printf“d”,j; a3;b5;ca*b; a3;b5;ca*b;,k4,j4,k3,j4,4,3,c20,a4,c15,a4,自增、自減運算符 ,使變量值加1或減1,i, i 在使用i前,使i的值加減1) i,i 在使用i後,使i的值加減1 ),說明 不能用于常量和表達式,隻能用于變量。 如 5,ab是不合法的 結合方向 自右向左 優先級 - * / -,例 -i -i i3; printf“d”,-i;,44,1 k34512 a6,2 k3339 a6,例設a3 ,若執行語句kaaa後的k值為多少,turbo c運作結果例ij i)j 還是 i(j),c編譯系統将盡可能多的将多個字元組成一個運算符, 并按自左而右的方法,為避免誤解最好采取都能了解的方法,寫成ij;,45,3.9 指派運算符和指派表達式,簡單指派運算符 ,變量辨別符常量或表達式,說明 “”是一個雙目運算符,需要左右兩個運算量。 “”是指派運算符,不等于等号,沒有相等的含義。 “”左端的運算量必須是單個變量,而不能是表達式。 指派運算中,使運算符左端的變量具有右端表達式的值。,46,1aa1; 等價于a; 2 abc2; 連續指派 等價于abc2; 或者 a2;b2;c2; 3 a2b3; 等價于b3;a235; 4 ab2*c3; 等價于b2;c3;a2*36;,允許賦 值表達式中含 有另外的指派 表達式,進行 連續指派,舉 例,47,a3,aa3,x*y8,xx*y8,x3,xx3,複合指派運算符, * / ab3;,abc5 ab5 a5c6 ab4c6 ab10/c2,表達式值為5,a,b,c值為5, b5;a5,表達式值11,c6,a11,表達式值10,a10,b4,c6,表達式值5,a5,b10,c2,aa-a*a,( ),aa*a-a*3,( ),( ),( ),優先級 很低,僅高于逗号運算符 左側必須是變量,不能是常量或表達式,指派表達式的值與變量值相等,且可嵌套,49,指派運算中數值類型的轉換,intfloat舍棄實數的小數部分。,int i3.56;,i3,float f23;,f23.00000,float、doubleint數值不變,但以浮點數形式存儲。,floatdouble截取前面7位有效數字,但數值範圍不能溢出。 doublefloat數值不變,有效位數擴充到16位。 intchar字元ASCII碼放到整型變量的低8位。 如果為無符号變量,則高8位補0。 如果為符号變量,若字元最高位為0,則高8位補0;若字元最高位為1,則高8位補1;,int c376;,11111110,11111111,unsigned,00000000,50,charint /short /long 隻将其低8位送到char型變量(截斷)。,char c289;,00100001,00000001,c33,long int 将2bytes送入低16位,高16位進行符号擴充。 int long 隻将低16位送入,注意溢出。 longint, shortunsigned int不進行符号擴充,高位補0。 unsigned非unsigned原樣賦出。, include void main unsigned a; int b -1; ab; printf“u”,a; ,65535,51,形式表達式1,表達式2,表達式n 結合性從左向右 優先級 15 在所有運算符中級别最低 逗号表達式的值等于表達式n的值 用途常用于循環for語句中,3.10 逗号運算符和逗号表達式,用逗号将兩個表達式連接配接起來,順序求值運算符,a3*5,a*4 a3*5,a*4,a5,xa3,6*3 xa3,6*a,a1;b2;c3; printf“d,d,d”,a,b,c; printf“d,d,d”,a,b,c,b,c;,52,作業3.4 3.6 3.7 3.9 3.10 3.12,END,