国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++教程:C++ if語句講解

2020-05-23 14:28:30
字體:
來源:轉載
供稿:網友
對于可能發生的事情,我們平時經常會說“如果……,那么……”。語文里,我們叫它條件復句。“如果”之后的內容我們稱為條件,當條件滿足時,就會發生“那么”之后的事件。我們來看這樣一句英語:If mark>90, cout <<”GOOD!” <<endl.把它翻譯成中文就是:如果分數大于90,則輸出GOOD。

其實在程序設計中,也是用“如果”來描述可能發生的情況的。它和剛才的那句英語很相似,具體的語法格式是:
C++教程:C++ if語句講解

C++教程:C++ if語句講解
我們把若干句語句放在一個大括號中,稱為語句塊。運行到該if語句,當條件滿足時,就會執行語句塊內的內容。我們也可以用流程圖(圖4.1.1)來表示if語句。請注意,if語句的結束是沒有分號的,分號只是屬于語句塊中的語句。

一、條件——關系運算

當我們判斷一個條件的時候,依賴于這個條件是真是假。說到真和假,我們不難想到布爾型數據(參見3.1),因為它就是分別用0和1來表示真和假。顯然條件的位置上應該放置一個布爾型的數據。然而,光靠死板的0和1兩個數仍然無法描述可能發生著變化的各種情況。那么我們如何讓電腦來根據實際情況做出判斷呢?

這里我們要引入關系運算。之前的加減乘除和取余數之類的操作,結果都是整型或實型數據。而關系運算的結果則是布爾型數據,也就是說它們的結果只有兩種——真或假。

所謂關系運算,是判斷操作符兩邊數據的關系。這些關系一共有六種,分別是:等于、大于、小于、大于等于、小于等于、不等于。如下表所示:
C++教程:C++ if語句講解

當操作符兩邊的數據符合操作符對應的關系時,運算結果為真,否則為假。比如5>1的結果是1(真),’a’==’a’的結果也是1(真);而3<=2的結果為0(假)等等。特別要注意,==和=是兩個不同的操作符,前者是判斷操作符兩邊數據的關系,后者是把右面的表達式的結果賦值給左邊。

下面我們來看一段程序:(程序4.1.1)
#include "iostream.h"
int main()
{
   int a,b;
   cout <<"請輸入兩個數:";
   cin >>a >>b;
   if (a>b)//如果a比b大,則將兩個數交換
   {
      int temp;//創建一個臨時變量
      temp=a;
      a=b;
      b=temp;
   }
   cout <<a <<" " <<b <<endl;//將兩個數從小到大輸出
   return 0;
}
第一次運行結果:
請輸入兩個數:1 5
1 5
第二次運行結果:
請輸入兩個數:3 2
2 3

算法時間:交換
交換是程序設計中最基礎最常用的一種操作。它的算法在現實生活中也有著形象的操作。交換兩個變量里的數據就好像交換AB兩個碗中的水。我們必須再拿一個碗來(臨時變量),將A碗里面的水先倒到這個臨時的碗里,再將B碗的水倒到空的A碗里,最后把臨時碗里的水再倒回B碗,那么就完成了這個工作。對照著這個過程去閱讀代碼是不是有些理解了呢?至于這個算法的代碼,也是非常好記的。記住把臨時變量放在首位,然后把任一變量放在等號的右邊,下一句語句開頭的必然也是這個變量。簡單地記就是首尾相連。(程序4.1.1的代碼中用相同的顏色表示出“首尾相連”。)
這個程序完成的工作是將兩個無序的整數從小到大地輸出。即如果第一個數比第二個數大,先交換再輸出,否則直接輸出。

二、條件——邏輯運算

學校評三好學生,候選人必須要德智體全面發展才能夠評上;學校開運動會,運動員只要在某一個項目上是全校第一就能夠獲得冠軍。現實生活中,有些條件會很嚴格,要數項同時滿足時才算符合條件;而有些條件又會很松,只要符合其中某一項就算符合條件了。在程序設計中,我們也會遇到這樣的問題。

平時,我們往往是用“并且”和“或”兩個詞來描述這些情況的。而在程序設計中,我們用邏輯運算來描述。我們平時稱它們“與”(相當于并且)、“或”、“非”。“邏輯與”的操作符是&&,“邏輯或”的操作符是||,“非”的操作符是!。下面三個真值表說明了各邏輯運算的結果。
C++教程:C++ if語句講解

