官术网_书友最值得收藏!

3.5.1 組合關系和邏輯操作符

通過進一步考察圖3-4,我們再次討論運費計算問題。第一個要做出的程序判斷是客戶是否已經購買超過$100.00的商品。如果這是真的,那么下一個判斷是客戶是否需要陸運。如果購買額不超過$100.00,那么程序將進行其他選擇。如果購買額是$100.00或者更多,并且客戶住在美國而且愿意使用陸運,那么送貨是免費的。但是,如果客戶偏愛空運,那么就要回答其他一些問題。如果客戶的包裹重量超過50磅,那么運費取決于客戶是否住在美國。運費變化取決于商品的重量和送貨目的地,圖3-5說明了如何使用復合條件來簡化類似于這種情況的判斷結構數目。

3.5.1.1 邏輯操作符回顧

如第2章所討論的那樣,盡管有許多可用的邏輯操作符,但我們只需要使用其中的3個。也就是用兩個&符號(&&)表示的AND操作符,用兩個豎線(||)表示的OR操作符,以及用感嘆號(!)表示的NOT操作符。

一個使用AND操作符的復合條件是true,當且僅當通過&&連接的兩個條件都是true。一個使用OR操作符的復合條件是true,除非通過||連接的兩個條件都是false。NOT操作符簡單地意味著:如果表達式是true,那么!(表達式)是false;而且如果表達式是false,那么!(表達式)是true。

圖3-5 使用復合條件

為了說明邏輯操作符和復合條件的使用,我們編寫了一個工資程序,為在一周內工作超過40小時并且每小時收入少于$20.00的雇員支付加班費。其代碼在例3.6中顯示。

例3.6 加班費 這個例子計算雇員的每周工資。如果雇員的工作時間少于40小時,那么工資只是把工作小時數與雇員的時薪相乘。有些雇員有資格獲取超出40小時之外工作時間的加班費。然而,如果雇員的時薪超過$20.00,那么他沒有資格獲取加班費。這也許不是在所有的州都是合法的,但是它可用于舉例說明復合條件的使用。如果一個雇員有資格獲取加班費,那么它將按常規時薪的1.5倍計算。

第9行展示了復合條件,它代替嵌套的if...else結構并且使程序容易運行和簡單化。

例3.7提供邏輯操作符和復合條件的另一個樣例。

例3.7 計算運費 在這個例子中,我們編寫運費計算程序。圖3-5展示購買額超過$100.00商品的客戶的各種選擇,但是公司可能根據其他數量收取不同的運費。在下面的例子中,我們使用復合條件為總額$1.00~$24.99、$25.00~$49.99、$50.00~$74.99和$75.00~$99.99的商品分別賦予不同的運費。在這個例子中,假定客戶住在美國而且選擇陸運。類似代碼可用于許多其他選擇。

這個程序運行得很好,然而是否有更好的方法來編寫包括許多選項的程序代碼呢?有。我們將在3.6節討論處理這類結構的問題。

復合條件的最后一個例子將使用OR操作符。在例3.7所示代碼的基礎上,例3.8為有特殊優惠碼的客戶增加一項免運費選項。

例3.8 增加免運費選項 為例3-7添加代碼,從而為錄入特殊優惠碼FREESHIP的客戶提供免運費服務。這里只重復例3.7在第5~19行上的函數shipCost()。通過在第6行之后增加一行代碼并且在第16行包括一個含有OR操作符的復合條件,可以為使用FREESHIP碼的客戶提供免運費服務。

第16行讓購買額超過$100.00商品或者錄入正確優惠碼的客戶免除運費。因為計算機按順序執行命令,所以當到達第17行時不管ship的值是什么,如果在第16行上的復合條件是true,那么ship的值就是0.00,而不管客戶是錄入了正確的免運費碼還是購買商品額超過$100.00。

3.5.1.2 關于語法的說明

關于編寫if語句的復合條件有以下一點說明。語法如下:

每次必須寫一個完整的條件。例如,不能寫成這樣:

也不能寫成這樣:

正確的語法如下:

這個完整的復合條件必須用圓括號括起來,包括其中的每個條件、變量、操作符和操作數。

3.5.1.3 使用AND和OR

學生經常想知道是否有關于何時使用AND操作符和何時使用OR操作符的特殊規則。在大多數情況下,只要小心編寫那么無論使用哪一個操作符都能夠正常工作。例如,若要把一個用戶的選擇限制在整數6、7、8和9,你可以使用AND操作符指定任何比5大而又比10小的數是可接受的。在JavaScript中,可以寫成這樣:

只有當num是6、7、8或9時,這個條件才是true。然而,你也可以把這個條件說成:任何小于或等于5,或者大于或等于10的整數是false。在JavaScript中,這種描述將使用NOT和OR操作符寫成這樣:

這兩種方法都會產生相同的結果。使用其中一種方法而不使用另一種方法的理由取決于程序的其他元素。例3.9在一種情況下使用AND操作符而在另一種情況下使用OR操作符將產生相同的結果。

例3.9 在復合條件中使用邏輯操作符 下列程序與例3.6顯示的程序做相同的事情,但是它使用另一個復合條件。這里的程序以注釋形式再次寫出例3.6使用的選擇語句,以便于比較這兩個選擇語句的區別:

通常,下面兩條語句生成相同的結果:

3.5節檢查點

3.20 要使下列條件為true,則要求num具有什么整數值?

(num>3)&&(num<8)

3.21 要使下列條件為true,則要求num具有什么值?

(num<12)||(num>8)

3.22 假定變量num=4,以下每個表達式是true還是false?

a)((2*num)+1==3)&&(num>2)

b)!(2*num==0)||(num+1==5)

3.23 編寫程序,它將告訴用戶天氣是否足夠冷需要穿夾克。程序提示用戶錄入一個溫度,如果錄入的溫度低于50,程序將顯示Yes;如果錄入的溫度高于70,則顯示No;而如果錄入的溫度在50~70之間,則顯示Maybe。程序應該使用一個復合條件。

主站蜘蛛池模板: 五家渠市| 灵宝市| 赞皇县| 喜德县| 赤城县| 万州区| 聊城市| 龙山县| 铜鼓县| 栾城县| 田林县| 桐乡市| 乐亭县| 绥江县| 平邑县| 宁晋县| 开江县| 宁武县| 莱芜市| 安达市| 宜君县| 祁门县| 彩票| 宁远县| 迁安市| 阿城市| 米脂县| 宁德市| 石棉县| 台南县| 宝应县| 吉首市| 嵩明县| 临江市| 微山县| 甘洛县| 台山市| 平远县| 高安市| 康保县| 泾阳县|