第二章 數(shù)據(jù)類型、運(yùn)算符與表達(dá)式.doc_第1頁
第二章 數(shù)據(jù)類型、運(yùn)算符與表達(dá)式.doc_第2頁
第二章 數(shù)據(jù)類型、運(yùn)算符與表達(dá)式.doc_第3頁
第二章 數(shù)據(jù)類型、運(yùn)算符與表達(dá)式.doc_第4頁
第二章 數(shù)據(jù)類型、運(yùn)算符與表達(dá)式.doc_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第二章 數(shù)據(jù)類型、運(yùn)算符與表達(dá)式【計(jì)劃課時(shí)】授課8課時(shí)+上機(jī)2課時(shí) 要求預(yù)習(xí)第二章,原碼、補(bǔ)碼、二進(jìn)制、邏輯運(yùn)算一、數(shù)據(jù)類型1基本類型 教材P10 字符型(char) 1字節(jié) 數(shù)值型 整型短整型 (short) 2字節(jié) 整 型 (int) 2字節(jié) 長(zhǎng)整型 (long) 4字節(jié) (可表示到21億) 實(shí)型單精度 (float) 4字節(jié) 6/7 位有效數(shù)字 長(zhǎng)單精度(long float) 8字節(jié) 16/17位有效數(shù)字 雙精度 (double) 8字節(jié) 長(zhǎng)雙精度(long double) 10字節(jié) 20位有效數(shù)字 可知:charintlong int=floatdouble (以上字節(jié)長(zhǎng)度為Turbo C環(huán)境) 測(cè)試類型長(zhǎng)度的專用關(guān)鍵字 sizeof printf(“:%d bytes n”,sizeof();【例】main()printf(“字符型:%d 字節(jié)”,sizeof(char);printf(“ %d n”,sizeof(int)+5);結(jié)果:字符型:1字節(jié) 7二、注意事項(xiàng)1整型整數(shù) int 的范圍:-32768+32767 【例二】 main() int a; scanf(“%d”,&a); /*亦可用賦值語句*/ printf(“a=%dn”,a); 運(yùn)行程序: 12345 1234567 (= 100101101011010000111) a=12345 a=-10627 (其補(bǔ)碼為1101011010000111) 【注意】一個(gè)數(shù)據(jù)“溢出”(超出其存儲(chǔ)空間長(zhǎng)度)時(shí),會(huì)自動(dòng)截去左邊多余部分。2.數(shù)據(jù)存儲(chǔ)形式011000011 字符型 (用一個(gè)字節(jié)存放該字符的ASCII值)0110000111100110 整 型 (用規(guī)定字節(jié)存放該數(shù)值的補(bǔ)碼) 011010101010001010101010 011000011 實(shí) 型 尾數(shù)(補(bǔ)碼) 指數(shù)(階碼) 【注意】第一位均為符號(hào)位。 字符型以ASCII碼存儲(chǔ),其余以補(bǔ)碼存儲(chǔ)。 對(duì)ASCII碼,要求記?。?9AZ = = = != 關(guān)系表達(dá)式: 含有關(guān)系運(yùn)算符的表達(dá)式 特別注意 aXb 之類算式的正確寫法 a=x & x=b(錯(cuò)誤:a=X=b)【例】若x=1000,則printf(“%d”,2x3)的結(jié)果是什么?(不管x為何值,結(jié)果恒為1) 討論: if (1x關(guān)系賦值 5邏輯運(yùn)算 邏輯運(yùn)算符:! & | 邏輯運(yùn)算符的任一端如果為非0數(shù),則視為“真”,為0則視為假。 【例】printf(“%d”, !3+5) 結(jié)果為5 printf(“%d”, !0+5) 結(jié)果為6 注意:!優(yōu)先于關(guān)系運(yùn)算符,與+、-同級(jí)。 常用優(yōu)先級(jí): !、+、- 算術(shù)運(yùn)算符 關(guān)系運(yùn)算符 & | 賦值【例一】 main() 【例二】 main() int a=1,b=2,m=2,n=2; int a=1,b=2,m=2,n=2; (m=ab)&+n; (m=ba)&+n; printf(“%dn”,n); printf(“%dn”,n);求運(yùn)行后n的值是多少。 (例一: n=2 例二: n=3 如將式中&改為|,則結(jié)果相反)原因:在&和|的左邊如果能判斷出結(jié)果,則右邊不再作運(yùn)算?!纠坑幸韵鲁绦蚨危?int a,b,c; a=b=c=1; +a|+b&+c; 問執(zhí)行后a、b、c的值各是多少?(a=2,b=1,c=1)【例四】main() int m=5; if (m+5) printf(“m5”); else printf(“m=%d,”,m-); printf(“m=%d”,m-); 運(yùn)算結(jié)果: m=6,m=56條件運(yùn)算 P56 條件運(yùn)算符: ? : (三元運(yùn)算符,即需連接三個(gè)運(yùn)算量) 一般形式: e1?e2:e3 (e1為條件表達(dá)式,e2,e3為任意類型表達(dá)式) 功能:如果e10(為真),運(yùn)算結(jié)果為e2的值,如果e1=0(為假),則取e3的值。 【例一】 main()int x,y; printf(“Input x=”); scanf(“%d”,&x); y=x0?1:x0) -1 (x0) 如果將條件運(yùn)算語句改為: y= 0 (x=0) y= 0 (x=0) y=x=0?0:x0?1:-1;呢? -1 (x0) 1 (x(y+x)?10:12.5y+?20:30; 202. x-(y+x)?10:12.5y+?20:30; 10 3. -x(y+x)?10:12.5y+?20:30; 20結(jié)論:-x(y+x)或x-(y+x)之類結(jié)構(gòu)中,右邊的x應(yīng)為自減后的值7.逗號(hào)運(yùn)算 逗號(hào)運(yùn)算符: , C語言中逗號(hào)可作分隔符使用,將若干變量隔開, 如:int a,b,c; 又如:printf(“%d%d%d”,a,b,c); 亦可作運(yùn)算符使用,將若干獨(dú)立的表達(dá)式隔開,并依次計(jì)算各表達(dá)式的值。其一般形式 表達(dá)式1,表達(dá)式2,表達(dá)式n 逗號(hào)表達(dá)式的求解過程:先求表達(dá)式1的值,再求表達(dá)式2的值,最后求表達(dá)式n的值。整個(gè)逗號(hào)表達(dá)式結(jié)果的值是最后一個(gè)表達(dá)式n的值。 在C語言所有運(yùn)算符中,逗號(hào)表達(dá)式的優(yōu)先級(jí)最低。 【例一】main() 【例二】main() int x,a; int x,a; x=(a=3*5,a*4,a+5); x=(a=3*5,a*4),a+5; printf(“x=%d,a=%dn”,x,a); printf(“x=%d,a=%dn”,x,a); 運(yùn)算結(jié)果:x=20,a=15 運(yùn)算結(jié)果:x=60,a=15 分析:x的值是a+5 x的值是x=(a=3*5,a*4) a*4,a+5并不改變a本身的值 同左 【例三】main() int a,b,x; x=(a=8,b=15,b+,a+b); printf(“a=%d,b=%d,x=%dn”,a,b,x); 運(yùn)算結(jié)果:a=8,b=16,x=24 (改成+b呢?結(jié)果不變) 【注意】常用運(yùn)算符的優(yōu)先級(jí) 逗號(hào)賦值條件(?:)邏輯關(guān)系算術(shù)五、數(shù)據(jù)間的轉(zhuǎn)換(混合運(yùn)算)1數(shù)據(jù)的類型級(jí)別2基本規(guī)則 a.有符號(hào)整型變長(zhǎng),數(shù)值不變(符號(hào)位擴(kuò)展) (字符型可以看作單字節(jié)整型) b.無符號(hào)整型變長(zhǎng),數(shù)值不變(零擴(kuò)展) (同上) c.有符號(hào)整型與同級(jí)無符號(hào)整型相互轉(zhuǎn)換,按補(bǔ)碼規(guī)則 【例】編一程序?qū)⒄?1轉(zhuǎn)換為無符號(hào)整型數(shù) main()int a=-1;printf(“%u”,a); 結(jié)果為65535(11111111111111112) d.實(shí)型化整型,自動(dòng)取整 e.將實(shí)數(shù)賦給整型變量,自動(dòng)取整(int a=7.9999999等效于int a=7) f.float只要參加運(yùn)算,均自動(dòng)轉(zhuǎn)為double。 【例】main()float I=3,j=4; printf(“%dn”,sizeof(i+j); 結(jié)果為8(雙精度) g.兩個(gè)整型數(shù)相除,其值也是整型數(shù)(取商之整數(shù)部分)。所以 3/2的值為1而非1.5。 h.不同類型運(yùn)算量參加運(yùn)算,一般是將長(zhǎng)度較短的運(yùn)算量轉(zhuǎn)換為長(zhǎng)度較長(zhǎng)的運(yùn)算量,以保證不丟失信息。3強(qiáng)制類型轉(zhuǎn)換(顯式轉(zhuǎn)換) 【例一】 (int)3.5的值是整型數(shù)3 【例二】 int x,float y,那么printf(“%d”,sizeof(int)x+y);輸出結(jié)果?(8 double)六、數(shù)據(jù)的輸入和輸出 一、數(shù)據(jù)輸出 P34 1字符輸出函數(shù)putchar(c) 其中 c為字符型/整型的常量/變量/表達(dá)式 【例】以下程序運(yùn)行結(jié)果是什么? #include main()char x=a;clrscr();putchar(x);putchar(b);putchar(x+2);putchar(b+2); 結(jié)果:abcd2格式輸出函數(shù)printf() 格式: printf(“”,輸出項(xiàng)1,輸出項(xiàng)2,輸出項(xiàng)n); 格式控制參數(shù):% - 0 m.n l或h 格式字符 - 左對(duì)齊輸出 0 數(shù)字前的空位填0 m 輸出域?qū)挘ㄩL(zhǎng)度,包括小數(shù)點(diǎn)) (如數(shù)據(jù)的位數(shù)小于m,則左端補(bǔ)以空格,如大于m,則按實(shí)際位數(shù)輸出) n 輸出精度(小數(shù)位數(shù)) l 或 h 長(zhǎng)度修正符 l 長(zhǎng)整型及雙精度(對(duì)int表示long型 , 對(duì)float表示double型) long型宜用%ld,double宜用%lf 【例】main() long a=1234,b=32769; printf(“a=%ld,a=%d”,a,a); printf(“b=%ld,b=%dn”,b,b); 運(yùn)行結(jié)果:a=1234,a=1234,b=32769,b=-32767 h 表示短整型 如 %hd %hx 格式字符 %d 輸出十進(jìn)制整數(shù) %x 以十六進(jìn)制無符號(hào)形式輸出整數(shù) 例見試題匯編題3.26%o 以八進(jìn)制無符號(hào)形式輸出整數(shù) %u 無符號(hào) %f 輸出小數(shù)形式浮點(diǎn)數(shù) %lf double型 %s 輸出字符串 %c 輸出單字符 【例一】 printf(“|%-15s|2.2%f|n”,”ZHANG WEI”,165.1256); printf(“|%s|%012fn”,”LI CHANG”,234.45); 運(yùn)行結(jié)果:|ZHANG WEI |165.13| (注意:WEI后面補(bǔ)了六個(gè)空格) |LI CHANG|00234.450000| (注意:數(shù)字部分連小數(shù)點(diǎn)共16位) 如果第二句改為printf(“|%15s|%012fn”,”LI CHANG”,234.45);運(yùn)行結(jié)果:|ZHANG WEI |165.13| | LI CHANG|00234.450000| 注意:格式字符與對(duì)應(yīng)輸出項(xiàng)類型要一致,否則正確的運(yùn)算結(jié)果能得到正確的顯示結(jié)果。 【例二】若float y=1234.9999;printf(“%d”,y);則輸出結(jié)果為何? (0) 實(shí)際上實(shí)數(shù)y為任意值(如1234或1)結(jié)果都是0。 【例三】(前例)編一程序?qū)⒄?1轉(zhuǎn)換為無符號(hào)整型數(shù) main()int a=-1;printf(“%u”,a); 結(jié)果為65535(11111111111111112)特殊使用: 1、printf語句中,如果在%與x之間出現(xiàn)#號(hào),則輸出的16進(jìn)制數(shù)前帶0x,但在其他格式中#無效?!纠摹縴=23456;printf(“y=%8x,y=%#8x”,y,y); 結(jié)果:y= 5ba0,y= 0x5ba0 (試題匯編題3.7) 2、如果在%d之類格式中插入*號(hào),如 int i=3,x=1; printf(“#%*d”,i,x);輸出:# 1(在#和1之間插入i個(gè)空格)。(試題匯編題3.35)二、數(shù)據(jù)輸入 P421格式輸入函數(shù)scanf() 格式: scanf(“”,&變量名1,&變量名2,&變量名n); 格式控制參數(shù):% * m l或h 格式字符 &求地址的運(yùn)算符 &a 表示該變量所占空間的首地址 *抑制字符(“虛讀”,即讀入數(shù)據(jù)后不送給任何變量) 【例】 scanf(“%3d%*4d%f”,&i,&f); 如果輸入 1234567890.1234567890 結(jié)果i=123,f=890.123474 【注意】對(duì)于scanf(“%d%d%f”,&a,&b,&c);之類格式字符相接的語句,應(yīng)注意數(shù)據(jù)項(xiàng)值分隔處如何識(shí)別: 變類型時(shí)自動(dòng)識(shí)別 按指定域?qū)捵詣?dòng)分隔 用分隔符號(hào)(空格鍵,tab鍵,回車鍵) 用指定字符(如逗號(hào)等)分隔(用戶輸入時(shí)也必須按該字符分隔) 注意沒有精度規(guī)定(m.n) 為了便于使用,應(yīng)盡量采用某種習(xí)慣的分隔格式。2字符輸入函數(shù)getchar、getche()和getch() P41 從鍵盤上讀入一個(gè)字符,但后兩個(gè)函數(shù)輸入后無需回車。getch()還有一個(gè)功能,即不把讀入的字符回顯到屏幕上,常用于密碼輸入或菜單選擇。 理論上getche()和getch()包含在conio.h中(實(shí)際使用中似乎不用加文件包含語句)。 【例一】#include /*此句不能省*/ main() char a,b; a=getchar(),b=getchar(); printf(“a=%c,b=%cn”,a,b); 運(yùn)行時(shí),如果輸入:Student 輸出結(jié)果為a=S,b=t 【例二】#include main()char i=y; while (i=y|i=Y) printf(“您好!是否繼續(xù)?(y/n)n”); i=getche(); /*不能用getchar(),否則會(huì)把回車符作為第二次讀入值*/ printf(“再見!”); 【例三】/*一個(gè)設(shè)置密碼輸入程序*/ #include main() char password,c=*; printf(“n請(qǐng)輸入密碼:”); while (1) password=getch(); putchar(c); if (password=r) break; /*此處加入密碼驗(yàn)證語句*/ printf(“n歡迎使用本程序!”); 第二章作業(yè)P29 2.2 2.5 2.9 2.10 2.12補(bǔ)充:1、已知x=15編程求: (給出以指數(shù)形式表示的運(yùn)行結(jié)果并附上源程序)2、已知字母a的ASCII碼為十進(jìn)制的97,下面程序的輸出是:main() char a=a; a+; printf(“%d,%cn”,a+2-0,a+3-0); 3、下面程序的輸出結(jié)果是:main() int a=4,b=7;printf(“%dn”,(a=a+1,b+a,b+1);printf(“%dn”, a=a+1,b+a,b+1);4、下面程序的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論