C++學習之分支語句和邏輯運算子(if語句、邏輯表示式、字元函式庫(cctype)和?:運算子)
1.當C++程式必須決定是否執行某個操作時,通常使用if語句來實現操作。if有兩種格式:if和if else.
if(test-condition)
statement
如果測試條件為true,則if語句將載入程式執行語句或語句塊;如果條件是false,程式將跳過這條語句或語句塊。
例如:計算輸入中的空格和字元總數,則可以在while迴圈中使用cin.get(char)來讀取字元,然後使用if語句判別空格字元並計算其總數。
#include<iostream> int main() { using std::cin; using std::cout; using std::endl; char ch; int spaces = 0; int total = 0; cin.get(ch); while (ch != '.') { if (ch == ' ') { ++spaces; } ++total; cin.get(ch); } cout << spaces << " spaces, " << total; cout << "characters total in sentence" << endl; return 0; }
當且僅當ch為空格是,++spaces才被執行。
2.if else語句
if語句讓程式決定是否執行特定的語句或語句塊,而if else語句則讓程式決定兩條語句或語句塊中的那一條,這種語句對於選擇其中一條操作很有用。
if(test-condition)
statement1
else
statement2
如果測試條件為true或者非零,則程式將執行statement1跳過statement2;否則相反。
例如,假設要通過對字母進行加密編碼來修改輸入的文字(換行符不變)。(以下程式將字元都進行加1處理換行符除外)
#include<iostream> int main() { char ch; std::cout << "Type, and I shall repet.\n"; std::cin.get(ch); while (ch != '.') { if (ch == '\n') std::cout << ch; else { std::cout << ++ch; } std::cin.get(ch); } std::cout << "\nPlease excuse the slight confusion.\n"; return 0; }
3.if else if else 語句——使計算機程式提供了兩個以上的選擇。
直接上例子:猜數字(猜中程式結束)
#include<iostream> const int FAVE = 25; int main() { using namespace std; int n; cout << "Enter a number int the range 1-100 to find"; cout << "my favorite number: "; do{ cin >> n; if (n < FAVE) cout << "Too low --- guess again"; else if (n > FAVE) cout << "Too high---guess again"; else cout << FAVE << " is right!\n"; } while (n != FAVE); return 0; }
4.邏輯表示式
4.1邏輯OR運算子:||——C++可以採用邏輯OR運算子(||),將兩個表示式組合在一起,當兩個條件有一個或全部滿足某個要求的時候,則得到表示式的值為true;否則表示式的值為false。
舉個例子:
i++<6||i==j;
這裡由於||的優先順序比關係運算符低,所以不需要再這些表示式中使用括號。假設i原來的值為10,則在對i和j進行比較時,i的值將為11.另外如果左側的表示式為true則c++將不會去判定右側的表示式,因為只要有一個表示式為true,則整個邏輯表示式為true
4.2.1邏輯AND運算子:&&——也是將兩個表示式組合成一個表示式。僅當原來的兩個表示式都為true時,得到的表示式的值才為true。舉兩個例子:
5==5&&4==4;//true because both expressions are true
5==3&&4==4;//false because both expressions are flase
5>8&&5<2;//flase because both expressions are flase
4.2.2用&&來設定取值範圍——&&運算子還允許建立一系列if else if else語句,其中每種選擇都對應與一個特定的取值範圍。
例如以下程式:(另外,他還演示了一種用於處理一系列訊息的技術。與char指標變數可以通過指向一個字串的開始位置來表示字串一樣,char指標陣列也可以表示一系列字串,只要將每個字串的地址賦給個元素)
#include<iostream>
const char *qualify[4] = {
"10,000 - meter race.\n",
"mud tug-of-war.\n",
"masters came jousting.\n",
"pie-throwing festival.\n"
};
int main()
{
using namespace std;
int age;
cout << "Enter your age in years:";
cin >> age;
int index;
if (age > 17 && age < 35)
index = 0;
else if (age >= 35 && age < 50)
index = 1;
else if (age >= 50 && age < 65)
index = 2;
else
index = 3;
cout << "You qualify for the" << qualify[index];
return 0;
}
4.3邏輯NOT運算子:!——該運算子將它後面的表示式的真值取反。(!的優先順序高於所有的關係運算符和算術運算子)
5.字元函式庫cctype——C++C語言繼承了一個與字元相關的、非常方便的函式軟體包,他可以簡化諸如確定字元是否為大寫字母、數字、標點符號等工作,這些函式的原型是在標頭檔案cctype中定義的。例如ch是一個字母,則isalpha(ch)函式返回一個非零值,否則返回0.同樣如果ch是標點符號(如逗號或者句號),函式ispunct(ch)將返回true。(這些函式的返回型別為int,而不是bool,但通常bool轉換讓你能夠將它們視為bool型別)
例如:這些函式比使用AND和OR運算子更方便。可入,下面是使用AND和OR來測試字元ch是不是字母字元的程式碼:
if((ch>='a'&&ch<='z')||(ch>='A')&&(ch<='Z'));
//與使用isalpha()相比:
if(isalpha(ch));
6.?:運算子——
expressional?expression:expressions
如果expression1為true,則整個條件表示式的值為expression2的值;否則,整個表示式的值為expression3的值。
5>3?10:12;//5>3is true ,so expression value is 10
3==9?25:18;//3==9 is flase,so expression value if 18