六、判斷(一) 1、關係運算符 1)每一個關係運算符得出的結果都是一個布爾類型值(true、flase或真、假或1、0) 關係運算符 說明 關係運算符 說明 > 大於 >= 大於等於 < 小於 <= 小於等於 == 等於 != 不等於 #include <iostream> int main() { ...
六、判斷(一)
1、關係運算符
1)每一個關係運算符得出的結果都是一個布爾類型值(true、flase或真、假或1、0)
關係運算符 | 說明 | 關係運算符 | 說明 |
---|---|---|---|
> | 大於 | >= | 大於等於 |
< | 小於 | <= | 小於等於 |
== | 等於 | != | 不等於 |
#include <iostream>
int main()
{
int a{ 500 };
int b{ 1000 };
bool c = a == b; //false
std::cout << c <<std::endl;
c = (a <= b); //true
std::cout << c << std::endl;
}
2)關係運算符註意事項
①A=B是將B的值賦予給 A(把B記憶體中的內容,放入A的記憶體中);A==B是將A和B進行比較
不為0即為true
②註意bool和int之間的轉化,所有不為0的bool值一律為true,包括負數
#include <iostream>
int main()
{
bool bA{ bool(100) }; //非0即為1
int nA{ bA };
std::cout << nA << std::endl; //1
}
3)將輸出轉化為bool類型(true或flase)
std::boolalpah設置以後,所有的bool類型均顯示位false和true,而不是顯示為數字,浮點數也可以做比較
#include <iostream>
int main()
{
bool A{ bool(100) };
bool B{ 0 };
std::cout << std::boolalpha; //輸出在轉化為bool類型
std::cout << A << std::endl;
std::cout << B << std:: endl;
std::cout << (A == B) << std::endl;
}
2、if語句
1)if語法
//語法1
if(bool表達式)語句;
//語法2
if(bool表達式) //條件滿足後,括弧內的語句都執行;條件不滿足直接跳出語句或語句塊
{
語句;
語句;
}
//常見錯誤語句
if(bool表達式);語句; //if語句第一個分號結束後,剩下語句全部執行
註:if只對緊跟著的語句負責
2)if語句拓展
if(a=b){} 取決於b的值,若b為0,則不執行,若b為非0,則執行。即if(a=b)相當於if(b)
//因失誤,將a==b寫做了a=b,就相當於if(b),根據b的值進行判斷,b為0則為假
if(a=b)
{
語句;
}
3、if...else...語句
1)if...else...語法
//語法一
if(bool 表達式) 語句1; //條件為真,執行語句1;條件為假,執行語句2
else 語句2;
//語法二
if(bool 表達式)
{
語句;
語句;
}
eles
{
語句;
語句;
}
2)if語句嵌套使用
//嵌套語法一
if(bool A)
if(bool B)
if(bool C)
語句;
//嵌套語法二
if(a)
if(b)
語句
else
語句
else
if(c)
語句
3)案例
設計一個程式,要求用戶輸入一個字元,判斷這個字元是數字還是字母,如果是字母,那麼是大寫字母還是小寫字母;如果是小寫字母,那麼把這個字母變成大寫字母,反之變為小寫字母,同時要把這個判斷結果顯示出來(參考ASCII表)
#include <iostream>
int main()
{
char userIn;
std::cout << "請輸入一個字元:";
std::cin >> userIn;
if (userIn > 47)
{
if (userIn < 58) std::cout << "\n你輸入的是一個數字";
if (userIn > 64)
{
if (userIn < 91)
{
std::cout << "你輸入的是大寫字母" << userIn << "我們給他轉化成了小寫" << char(userIn + 32);
}
if (userIn > 96)
{
if (userIn < 123)
{
std::cout << "你輸入的是小寫字元" << userIn << "我們給他轉化成了大寫" << char(userIn - 32);
}
}
}
}
}
4、邏輯運算符
1)邏輯運算符
運算符 | 名稱 | 註意區分 | 說明 |
---|---|---|---|
&& | 邏輯與 | 位運算的與(&) | a&&b,a和b都為true為true,缺一不可 |
|| | 邏輯或 | 位運算的或(|) | a||b,a和b其中一個為true,則為true |
! | 邏輯非 | 位運算的取反(~) | !a 若a為false是,!a為true |
註意事項:
①一元運算符的優先順序大於二元運算符
②位運算優先順序大於邏輯運算符
③邏輯非>邏輯與>邏輯或
#include <iostream>
int main()
{
char userIn;
std::cout << "請輸入一個字元:";
std::cin >> userIn;
if ((userIn >= 48) && (userIn < 58)) std::cout << "你輸入的是一個數字!";
if ((userIn >= 65) && (userIn <= 90) || (userIn > 96) && (userIn < 123))
std::cout << "你輸入的是一個字母!" << std::endl;
}
2)數值在邏輯運算中的運用
int a{},b{};
if(a&&b) //a和b都不等於0,才成立。,只要有一個為0,則執行。即if((a!=0)&&(b!=0))
if(a||b) //a和b至少有一個不等於0
if(!a) //要想執行,則a等於0
註:數值在邏輯運算中的應用本質是先把數值轉化成bool值,再進行邏輯運算。
3)將執行成本低的語句放到前面,執行成本高的語句放到後面
bool a{};
int c{500};
//如下兩種條件判斷第二種更好
if(c*500+200+c+c++)&&a) //先算c*500+200+c+c++,後判斷a的值。如果a為0,則為false,if語句不執行
{
}
if(a&&(c*500+200+c+c++)) //加快了代碼的運算速度,如果a為0,則後面的c*500+200+c+c++則不用執行
{
}
5、條件運算符(三元運算符)
1)條件運算符語法
x=bool?y:z //等同於如下if表達式
<==>
if(bool)x=y;
else x=z;
c=a>b?a:b //如果a>b條件成立,則c=a,條件不滿足c=b
註:條件運算符的運算優先順序最低
2)案例:用戶輸入兩個數,輸出最大的那個數
//用戶輸入兩個數,輸出最大的那個數
#include <iostream>
int main()
{
int a, b, c;
std::cout << "請輸入第一個數:";
std::cin >> a;
std::cout << "請輸入第二個數:";
std::cin >> b;
c = a > b ? a : b;
std::cout << "較大的數為:" << c << std::endl;
}
3)案例:輸入一個數,計算10000除以這個數以後的結果。
//輸入一個數,計算10000除以這個數以後的結果。
#include <iostream>
int main()
{
int cs;
std::cout << "請輸入一個數,我們將為你計算10000除以這個數以後的結果:";
std::cin >> cs;
int end;
end = cs ? (10000 / cs) : 0; //直接排除了除數為0的情況
std::cout << end;
}
6、異或運算技巧
if(a^b) //異或運算效率比下方的if語句效率高的多
<==>
if((a==true)&&(b==flase)) || (a==false)&&(b==true)) //即a和b不同同時為真或同時為假
if((a==true)||b==true)&&!(a==true)&&(b==true))
7、字元處理
字元處理函數頭文件:cctype頭文件
函數 | 說明 |
---|---|
int isupper(char) | 判斷字元是否為大寫字母 |
int islower(char) | 判斷字元是否為小寫字母 |
int isalpha(char) | 判斷字元是否為字母 |
int isdigit(char) | 判斷字元是否是數字 |
int isalnum(char) | 判斷字元是否是字母或者數字 |
int isspace(char) | 判斷字元是否為空白 |
int isblank(char) | 判斷字元是不是空格 |
int ispunct(char) | 判斷字元是不是標點符號 |
int isprint(char) | 判斷字元能不能列印 |
int iscntrl(char) | 判斷字元是不是控制字元 |
int isgraph(char) | 判斷字元是不是圖形字元 |
int tolower(char) | 將字元轉化為大寫 |
int toupper(char) | 將字元轉化為小寫 |
#include <iostream>
#include <cctype>
int main()
{
char char_A{ 'a'};
std::cout << "字元是否為大寫:"<<isupper(char_A) << std::endl; //1為真,0為假
char A,B;
std::cout << "請輸入一個字元:";
std::cin >> A;
B = tolower(A); //轉化為小寫
std::cout << "轉化後的字元為:" << B << std::endl;
}
8、案例:游戲登錄
設計要求:設計游戲麟江湖的登錄模塊
1)模擬註冊:要求用戶輸入一個8位以為的十六進位數作為賬號,然後再輸入一個8位以內的十六進位數作為密碼
2)模擬登錄:要求用戶分別輸入賬號和密碼進行登錄,然後根據用戶的輸入做出判斷
3)用戶的賬戶和密碼不可以小於5位
#include <iostream>
int main()
{
std::cout << "============麟江湖用戶註冊===================" << std::endl;
unsigned long long uId, uPass;
std::cout << "請輸入你的賬號(16位十六進位):";
std::cin >> std::hex >> uId;
std::cout << "請輸入你的密碼:";
std::cin >> uPass;
//註冊部分
if ((uId > 0xFFFFF) && (uPass > 0xFFFFF))
{
unsigned long long uInId, uInpass;
system("cls");
std::cin >> std::hex;
std::cout << "請輸入你的賬號(16位十六進位):";
std::cin >> uInId;
std::cout << "請輸入你的密碼:";
std::cin >> uInpass;
//用戶登錄部分
if (uId == uInId)
{
if (uPass == uInpass)
{
std::cout << "登錄游戲!";
}
}
else
{
std::cout << "你的密碼輸出有誤";
}
}
else
{
std::cout << "註冊失敗,賬號或者密碼不足5位!!!";
}
}