C++(5)--運算符、表達式、條件結構(if, switch)

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:語句1break;
case 常量2:語句2break;
...
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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444885.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444885.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444885.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關系數據庫——mysql常用函數總結

文本處理函數 Left(x,len) – 返回串左邊的字符&#xff08;長度為len&#xff09; Right(x,len) Length(x) – 返回串的長度 Locate(x,sub_x) – 找出串的一個子串 SubString(x, from, to) – 返回字串的字符 Lower(x) Upper(x) LTrim(x) RTrim(x) Soundex(x) – 讀…

setsockopt()用法(參數詳細說明)

先來看看函數的原型: int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen); 然后我們來看看參數: s(套接字): 指向一個打開的套接口描述字 level:(級別): 指定選項代碼的類型。

再議libcurl編程

那是2年前用libcurl了,我肯定好久不用的知識,放置久了就會遺忘,現在我又重拾起這個知識點,重頭再來,至于前面的基礎知識,可以參考我的 http://blog.csdn.net/pbymw8iwm/article/details/6675754 假設你要獲取URL所表示的遠程主機上的資源。你需要寫一段程序用來完…

關系數據庫——并發控制

并發控制 多用戶數據庫&#xff1a;允許多個用戶同時使用的數據庫&#xff08;訂票系統&#xff09; 不同的多事務執行方式&#xff1a; 1.串行執行&#xff1a;每個時刻只有一個事務運行&#xff0c;其他事務必須等到這個事務結束后方能運行。 2.交叉并發方式&#xff1a; …

C++(6)--初識循環while,do-while

初識循環1.使用while 循環結構2.使用do-while 循環3.python中的while循環《老九學堂C課程》《C primer》學習筆記。《老九學堂C課程》詳情請到B站搜索《老九零基礎學編程C入門》-------------簡單的事情重復做&#xff0c;重復的事情用心做&#xff0c;用心的事情堅持做(老九君…

map類的erase方法的在Linux與Windows中的差異

這次的代碼是跨平臺的,尼瑪在win32上通過,但是在linux上不通過了,查找了一下原來是平臺linux不支持。 有人舉了例子: std::map< int , float > i_f_map; i_f_map[1] = 1.2f; i_f_map[23] = 1.4f;

C++(7)--for循環,break,continue語句

for循環1.for循環2.break 語句3.continue語句4.while,do-while,for 循環的異同5.for循環demo 嵌套循環-打印圖形6.python 中的for循環《老九學堂C課程》《C primer》學習筆記。《老九學堂C課程》詳情請到B站搜索《老九零基礎學編程C入門》-------------簡單的事情重復做&#x…

關系數據庫——數據庫恢復

實現技術 恢復操作的基本原理&#xff1a;冗余 恢復機制涉及的兩個關鍵問題 如何建立冗余數據 數據轉儲&#xff08;backup&#xff09;登錄日志文件&#xff08;logging&#xff09; 如何利用這些冗余數據實施數據庫恢復數據轉儲 數據轉儲定義&#xff1a; 轉儲是指DBA將整個數…

Lua語言中pairs和ipairs的區別

tbl = {"alpha", "beta", ["one"] = "uno", ["two"] = "dos"} for key, value in ipairs(tbl) do print(key, value) end --pairs() --pairs()函數基本和ipairs()函數用法相同, 區別在于pairs()可以遍歷整個table…

算法(22)-leetcode-劍指offer6

leetcode-劍指offer-545.面試題55- 二叉樹的深度46.面試題55-2-平衡二叉樹47.面試題57-1-和為s的兩個數字-雙指針48.面試題57-2-和為s 的連續正數序列-雙指針49.面試題56-數組中出現數字的次數-位運算leetcode-136 只出現一次的數字Ileetcode-137 只出現一次的數字IIleetcode-2…

leetcode160 相交鏈表

