C++運算符、表達式 條件結構
- 1.表達式與運算符
- 1.1賦值運算符
- 1.2算術運算符
- 1.3關系運算符
- 1.4邏輯運算符
- 1.5位運算符
- 1.6 sizeof()
- 1.7 三目運算符
- 1.8 運算符的優先級
- 2.條件結構
- 2.1--if
- 2.2 --switch結構
- 2.3 switch 和 多重if 結構的對比
條件結構)
《老九學堂C++課程》《C++ primer》學習筆記。《老九學堂C++課程》詳情請到B站搜索《老九零基礎學編程C++入門》
-------------簡單的事情重復做,重復的事情用心做,用心的事情堅持做(老九君)---------------
1.表達式與運算符
(上一章只講了算術運算符號)
運算符:賦值運算符,算術運算符,關系運算符,邏輯運算符
表達式:符號和操作數的組合
1.1賦值運算符
從右向左運算,將右邊的值賦給左邊的對象
復合賦值運算符: +=, *=, ,\=,
1.2算術運算符
一元運算符:++, --;二元運算符:+,-,*,/,%
1.3關系運算符
比較符號兩邊對象的關系,(結果是0/1):>,<,>=,<=,==,!=
#include <iostream>
int main(){cout << "15 > 88 嗎?" << (15 > 88) << endl;cout << "16 > 99 嗎?" << (16 < 99) << endl;cout << boolalpha; // 設置輸出True, Falsecout << "15 > 88 嗎?" << (15 > 88) << endl;cout << "16 > 99 嗎?" << (16 < 99) << endl;return 0;
}
輸出
15 > 88 嗎?0
16 > 99 嗎?1
15 > 88 嗎?false
16 > 99 嗎?true
1.4邏輯運算符
(與、或、非)&&、||、 !
(python 中使用 and, or, not 來表示邏輯運算符 與,或,非)
1.5位運算符
運算符 | 作用 | 示例 |
---|---|---|
& | 按位與 | 兩位同時為1時,結果為1 |
| | 按位或 | 兩位有一個為1時,結果為1 |
~ | 按位非 | 操作數為1,結果為0;操作數為0,結果為1 |
^ | 按位異或 | 兩個操作數相同,結果為0,不同結果為1 |
<< | 左移 | 右側補零 |
>> | 右移 | 左側補符號位 |
#include <iostream>
int main(){cout << (4 & 5) << endl;cout << (~ 2) << endl; cout << (2 << 3) << endl; // 2->10,(1向左移動3位)->10000 =16cout << (16 >> 3) << endl; // 16->10000,(尾部的元素舍棄掉3個)->10=2cout << (3 << 3)<< endl; // 3->11 (1向左移動3位)-->11000=24return 0;
}
輸出
4
-3
16
2
24
提示1: 正數按位取反后為負數,負數在內存中是以補碼的形式存儲的。2->00000010 取反11111101.第一個位符號位,第一位為為0正數,第一位為1的為負數。負數在計算機中以補碼的方式存儲,11111101如何轉換為十進制呢?將二進制取反+1乘以負一。
提示2:區分cout 運算符(<<運算符重載),左移,右移操作符號兩邊都是數字,用在2 的倍數。用來處理2的倍數十分高效
1.6 sizeof()
Sizeof 認為是一個運算符,測量數據類型占內存空間的大小,單位為字節
sizeof(type_name)
demo1
#include <iostream>
using namespace std;
int main(){cout << sizeof(int) << endl;cout << sizeof(10) << endl;cout << sizeof(0.1) << endl;cout << sizeof("abc") << endl; // 字符串類型會自動在末尾加\0return 0;}
輸出
4
4
8
4
demo2: sizeof(num++)
int main(){int num = 5;cout << sizeof(num++) << endl; //sizeof 只是一個運算符,不湊成任何運算,mac的編譯器過不去cout << num << endl;return 0;
}
應該輸出
4
5
1.7 三目運算符
(條件)?條件滿足表達式的結果:條件不滿足表達式的結果
int num= 5>6 ? 10 :12;
1.8 運算符的優先級
1.單目運算符~, ++,–,sizeof()
2.!
3.算術運算符
4.關系運算符
5.&&, ||
6.賦值運算符
(有限級別由上到下依次遞減)
2.條件結構
2.1–if
單個if
代碼格式(python 的條件/else后要接冒號,C++條件在括號中,代碼塊用大括號界定)整個if 語句作為一條語句
if(條件為真){//代碼塊1
}
else{//代碼塊2
}
demo1–硬盤盤符一半采用A-Z的大小字母表示,使用程序判斷用戶輸入的字符是否是合法的硬盤盤符
(早期的計算機是AB軟盤,所以硬盤盤符號一般從C開始)
int main18(){//使用程序判斷用戶輸入的字符是否是 合法的硬盤盤符char pan = '\0'; //默認值設置為空字符,ASCII 碼為0 的字符cout << "請輸入一個字符,我來判斷是否合法:";cin >> pan;// "A"~"Z"之間if ('A' <= pan && pan <= 'Z'){cout << "是合法的字符" << endl;}else{cout << "不是合法字符" << endl;}return 0;
}
請輸入一個字符,我來判斷是否合法:A
是合法的字符
demo2-購物車打折
int main(){// 購物車總價大于5W打7折,否則打9折double price_louis = 35000.0;double price_hemes = 11044.5;double price_chanel = 1535.0;double total_price = 0.0;double discout = 0.0;total_price = price_louis + price_hemes + price_chanel;if (total_price > 50000 || price_louis > 1000 || price_chanel > 1000 || price_hemes > 1000){discout = 0.7;}else{discout = 1.0;}cout << "最終付款: " << total_price * discout << endl;return 0;
}
最終付款: 33305.7
多重if結構
常用來做區間判斷(python 中else if 是連在一起寫的,寫作elif)
if(條件1){//代碼塊1}
else if(條件2){//代碼塊2
}
else{//代碼塊3
}
2.2 --switch結構
開關語句,
1.switch 后的表達式只能是整型或者字符型,
2.case 后常量表達式的值不能相同;
3.可以不添加break,但是需要特別注意執行的順序(進到一個分支里頭,沒有遇到break語句會一直執行到最后);
4.case 和defult字句的先后順序可以自行變動>
用途:菜單選擇,判斷某個月份有幾天
switch(表達式){
case 常量1:語句1;break;
case 常量2:語句2;break;
...
default:語句;
}
demo1
int main(){int choice = 2;switch(choice){case 1:cout << 1 << endl;case 2:cout << 2 << endl;case 3:cout << 3 << endl;break;case 4:cout << 4 << endl;}return 0;
}
2
3
demo 2: default 放在開頭,如果所有的情況不滿足的化會執行default,直至至遇到的第一break,或者最后;如果有一個case滿足會執行該case,見demo3.
int main(){int choice = 7;switch(choice){default:cout << 998 << endl;case 1:cout << 1 << endl;case 2:cout << 2 << endl;break;case 3:cout << 3 << endl;break;case 4:cout << 4 << endl;}return 0;
}
998
1
2
demo3–demo2的變形,如果有case 滿足,是不會執行default 的了
int main(){int choice = 3;switch(choice){default:cout << 998 << endl;case 1:cout << 1 << endl;case 2:cout << 2 << endl;break;case 3:cout << 3 << endl;break;case 4:cout << 4 << endl;}return 0;
}
3
2.3 switch 和 多重if 結構的對比
相同點:都是用來處理多分支條件結構
不同點:
switch: 等值條件判斷,條件個數有限(殺雞刀,大于20個分支,就不要用了)
多重if:判斷某個連續區間時的情況(殺牛刀)
demo: 判斷一個有多少天, case 中的語句可以省略
int main(){//判斷某月有多少天int month = 2;switch(month){case 1:case 3:case 5:case 7:case 8:case 10:case 12:cout << "31天" << endl;break;case 4:case 6:case 9:case 11:cout << "30天" << endl;break;case 2:cout << "28 或者 29 天" << endl; break;}return 0;
}
28 或者 29 天