上面兩表的第一行和第一列分別是邏輯操作符兩側的值,右下角帶有灰色底紋的四格是經過運算后的結果。
C++教程:C++ if語句講解

如果我們用集合A和集合B分別來描述兩個不相同的條件A和B,那么A&&B表示要滿足集合A與集合B的交集;A||B表示要滿足集合A與集合B的并集;!A表示要滿足集合A的補集。

在上一章的3.3簡單表達式中,我們提到了運算的次序。在程序設計中,我們把這種運算的次序稱作操作符(Operator)的優先級。那么,關系操作符和邏輯操作符的優先級是怎么樣的呢?

和簡單表達式一樣,括號的優先級仍然是最高的。無論什么情況都應該先從左到右地計算括號內的結果。當算術操作符、關系操作符和邏輯操作符處于同一級的括號中時,則分別從左向右地依次進行邏輯非運算、算術運算(遵循算術運算的優先級)、關系運算、邏輯與運算和邏輯或運算。(記作“不算關羽活”)。

下面我們來實踐一下,看一段程序:(程序4.1.2)
#include "iostream.h"
int main()
{
   int mark;
   cout <<"請輸入成績(0~100): ";
   cin >>mark;
   if (mark>=80 && mark <=100) cout <<"Good!" <<endl;
   if (mark>=60 && mark <80) cout <<"So so" <<endl;
   if (mark>=0 && mark <60) cout <<"Please work harder!" <<endl;
   if (mark<0 || mark >100) cout <<"ERROR!" <<endl;
   return 0;
}
第一次運行結果:
請輸入成績(0~100):100
Good!
第二次運行結果:
請輸入成績(0~100):75
So so
第三次運行結果:
請輸入成績(0~100):59
Please work harder!
第四次運行結果:
請輸入成績(0~100):105
ERROR!

我們可以看到,將關系運算和邏輯運算配合使用,可以將數值有效地分段。以上這段程序的功能就是按照不同段的數值輸出不同的結果,如果輸入的數值超出正常的取值范圍,則輸出出錯信息。

算法時間:糾錯
熟悉電腦軟件的同學都知道,不少軟件或程序有時候會有漏洞(Bug),使得程序的安全性或穩定性受到影響。而產生這些漏洞的部分原因就是程序員在設計程序時有所疏漏,忘記了去考慮一些可能引起錯誤的特殊情況。我們把這些可能引起程序異常的情況稱為臨界情況。比如在a/b中,b=0就是一種臨界情況。如果不考慮到這種情況,則可能導致除數為零而使整個程序崩潰。我們學會了if語句以后就能夠從一定程度上避免一些可以預知的錯誤,把那些臨界情況引入糾錯程序。(比如輸出出錯信息,或及時中止程序)

三、&&和||的妙用

有時候我們做數學題目會遇到這樣的問題——(1+5*8)/6*0/(5/6+2),當我們發現整個式子是乘式,并且有一個乘數為0的時候,則會不再做更多的計算,把結果脫口而出。因為無論后面的乘數是什么,都無法改變結果了。

根據真值表我們知道,在邏輯與中,只要有一個假則整個表達式的結果為假;在邏輯或中,只要有一個是真則整個表達式的結果為真。我們發現邏輯與、邏輯或和上面所說的例子有著相似之處,那么電腦會不會像我們一樣,不再做更多無所謂的計算呢?

答案是肯定的。即在一個或多個連續的邏輯與中,一旦出現一個假,則結果為假,處于該位置以后的條件不再做更多判斷;在一個或多個連續的邏輯或中,一旦出現一個真,則結果為真,處于該位置以后的條件也不再做更多判斷。
比如: if (m!=0 && n/m<1)
{
cout <<”OK” <<endl;
}
當m=0時,電腦不會去嘗試用n/m了,而是直接跳過整句語句。這樣,我們就能夠避免除數為零的錯誤了。 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 商丘市| 新蔡县| 万盛区| 石棉县| 渭源县| 射阳县| 益阳市| 青州市| 定南县| 东源县| 分宜县| 灵川县| 宁强县| 平顶山市| 个旧市| 马公市| 湟源县| 遂宁市| 耒阳市| 高安市| 宁强县| 六安市| 正蓝旗| 武功县| 井研县| 清涧县| 昌黎县| 二手房| 镇坪县| 陕西省| 辽阳县| 藁城市| 安吉县| 乐亭县| 泾阳县| 南靖县| 温州市| 黄石市| 道孚县| 六盘水市| 河北区|