4、表示的,這主要是由于浮點(diǎn)數(shù)在計(jì)算機(jī)內(nèi)部特殊的存儲(chǔ)格式引起的,例如:#includemain(){doublea=123456789.9*9,b=1111111109.1;doublec=0.1+0.2;printf("c==0.3%d",c==0.3);printf("a==b%d",a==b);}【例5.4】比較兩個(gè)浮點(diǎn)數(shù)是否相等的正確方法#include#include#defineYUZHI1e-6main(){doublea=1234567
5、89.9*9,b=1111111109.1;doublec=0.1+0.2;printf("a=%.9f,b=%.9f",a,b);printf("a==b%d",a==b);printf("a==b%d",fabs(a-b)<=YUZHI);printf("c==0.3%d",c==0.3);printf("c==0.3%d",fabs(c-0.3)<=YUZHI);}第20頁說明:應(yīng)該避免直接比較兩個(gè)浮點(diǎn)數(shù)是否相等,而是通過看兩個(gè)浮點(diǎn)數(shù)差的絕對值是否小于某個(gè)很小的數(shù)來達(dá)到判斷兩個(gè)浮點(diǎn)
6、數(shù)是否相等。二、邏輯運(yùn)算符和邏輯表達(dá)式1.邏輯運(yùn)算符(1)邏輯運(yùn)算符的分類C語言為用戶提供了3個(gè)邏輯運(yùn)算符:!(邏輯非)、&&(邏輯與)和
7、
8、(邏輯或)。(2)邏輯運(yùn)算符的優(yōu)先級(jí)其中!(邏輯非)是單目運(yùn)算符,在C語言所有運(yùn)算符中優(yōu)先級(jí)排第二(所有的單目運(yùn)算符優(yōu)先級(jí)都是第二)。&&(邏輯與)的優(yōu)先級(jí)高于
9、
10、(邏輯或),
11、
12、的優(yōu)先級(jí)高于?:(條件運(yùn)算符)。(3)邏輯運(yùn)算符的結(jié)合性其中!(邏輯非)的結(jié)合性是從右至左(所有的單目運(yùn)算符的結(jié)合性都是從右至左),&&和
13、
14、的結(jié)合性是從左至右。2.邏輯表達(dá)式的基本形式!有
15、值表達(dá)式1,有值表達(dá)式1&&有值表達(dá)式2,有值表達(dá)式1
16、
17、有值表達(dá)式2。邏輯表達(dá)式的結(jié)果見下表:有值表達(dá)式1有值表達(dá)式2!有值表達(dá)式1有值表達(dá)式1&&有值表達(dá)式2有值表達(dá)式1
18、
19、有值表達(dá)式2非0非0011非000010非010100100說明:實(shí)際編程時(shí),總是用邏輯運(yùn)算符去連接關(guān)系表達(dá)式。3.邏輯運(yùn)算符的使用(1)帶有邏輯運(yùn)算符的復(fù)雜表達(dá)式計(jì)算【例5.5】以下程序的運(yùn)行結(jié)果是。#includemain(){第20頁inta,b,d=241;a=d/100%9;b=(-1)&&(-1);pr
20、intf("%d,%d",a,b);}A)6,1B)2,1C)6,0D)2,0【課內(nèi)思考題5.2】若a=2,b=4,則表達(dá)式!(x=a)
21、
22、(y=b)&&0的值是?!菊n內(nèi)思考題5.3】inta=3,b=4,c=5;,則以下表達(dá)式!(a+b)+c-1&&b+c/2的值為。(2)短路計(jì)算對于邏輯表達(dá)式“表達(dá)式1&&表達(dá)式2&&…&&表達(dá)式n”而言,若在計(jì)算過程中發(fā)現(xiàn)表達(dá)式m的值為0,根據(jù)&&的特點(diǎn),整個(gè)邏輯表達(dá)式的結(jié)