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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

評論

0/150

提交評論