已閱讀5頁,還剩67頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1,第 2 章 基本數(shù)據(jù)及其運(yùn)算,2.1 基本類型數(shù)據(jù) 2.2 輸入和輸出基礎(chǔ) 2.3 數(shù)據(jù)運(yùn)算 2.4 表達(dá)式,2,2.1 基本類型數(shù)據(jù),C語言中,基本數(shù)據(jù)有三種: 整數(shù):整數(shù)是不帶小數(shù)點(diǎn)和指數(shù)符號(hào)的數(shù)據(jù)。 浮點(diǎn)數(shù):浮點(diǎn)數(shù)是帶有小數(shù)點(diǎn)或指數(shù)符號(hào)的數(shù)值數(shù)據(jù)。 字符:字符型數(shù)據(jù)表示一個(gè)字符,占用一個(gè)字節(jié)(8個(gè)二進(jìn)制位)。,3,2.1.1 整型數(shù)據(jù), 按其數(shù)值范圍大小劃分成三種: 1.基本型:用 int 標(biāo)記 2.短整型:用 short int 標(biāo)記,簡(jiǎn)寫為 short 3.長(zhǎng)整型:用 long int 標(biāo)記,簡(jiǎn)寫為 long 按值內(nèi)部的最高位不同理解又有兩類: 1.帶符號(hào):存儲(chǔ)單元最高位作為符號(hào)位 2.不帶符號(hào):存儲(chǔ)單元中全部二進(jìn)位用作存放數(shù)據(jù)本身,而沒有符號(hào)位。 表示方法: unsigned int、 unsigned short、 unsigned long,4,int i, j; /* 定義帶符號(hào)的整型變量*/ unsigned short k; /* 定義無符號(hào)短整型變量 */ long m, n; /* 定義帶符號(hào)的長(zhǎng)整型變量*/ 說明:不同版本占用字節(jié)數(shù), 例如,類型,版本,5, 常用的整數(shù)表示的數(shù)值范圍16位例,6, 十進(jìn)制整數(shù):如 0,123,-45。 八進(jìn)制整數(shù):以數(shù)字0開頭,并由07組成的數(shù)字符序列。如:0123表示八進(jìn)制整數(shù),其值等于十進(jìn)制整數(shù)為:1*82 + 2*81 + 3 = 83 十六進(jìn)制整數(shù):以0x(或0X)開頭,并由十六進(jìn)制數(shù)的數(shù)字符組成的數(shù)字符序列。表示十六進(jìn)制數(shù)的數(shù)字符有 16 個(gè):09 和 A、B、C、D、E、F,其中六個(gè)字母也可以小寫。 如:0x123表示十六進(jìn)制整數(shù),其值等于十進(jìn)制整數(shù)為:1*162 + 2*161 + 3 = 291;0xabc,其值等于10*162 + 11*161 + 12 = 2748。, 整型常量的書寫形式,7, long 型整數(shù):在整型常數(shù)后加字母 L 或 l,即為long 型整型常數(shù)。 例如:0L、132L 等。 不帶符號(hào)的整型:在整型常數(shù)后加字母 U 或 u,即為 unsigned 型整型常數(shù)。例如:1U、122U 等。 不帶符號(hào)的 long 型整數(shù):在整型常數(shù)后同時(shí)加上字母 U 和 L,表明該整型常數(shù)是 unsigned long 型。 例如 22UL、35LU 等。, 長(zhǎng)整型整數(shù)和無符號(hào)整數(shù)的表示,8,按數(shù)值范圍大小和精度不同分成三種: 1. 單精度型:用 float 標(biāo)記 如: float x, y; 2. 雙精度型:用 double 標(biāo)記 如: double result; 3. 長(zhǎng)雙精度實(shí)型:用 long double 標(biāo)記 如:long double z;,2.1.2 浮點(diǎn)型數(shù)據(jù),9,1. float 型 在內(nèi)存中占用4個(gè)字節(jié)(32個(gè)二進(jìn)位),約7個(gè)十進(jìn)位有效數(shù)字,能表示絕對(duì)值約為10-381038。 2. double 型 在內(nèi)存中占用8個(gè)字節(jié)(64個(gè)二進(jìn)位),約15個(gè)十進(jìn)位有效數(shù)字,能表示絕對(duì)值約為10-308 10308。 3. long double 型 long double型數(shù)據(jù)一般占用比double型數(shù)據(jù)更多的字節(jié),但在VC中,也只占用8個(gè)字節(jié)。,2.1.2 浮點(diǎn)型數(shù)據(jù)(續(xù)),10,說明: (1)整數(shù)部分和小數(shù)部分可以任選,但不可同時(shí)沒有。 (2)小數(shù)點(diǎn)和指數(shù)部分不可以同時(shí)都沒有。 (3)指數(shù)部分是以一個(gè)字母e或E開頭,后跟一個(gè)整數(shù)。 例如:合法的浮點(diǎn)常數(shù):7.、.457、1E5、1.5e-6 不正確的浮點(diǎn)常數(shù): E4、.E5、4.0E,浮點(diǎn)數(shù)的一般書寫格式 正負(fù)號(hào) 整數(shù)部分.小數(shù)部分 指數(shù)部分,11,(4) 在浮點(diǎn)數(shù)后加f表示float;加L(或l)表示long double 型,在浮點(diǎn)數(shù)的最后不加任何字母,C系統(tǒng)認(rèn)為此數(shù)是 double 型。 例如:1.5、1.5f、1.5L 分別表示 double型、float型和long double型,浮點(diǎn)數(shù)說明,12,(2)浮點(diǎn)數(shù)運(yùn)算有一定的計(jì)算誤差 例如:要判別兩個(gè)浮點(diǎn)型變量x和y是否相等 正確:fabs(x-y)1e-6 / x與y非常接近則認(rèn)為相等 錯(cuò)誤:x = y / x與y不可能完全相等,浮點(diǎn)數(shù)注意點(diǎn),(1)接受的浮點(diǎn)數(shù)與書寫會(huì)有一定的誤差 例如: float x = 1.23456789; 因x只能存儲(chǔ)約7位有效數(shù)字,浮點(diǎn)數(shù)1.23456789所對(duì)應(yīng)的二進(jìn)制形式中,超出存儲(chǔ)位數(shù)的那些位不會(huì)被存儲(chǔ)。,13,字符型數(shù)據(jù)用于表示一個(gè)字符值。 字符型數(shù)據(jù)的內(nèi)部表示是字符的ASCII代碼(二進(jìn)制形式)。 字符型數(shù)據(jù)的類型符用char來標(biāo)記。 如:char c1, c2; 字符型數(shù)據(jù)可看作是-128127或0255的一個(gè)小整數(shù)。,2.1.3 字符型數(shù)據(jù),14,普通字符常量:用單引號(hào)括住的一個(gè)字符。 例如:a、B、$ 【例2.1】字符型數(shù)據(jù)與整型數(shù)據(jù)通用的示例程序。 #include void main() char c1, c2; /* 定義兩個(gè)字符型變量c1和c2 */ c1 = 97; /* a的 ASCII 碼值為 97 */ c2 = c1+1; /* 字符型數(shù)據(jù)與整型數(shù)據(jù)混合運(yùn)算 */ printf(“c1 = %c, c1s ASCII code = %d n“, c1, c1); printf(“c2 = %c, c2s ASCII code = %d n“, c2, c2); ,字符型常量書寫方法普通字符常量,c1 = a, c1s ASCII code = 97 c2 = b, c2s ASCII code = 98,程序輸出,15,轉(zhuǎn)義字符常量:用字符或字符列來標(biāo)記。例如: 詳見表21 r :回車符,光標(biāo)位置移到當(dāng)前行首 n :換行符,光標(biāo)位置移到下一行首 t :制表符,使輸出位置橫向跳至下一個(gè)輸出區(qū)開始列。 0 :字符串結(jié)束符 ddd :ddd為1至3個(gè)8進(jìn)制數(shù)字。如12也能表示換行符n 。,字符型常量書寫方法轉(zhuǎn)義字符常量,16,轉(zhuǎn)義符 含 義 a 響鈴 b 退格(Backspace鍵) n 換行符,光標(biāo)位置移到下一行首 r 回車符,光標(biāo)位置移到當(dāng)前行首 t 水平制表符(Tab鍵) 反斜杠符 單引號(hào)符 “ 雙引號(hào)符“ 0 字符串結(jié)束符 ddd ddd為1至3個(gè)8進(jìn)制數(shù)字 如,12也能表示換行符n xhh hh為1至2個(gè)16進(jìn)制數(shù)字 如,x41也能表示大寫字母A,表2-1 轉(zhuǎn)義字符及其含義,17,字符串常量:用雙引號(hào)括起來的一串字符。 例如:“I am a student.“、“China“、“a“ 普通字符與字符串的區(qū)別,字符型常量書寫方法字符串常量,18,例如:char c=a 正確 char c=”a” 錯(cuò)誤 又如:字符串”China”機(jī)內(nèi)表示: 字符型數(shù)據(jù)可與整型數(shù)據(jù)混合運(yùn)算 字符型數(shù)據(jù)以 ASCII 代碼的二進(jìn)制形式存儲(chǔ),與整數(shù)的存儲(chǔ)形式相類似。因此,在程序中,字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用,字符型數(shù)據(jù)與整型數(shù)據(jù)可混合運(yùn)算。,字符型與字符串常量的區(qū)別,19,2.2 輸入和輸出基礎(chǔ),2.2.1 單字符的輸出和輸入 1. 單個(gè)字符的輸出函數(shù) 格式:putchar(ch) 功能:將一個(gè)字符輸出到標(biāo)準(zhǔn)輸出設(shè)備(通常指顯 示器)上。 說明: 1. ch可以是字符型常量或變量,也可以是整型常量或變量。 2. 使用字符輸入輸出函數(shù),在程序首必須書寫 #include ,20,【例2.2】使用putchar( )函數(shù)示例,#include void main() char ch= h; int i = i; putchar(67); /* 輸出字母C,對(duì)應(yīng)的ASCII碼值為67 */ putchar(ch); /* 輸出字母h */ putchar(i); /* 輸出字母i */ putchar(n); /* 輸出字母n */ putchar(141); /* 輸出字母a,對(duì)應(yīng)的ASCII碼值為141(八進(jìn)制)*/ putchar(n); /* 換行 */ ,程序輸出 China,21,2. 單個(gè)字符輸入函數(shù),格式:getchar( ) 功能:從標(biāo)準(zhǔn)輸入設(shè)備上(通常為鍵盤)讀入 一個(gè)字符。 說明: 1. 該函數(shù)沒有參數(shù),它只能接受一個(gè)輸入字符。 2. getchar()得到的字符可以賦給一個(gè)字符變量或整型變量,也可以不賦給任何變量。 例如:將輸入的字符直接輸出 putchar(getchar(),22,【例2.3】使用putchar( )函數(shù)示例,#include void main() char c; c = getchar(); /* 輸入一個(gè)字符 */ putchar(c); /* 輸出讀入的字符 */ putchar(n); /* 換行 */ 若:程序運(yùn)行時(shí)從鍵盤鍵入字符 Z 和Enter鍵 則:程序輸出 Z,23,2.2.2 格式輸出和輸入,1. 格式輸出函數(shù) 格式:printf(格式控制字符串,輸出項(xiàng)表) 其中:(1)格式控制字符串是用雙引號(hào)括起來的字符串,包含三類字符: 普通字符:要求按原樣輸出的字符。 轉(zhuǎn)義字符:要求按轉(zhuǎn)義字符的意義輸出。如n表示輸出時(shí)回車換行,b表示退格 格式轉(zhuǎn)換說明:以“%”開頭后加修飾符和格式符。常用的有%d、%f、%c、%s等。,24,2.2.2 格式輸出和輸入 printf函數(shù),(2) 輸出項(xiàng)表:每一個(gè)輸出項(xiàng)可以是一個(gè)常量、變量或表達(dá)式等。 例如: int a=3, b=5; printf(“a=%d,b=%d, a+b=%dn“,a,b,a+b);,輸出結(jié)果: a=3,b=5,a+b=8,25, 格式修飾符,%-+#w.ph/l/L輸出格式符 - 左對(duì)齊標(biāo)志,缺省時(shí)右對(duì)齊。 + 正數(shù)輸出帶正號(hào)。 # 對(duì)八進(jìn)制數(shù)前加0;對(duì)十六進(jìn)制數(shù)前加0x;對(duì)浮點(diǎn)數(shù)總顯示小數(shù)點(diǎn)。 w 指定數(shù)據(jù)輸出的寬度。若寬度為*,這時(shí)域?qū)挻笮∮上乱粋€(gè)輸出項(xiàng)的整數(shù)值指出。 例如:printf(“%*c“,10, *) 則:等同與%10c,即先輸出9個(gè)空格,再輸出一個(gè)*。,26, 格式修飾符(續(xù)),.p 對(duì)e、f格式,指定小數(shù)點(diǎn)之后輸出的位數(shù),缺省時(shí),p=6。 對(duì)s格式,指定輸出的字符數(shù)。 h 輸出的是短整型 l 輸出的是長(zhǎng)整型 L 輸出的是long double型。,27, 輸出格式符,格式符 意 義 d或i 以十進(jìn)制輸出整型 o 以八進(jìn)制輸出整型 x或X 以十六進(jìn)制輸出整型 u 以無符號(hào)十進(jìn)制輸出整型 c 輸出一個(gè)字符 s 輸出字符串 f 以小數(shù)形式輸出單、雙精度浮點(diǎn)數(shù) e或E 以指數(shù)形式輸出單、雙精度浮點(diǎn)數(shù) % 輸出一個(gè)字符%,28, 格式輸出函數(shù)例2.4,【例1】int i = 1234; long j = 1234567L; printf(“%d,%+6d, %-6d, %ldn“, i, i, i, j); 將輸出: 1234, +1234,1234 ,1234567 注意:對(duì)于long型數(shù)據(jù)輸出,在格式符前必須有長(zhǎng)度修飾符l,表明輸出long型數(shù)據(jù)。 【例2】int k = 045; long p = -1L; printf(“%#o, %4o, %6lon“, k, k, p); printf(“%#x, %4x, %6lXn“, k, k, p); 將輸出: 045, 45,37777777777 (-1的補(bǔ)碼) 0x25, 25,FFFFFFFF,29, 格式輸出函數(shù)例(續(xù)),【例3】 printf(“%d,%4u,%lun“, 4294967295u, 4294967295u, -1); 將輸出: -1, 4294967295,4294967295 (231-1) 【例4】 printf(“%c,%-3c,%2cn“, 045, a, a); /* 八進(jìn)制045對(duì)應(yīng)的字符是% */ 將輸出: %,a , a 【例5】 printf(“%f,%8.3f,%-7.2f,%.7fn“, 123.4567f,123.4567f,123.4567f, 123.456789); 將輸出: 123.456703, 123.457,123.46 ,123.4567890,30,2. 格式輸入函數(shù),格式:scanf(格式控制字符串,數(shù)據(jù)儲(chǔ)存地址項(xiàng)表) 其中: (1)格式控制字符串是用雙引號(hào)括起來的字符串,包括2類字符: 普通字符:要求用戶必須按原樣輸入。 格式轉(zhuǎn)換說明:以”%”開頭后加修飾符和格式符 (2)數(shù)據(jù)存儲(chǔ)地址項(xiàng)表,每一個(gè)地址項(xiàng)是一個(gè)變量的地址(在變量名前加地址運(yùn)算符&),31, 格式修飾符,%*wh/l/L 輸入格式符 * 星號(hào)(賦值抑制符),跳過一個(gè)輸入數(shù)據(jù)項(xiàng)。 W 指定輸入數(shù)據(jù)的數(shù)字符個(gè)數(shù)。 H 輸入short型整數(shù)。 l 輸入long型整數(shù)。 L 輸入long double型整數(shù)。 例如:int i,j,k; scanf(“%d%d%d“, 為變量 i,j,k 輸入數(shù)據(jù)。其中 &i,&j,&k 分別表示變量 i,j,k 的存儲(chǔ)地址。,32,輸入格式符表,格式符 意 義 d或i 以十進(jìn)制形式輸入整數(shù) o 以八進(jìn)制形式輸入整數(shù) x 以十六進(jìn)制形式輸入整數(shù) u 以十進(jìn)制形式輸入無符號(hào)整數(shù) c 輸入字符數(shù)據(jù) s 輸入字符串?dāng)?shù)據(jù) f 以小數(shù)形式輸入浮點(diǎn)數(shù) e 以指數(shù)形式輸入浮點(diǎn)數(shù),33, 格式輸入函數(shù)說明,1. 格式控制字符串之后給出的是變量地址,而不是變量名(除非是指針)。 例如:為整型變量 n 輸入數(shù)據(jù) 寫成: scanf(“%d“, n) 是不正確的 應(yīng)寫成: scanf(“%d“, &n) 2. 在格式控制字符串中,如果有普通字符,則在輸入數(shù)據(jù)時(shí)應(yīng)輸入與這些字符相同的字符。 例如: scanf(“%d,%d“, &i, &j) 正確輸入: 1,2 錯(cuò)誤輸入: 1 2,34, 格式輸入函數(shù)說明,3. 在用“%c“格式入字符時(shí),空白類字符和轉(zhuǎn)義字符都作為有效字符輸入。若要取輸入的一串空白類字符之后的第一個(gè)非空白類字符,可采用格式 “ %c“。 4. 在輸入數(shù)值數(shù)據(jù)和字符串時(shí),遇以下情況,就認(rèn)為該數(shù)據(jù)結(jié)束: 遇空白類字符:空白符、制表符、換行符。 已讀入由寬度所指定的字符數(shù):如 “%4d“ 多至 4 個(gè)數(shù)字符。 對(duì)于輸入數(shù)值數(shù)據(jù),下一個(gè)字符不能構(gòu)成正確的數(shù)據(jù)格式。,35, 格式輸入函數(shù)說明例,例: int i; char c; float x; scanf(“%d%c%f“, scanf(“%3d%*4d%d“, &i, &j) 若輸入字符為:123456 78 則: 變量i為123,j為78。其中數(shù)據(jù) 456 因賦值抑制符*的作用被跳過。,36, 格式輸入函數(shù)說明,5. s 格式用來輸入字符串,輸入的字符序列之后自動(dòng)添加字符串結(jié)束標(biāo)志符0(因此,存儲(chǔ)輸入字符序列的字符數(shù)組的長(zhǎng)度必須比實(shí)際最長(zhǎng)字符串的字符數(shù)多1)。 6. 請(qǐng)注意c格式符和s格式符的區(qū)別。 例: char c100, s100; scanf(“%4c“, c); /* 輸入4個(gè)字符 */ 輸入: abcd 結(jié)果: scanf(“%4s“, s); /* 忽略前導(dǎo)空格 */ 輸入: abcd 結(jié)果:,37, 格式輸入函數(shù)說明,7. e、f 格式用來輸入浮點(diǎn)數(shù)。如有格式修飾符l,則為double型變量地址;含有長(zhǎng)度修飾說明L,則為long double型變量地址;否則為float型變量地址。 例如:float x; double y; long double; scanf(“%f%lf%Lf“,38, 格式輸入函數(shù)例2.5,對(duì)下列輸入,要讓變量i和j值分別為12和234 (1) scanf(“%d,%d“, 正確的輸入:12 0 234,39,2.3 數(shù)據(jù)運(yùn)算, 運(yùn)算符的優(yōu)先級(jí) 優(yōu)先級(jí)用來標(biāo)志運(yùn)算符在表達(dá)式中的運(yùn)算順序。優(yōu)先級(jí)高的先運(yùn)算,優(yōu)先級(jí)低的后運(yùn)算。 如:x-y*z 相當(dāng)于 x-(y*z) 運(yùn)算符的結(jié)合性 在優(yōu)先級(jí)相同情況下,表達(dá)式的計(jì)算順序由結(jié)合性來確定。大多數(shù)運(yùn)算符的結(jié)合性是從左至右,只有單目、三目和賦值運(yùn)算符的結(jié)合性是從右至左的。如:x=a+b-c; a=b=c=1.5;,40,2.3.1 賦值運(yùn)算簡(jiǎn)單賦值運(yùn)算,簡(jiǎn)單賦值形式: 變量 = 表達(dá)式 執(zhí)行過程: (1)計(jì)算表達(dá)式,并將計(jì)算的值賦給變量; (2)如表達(dá)式類型與變量類型不一致,將表達(dá)式值的類型轉(zhuǎn)換成變量的類型; (3) 將表達(dá)式的值賦給變量。 說明:賦值運(yùn)算符的結(jié)合性是“自右至左”。 例1:int k; double x; x = k = 3.5; / k的值為3,x的值為3.0 例2:i=4+(j=7); / 使j值為7,i值為11 例3:i=(j=3)+(k=8); / 使j值為3,k為8,i為11,41,2.3.1 賦值運(yùn)算復(fù)合賦值運(yùn)算,在賦值運(yùn)算符“=”之前加上其他運(yùn)算符,可構(gòu)成復(fù)合運(yùn)算符。 復(fù)合運(yùn)算符: +=、-=、*=、/=、%=、=、&=、=、|= 例:x + = 5.0 等價(jià)于 x = x + 5.0 (將“x +”移到“=”右側(cè)) x * = u + v 等價(jià)于 x = x * (u + v) a + = a - = b + 2 等價(jià)于 a = a+(a=a-(b+2),42,2.3.2 算術(shù)運(yùn)算一般運(yùn)算符,單目運(yùn)算符:+(取正)、-(取負(fù)) 雙目運(yùn)算符:+(加)、-(減)、*(乘)、/(除)、%(求余)說明:(1) 兩個(gè)整數(shù)相除結(jié)果為整數(shù),如: 7/4 = 1 (2) 求余運(yùn)算符(%): 要求參與運(yùn)算的兩個(gè)分量均為整型數(shù)據(jù),如 5 % 3 = 2。求余運(yùn)算所得結(jié)果的符號(hào)與被除數(shù)的符號(hào)相同。 如: -5 % 3 = -2 , 5 % -3 = 2 。 (3)加、減、乘、除和求余運(yùn)算都是雙目運(yùn)算符,結(jié)合性都是從左至右的。 取正(+)、取負(fù)(-)是單目運(yùn)算符,結(jié)合性是從右至左,優(yōu)先級(jí)高于 +、-、*、/、% 等雙目運(yùn)算符。,43,2.3.2 算術(shù)運(yùn)算自增和自減運(yùn)算符,+i 前綴形式,表示在引用變量i之前,先使i加1,以加1后的i值為運(yùn)算結(jié)果; -i 前綴形式,表示在引用變量i之前,先使i減1,以減1后的i值為運(yùn)算結(jié)果; i+ 后綴形式,表示在引用變量i之后,才使i加1,即以增1前的i值為運(yùn)算結(jié)果; i - 后綴形式,表示在引用變量i之后,才使i減1,即以減1前的i值為運(yùn)算結(jié)果。,44,自增/自減運(yùn)算符例,例如: i = 4; j = +i; /* i結(jié)果為5,j的結(jié)果為5 */ i = 4; j = i+; /* i結(jié)果為5,j的結(jié)果為4 */ i = 4; j = -i; /* i結(jié)果為3,j的結(jié)果為3 */ i = 4; j = i-; /* i結(jié)果為3,j的結(jié)果為4 */,45,+和-運(yùn)算符只能用于變量,不能用于常量或表達(dá)式。如 4+ 或 (i+j)+ 都是不合法的。 +和-是帶有副作用的運(yùn)算符。不要在一個(gè)表達(dá)式中對(duì)同一變量多次使用這樣的運(yùn)算符。如i=4,表達(dá)式(i+)+(i+)的值是8不是9,表達(dá)式(+i)+(+i)的值是12不是11。 如i=4,在printf(“%d %dn“, i, i+)中,輸出的結(jié)果可能是4 4(從左到右),也可能是5 4(從右到左)。,自增/自減運(yùn)算符注意事項(xiàng),46,2.3.3 關(guān)系運(yùn)算和邏輯運(yùn)算,關(guān)系運(yùn)算符:、=、=、!= 關(guān)系運(yùn)算符用于對(duì)兩個(gè)值進(jìn)行關(guān)系比較,判定比較條件是否滿足。在中,條件滿足的值為1;條件不滿足為 0。 (1) 優(yōu)先級(jí):、= 高于 =,!= 如: 表達(dá)式 x y = c y) = (c u+v 等價(jià)于 x (u+v) (3) 關(guān)系運(yùn)算符的結(jié)合方向是自左至右的 如: i=1,j=2,k=3 則表達(dá)式 kji 的值為 0,47,2.3.3 關(guān)系運(yùn)算和邏輯運(yùn)算,邏輯運(yùn)算符 &(邏輯與)、|(邏輯或)、!(邏輯非) 其中:運(yùn)算符 & 和 | 是雙目運(yùn)算符,要求有兩個(gè)運(yùn)算分量;運(yùn)算符 ! 是單目運(yùn)算符,只要求一個(gè)運(yùn)算分量。 優(yōu)先級(jí):!、&、| 說明:邏輯運(yùn)算結(jié)果也是一個(gè)邏輯量,即真(用1表示)或假(用0表示)。判定一個(gè)運(yùn)算分量的值為真或假時(shí),以運(yùn)算分量的值不等于零為真,值等于0 為假。,48,2.3.3 關(guān)系運(yùn)算和邏輯運(yùn)算(真值表),邏輯運(yùn)算真值表 a b !a a & b a | b 非0 非0 0 1 1 非0 0 0 0 1 0 非0 1 0 1 0 0 1 0 0 優(yōu)先級(jí): ! (非) 高 算術(shù)運(yùn)算符 關(guān)系運(yùn)算符 & 和 | 賦值運(yùn)算符 低,49,2.3.3 關(guān)系運(yùn)算和邏輯運(yùn)算(例),例如: a b & x y 等價(jià)于: (a b) & (x y) a != b | x != y 等價(jià)于: (a != b) | (x != y) x = 0 | x y 等價(jià)于:(x = 0) | (x y) !a & b | x y & z y) &(zy),50,2.3.3 關(guān)系運(yùn)算和邏輯運(yùn)算(例),在算術(shù)、關(guān)系、邏輯混合運(yùn)算的表達(dá)式中,不同位置上出現(xiàn)的運(yùn)算分量,應(yīng)區(qū)分哪些是算術(shù)運(yùn)算分量、哪些是關(guān)系運(yùn)算分量和哪些是邏輯運(yùn)算分量。 例 如: 2 1 & 4 & 7 1) & 4) & (7 (3 + (!0),1,1,1,4,0,0,51,2.3.3 關(guān)系運(yùn)算和邏輯運(yùn)算(說明),1. 邏輯運(yùn)算的分量也可以是字符型、指針型。以 0或非 0 判定它們的“假”或“真”。 2. “邏輯與”和“邏輯或”運(yùn)算符的性質(zhì): a & b,當(dāng) a 為 0 時(shí),不管 b 為何值(不再 計(jì)算 b),結(jié)果為 0。 a | b,當(dāng) a 為 1 時(shí),不管 b 為何值(不再計(jì)算b),結(jié)果為 1。 例1:a=1, b=2, c=3, c=4, m=5, n=6 (m=ab) & (n=cd) m = 0, n=cd不計(jì)算,n仍為6,52,2.3.3 關(guān)系運(yùn)算和邏輯運(yùn)算(說明),例2: int a = 1, b = 1, c = 1; 計(jì)算 +a | +b & +c ,因+a非0,不再計(jì)算邏輯或右邊表達(dá)式+b & +c。該表達(dá)式計(jì)算后,變量a的值變?yōu)?,而變量b和c的值不變,依舊為1。 3. 注意書寫順序: 例 如: y/x 2 且 x != 0, 應(yīng)寫成: x != 0 & y/x 2 因?yàn)?,?dāng) x 為 0 時(shí),不會(huì)計(jì)算 y/x。 而寫成: y/x 2 & x != 0 是不正確的, 因?yàn)楫?dāng) x 為 0 時(shí),不能計(jì)算 y/x。,53,2.3.3 關(guān)系運(yùn)算和邏輯運(yùn)算(示例),例:判別某一年是否閏年。 閏年條件:每四年一個(gè)閏年,但每100年少一個(gè)閏年,每400年又增加一個(gè)閏年。 (year能被4整除,不能被100整除) 或 (year能被400整除) 用邏輯表達(dá)式可描述閏年條件: (year%4 = 0 & year%100 != 0) | year%400 = 0 可簡(jiǎn)化為: (year%4 = 0 & year%100) | year%400 = 0,54,2.3.4 條件運(yùn)算,形式: 表達(dá)式1 ?表達(dá)式2 :表達(dá)式3 執(zhí)行過程: (1) 計(jì)算表達(dá)式1的值; (2) 如果表達(dá)式1的值非0(真),則計(jì)算表達(dá)式2,并作為條件運(yùn)算的結(jié)果(不計(jì)算表達(dá)式3); (3) 如果表達(dá)式1的值為0(假),則計(jì)算表達(dá)式3,并作為條件運(yùn)算的結(jié)果(不再計(jì)算表達(dá)式2)。 例如:x y ? x : y 如果 x y 為真,則條件運(yùn)算取x值,否則取y值。 說明:條件運(yùn)算符(?:)優(yōu)先級(jí)高于賦值運(yùn)算符,低 于邏輯運(yùn)算符、關(guān)系運(yùn)算符和算術(shù)運(yùn)算符。,55,2.3.4 條件運(yùn)算(結(jié)合性),條件運(yùn)算符的結(jié)合性為“自右至左”。 例 如: max = x y ? x : y + 1 等價(jià)于: max = (x y) ? x : (y + 1) 例 如: x y ? x : u v ? u : v 等價(jià)于: x y ? x : (u v ? u : v) 條件運(yùn)算三個(gè)運(yùn)算分量的數(shù)據(jù)類型可以各不相同。語言約定,類型低的向類型高的轉(zhuǎn)換。 如: i j ? 2 : 3.5 當(dāng) i j 時(shí),條件表達(dá)式的值為2.0;否則為3.5。,56,2.3.5 其他運(yùn)算符 逗號(hào)運(yùn)算,形式:表達(dá)式1,表達(dá)式2, ,表達(dá)式n 執(zhí)行過程: (1) 從左至右依次計(jì)算各個(gè)表達(dá)式; (2) 最后一個(gè)表達(dá)式的值作為整個(gè)逗號(hào)表達(dá)式運(yùn)算的結(jié)果。 例如:x = (i = 3, i * 2) 結(jié)果:使i等于3,x等于6。 說明:1.逗號(hào)運(yùn)算目的是將多個(gè)表達(dá)式“串連”起來, 分別得到各表達(dá)式的值。 2.逗號(hào)運(yùn)算常用于for循環(huán)結(jié)構(gòu),用于給多個(gè) 變量賦初值。 3.逗號(hào)運(yùn)算符的優(yōu)先級(jí)最低。,57,2.3.5 其他運(yùn)算符sizeof 運(yùn)算,形式:sizeof (類型名) 或 sizeof 表達(dá)式 作用:給出運(yùn)算對(duì)象在內(nèi)存中所占用的字節(jié)數(shù)。 例1: int x=1; float y=2; double z=4; printf(“int=%d, float=%d, double=%d“, sizeof x, sizeof (float), sizeof z); 結(jié)果:int=4, float=4, double=8 例2: int a = 1,3,5,7,9 ; float b; printf(“ %d n“, sizeof b); printf(“ %dn“, sizeof a / sizeof(int); 結(jié)果:4 5,58,2.3.5 其他運(yùn)算符 位運(yùn)算(只要求了解),位運(yùn)算的運(yùn)算分量只能是整型或字符型數(shù)據(jù),位運(yùn)算把運(yùn)算對(duì)象看作是由二進(jìn)位組成的位串信息,按位完成指定的運(yùn)算,得到位串信息結(jié)果。 位運(yùn)算符: & (位與) | (位或) (位異或) (位反) 說明:位反是單目運(yùn)算符,其余均為 雙目運(yùn)算符。 優(yōu)先級(jí): 、 & 、 、 |,59,位運(yùn)算 位與運(yùn)算(&),位與規(guī)則: 0 & 0 = 0 0 & 1 = 0 1 & 0 = 0 1 & 1 = 1 即:同為 1 的位,結(jié)果為 1,否則結(jié)果為 0。 例如:53 & 22的結(jié)果為20 0000000000110101 (十進(jìn)制53,八進(jìn)制為65) & 0000000000010110(十進(jìn)制22,八進(jìn)制為26) 0000000000010100 (十進(jìn)制20,八進(jìn)制為24) 按位與運(yùn)算典型用法: 1. 取一個(gè)位串的某幾位 例如,截取x的最低7位:x & 0177 2. 保留變量某幾位,其余位置0 例如,保留x最低6位:x = x & 077,60,位運(yùn)算位或運(yùn)算(|),位與規(guī)則: 0 | 0 = 0 0 | 1 = 1 1 | 0 = 1 1 | 1 = 1 即:只要有1個(gè)是1的位,結(jié)果為1,否則為0。 例如:53 | 22的結(jié)果為55 0000000000110101 (十進(jìn)制53,八進(jìn)制為65) | 0000000000010110 (十進(jìn)制22,八進(jìn)制為26) 0000000000110111 (十進(jìn)制20,八進(jìn)制為67) 按位或運(yùn)算典型用法: 將一個(gè)位串的某幾位置成1。 例如:將變量x的最低4位設(shè)置為1,其余位不變: x = 017 | x,61,位運(yùn)算位異或運(yùn)算(),位與規(guī)則: 0 0 = 0 0 1 = 1 1 0 = 1 1 1 = 0 即:相應(yīng)位的值相同的結(jié)果為0,不相同的結(jié)果為1。 例如:53 22的結(jié)果為35 0000000000110101 (十進(jìn)制53,八進(jìn)制為65) 0000000000010110 (十進(jìn)制22,八進(jìn)制為26) 0000000000100011 (十進(jìn)制35,八進(jìn)制為43) 按位異或運(yùn)算典型用法: 將一個(gè)位串某幾位取反。 例如:將變量x的最低4位取反,其余位不變: x = 017 x,62,位運(yùn)算位反運(yùn)算(),位與規(guī)則: 0 = 1 1 = 0 即:0取反結(jié)果為1,1取反為0。 例如: 53 的結(jié)果為 -54 0000000000110101 (十進(jìn)制53,八進(jìn)制為65) 1111111111001010 (十進(jìn)制-54 ,八進(jìn)制為177712) 補(bǔ)碼 = 反碼 + 1 反碼 = 原碼 即:原碼 = (補(bǔ)碼 1)= (1111111111001010 1 ) = 1111111111001001 = 0000000000110110 = 54 所以:補(bǔ)碼1111111111001010 的十進(jìn)制是 -54,63,位運(yùn)算移位運(yùn)算,將整型數(shù)據(jù)或字符型數(shù)據(jù)作為二進(jìn)位的位串,整體向左或向右移動(dòng)。 (1) 左移運(yùn)算 x y x右移y位,每右移1位相當(dāng)于除以2 例如: 12 2 結(jié)果為 3 說明:移位運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符,高于關(guān)系運(yùn)算符。,64,2.4 表達(dá)式,表達(dá)式:由運(yùn)算符和運(yùn)算分量構(gòu)成。 表達(dá)式的值:按運(yùn)算符的優(yōu)先級(jí)和結(jié)合性的要求進(jìn)行運(yùn)算,最終得到的結(jié)果。 2.4.1 表達(dá)式分類 算術(shù)表達(dá)式。如,x + 1.0/y - z%5 關(guān)系表達(dá)式。如,x y
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 貴州大學(xué)《電電子基礎(chǔ)訓(xùn)練》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴州財(cái)經(jīng)大學(xué)《人文地理學(xué)基本問題》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年陜西省建筑安全員考試題庫
- 貴陽信息科技學(xué)院《管理學(xué)精要》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣州珠江職業(yè)技術(shù)學(xué)院《組合與運(yùn)籌》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025海南省建筑安全員B證考試題庫及答案
- 2025福建省安全員考試題庫附答案
- 廣州幼兒師范高等??茖W(xué)校《高級(jí)聽說》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣州新華學(xué)院《量子力學(xué)(Ⅱ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣州衛(wèi)生職業(yè)技術(shù)學(xué)院《曲式與作品分析Ⅰ》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年中國陶瓷碗盆市場(chǎng)調(diào)查研究報(bào)告
- ISO 56001-2024《創(chuàng)新管理體系-要求》專業(yè)解讀與應(yīng)用實(shí)踐指導(dǎo)材料之22:“8運(yùn)行-8.1運(yùn)行策劃和控制”(雷澤佳編制-2025B0)
- 單位網(wǎng)絡(luò)安全攻防演練
- 神經(jīng)外科基礎(chǔ)護(hù)理課件
- 2024中國儲(chǔ)備糧管理集團(tuán)限公司招聘700人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 內(nèi)蒙古赤峰市2023-2024學(xué)年高一上學(xué)期期末考試物理試題(含答案)
- 建筑工程機(jī)械設(shè)備安全技術(shù)操作規(guī)程
- 2024年中國心力衰竭診斷和治療指南2024版
- HCCDP 云遷移認(rèn)證理論題庫
- 臺(tái)大公開課--《紅樓夢(mèng)》筆記剖析
- 底總結(jié)報(bào)告2017年初開場(chǎng)計(jì)劃策劃模版圖文可隨意編輯修改課件
評(píng)論
0/150
提交評(píng)論