1. 程式人生 > >C++學習之分支語句和邏輯運算子(if語句、邏輯表示式、字元函式庫(cctype)和?:運算子)

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