編寫一個程序&#xff0c;找到兩個單鏈表相交的起始節點。 如下面的兩個鏈表&#xff1a; 在節點 c1 開始相交。 示例 1&#xff1a; 輸入&#xff1a;intersectVal 8, listA [4,1,8,4,5], listB [5,0,1,8,4,5], skipA 2, skipB 3 輸出&#xff1a;Reference of the node…

lua的一些api文檔總結吧

打算記錄一些我認為重要的常用的api: 1. 建一個新表 void lua_createtable (lua_State *L, int narr, int nrec) 創建一個新的table, 并把它放在棧頂. narr和nrec分別指定該table的array部分和hash部分的預分配元素數量 無返回值 棧高度+1, 棧頂元素是新table #define l…

關于mysql的一些時間格式和字符的問題

最近在做一些游戲的數據分析&#xff0c;需要對大量數據的用戶行為進行處理存庫&#xff0c;其中有個數據庫字段是datetime類型的&#xff0c;這個以前都沒用過&#xff0c;我以前都喜歡用int來存放時間戳&#xff0c;但這次這樣用&#xff0c;我就得在數據庫中轉換了&#xff…

算法(17)-leetcode-劍指offer1

leetcode-劍指offer-11.面試題3-數組中的重復數字2.面試題04-二維數組中的查找3.面試題05-替換空格4.面試題06-從尾到頭打印鏈表5.面試題07-重建二叉樹6.面試題09-兩個堆棧實現隊列7.面試題10-1-斐波那契數列8.面試題10-2-青蛙跳臺階問題9.面試題11-旋轉數組的最小數字10.面試題…

蟻群算法的一些東西

運行了三個TSP經典用例,基本符合要求。僅僅是一份按照蟻群算法的原理寫的代碼,沒有做任何優化。 // bigSearch.cpp : 定義控制臺應用程序的入口點。 // #include<iostream> #include<math.h> #include<time.h> using namespace std; //該程序是以…

leetcode101 對稱二叉樹

給定一個二叉樹&#xff0c;檢查它是否是鏡像對稱的。 例如&#xff0c;二叉樹 [1,2,2,3,4,4,3] 是對稱的。 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面這個 [1,2,2,null,3,null,3] 則不是鏡像對稱的: 1 / \ 2 2 \ \ 3 3 說明: 如果你可以運用遞歸和迭…

Linux內核OOM機制的詳細分析

Linux 內核有個機制叫OOM killer&#xff08;Out-Of-Memory killer&#xff09;&#xff0c;該機制會監控那些占用內存過大&#xff0c;尤其是瞬間很快消耗大量內存的進程&#xff0c;為了防止內存耗盡而內核會把該進程殺掉。典型的情況是&#xff1a;某天一臺機器突然ssh遠程登…

算法(18)-leetcode-劍指offer2

leetcode-劍指offer-211.面試題13-機器人的運動范圍-廣度優先搜索12.面試題14-1-剪繩子13.面試題14-2-剪繩子214.面試題16-二進制中1的個數-布萊恩克尼根15.面試題16-數值的整數次方-快速冪解析法16.面試題17-打印從1到最大的n位數17.面試題18-刪除鏈表的節點18.面試題19-正則匹…

rabbitmq技術的一些感悟(一)

Rabbitmq 初識rabbitmq RabbitMQ是流行的開源消息隊列系統,用erlang語言開發。RabbitMQ是AMQP(高級消息隊列協議)的標準實現。如果不熟悉AMQP,直接看RabbitMQ的文檔會比較困難。不過它也只有幾個關鍵概念,這里簡單介紹 幾個概念說明: Broker

leetcode21 合并兩個鏈表

將兩個有序鏈表合并為一個新的有序鏈表并返回。新鏈表是通過拼接給定的兩個鏈表的所有節點組成的。 示例&#xff1a; 輸入&#xff1a;1->2->4, 1->3->4 輸出&#xff1a;1->1->2->3->4->4 思路&#xff1a;鏈表歸并。 /*** Definition for si…