--- tags: C++, 程式設計 --- # C++ 程式設計 運算子與運算式 ## 一、運算式 ### 什麼為運算式? ```cpp= int i; i = 3 + 5; // output: 8 i = 5 + 3 * 4; // output:17 i = ( 1 + 3 ) * 5 + 6; // output:26 ``` ## 二、算術運算子 ### (一)C++的算數(+,-,*,/) ```cpp= cout << ( 3 * 2 ) << endl; // output: 6 cout << ( 3 / 2 ) << endl; // output: 1 (整數運算,答案輸出也會是整數) cout << ( 3.0 / 2.0 ) << endl; // output:1.5(浮點數運算,答案輸出也會是浮點數) cout << ( 3.0 / 2 ) << endl; // output:1.5(浮點數與整數運算,答案輸出會是浮點數) cout << ( 3 / 2.0 ) << endl; // output:1.5(整數與浮點數運算,答案輸出會是浮點數) ``` ### (二)除數餘數運算子(%) ```cpp= //EX: 7/3 = 2.....1 //(被除式/除式) = 商數 ...餘數 cout << ( 7 % 3 ) << endl; // output: 1 (餘數) ``` ### (三)遞增遞減運算子(迴圈常使用) #### 1、簡單舉例: ```cpp= i = 10; i = i + 1; //output: 11 (10+1) i += 1; //output: 11 (i=i+1) ``` #### 2、前後置遞增減 ##### (1)介紹 【想像成先做遞增減再輸出&先輸出後做遞增減】 i = 100; 【後置遞增減】 i++; //後置遞增 output = 100 ,i = 101 ; i--; //後置遞減 output = 100 ,i = 99 ; 【前置遞增減】 ++i; //前置遞增 output = 101 ,i = 101 ; --i; //前置遞減 output = 99 ,i = 99 ; ##### (2)舉例 ```cpp= int i = 100; int j; j = (i++) + 5; //output = 105 (100+5) ,i = 101 ; j = (++i) + i + (i++) //output = 303 (101+101+101),i =100; j = (++i) + 5 + (++i) //output = 209 (102+5+102) ,i = 102 ; ``` #### 3、比較運算子(>,==,<,<=,>=,!=) ##### 給予要比較的值,則回傳 True or False (1 or 0)【預設為數字】 ```cpp= int x = 3, y = 3; cout << "( x == y ):" << ( x == y ) << endl; //output: 1 cout << boolalpha; //顯示為 True & False cout << "( x == y ):" << ( x == y ) << endl; //output: ( x == y ):True cout << "( x <= y ):" << ( x <= y ) << endl; //output: ( x <= y ):True cout << "( x >= y ):" << ( x >= y ) << endl; //output: ( x >= y ):True cout << "( x > y ):" << ( x > y ) << endl; //output: ( x > y )::Flase cout << "( x < y ):" << ( x < y ) << endl; //output: ( x < y )::Flase cout << "( x != y ):" << ( x =!= y ) << endl; //output: ( x != y )::Flase 【 != 代表不等於的意思】 ``` #### 4、邏輯運算子 (&&,||,!) ##### 給予要比較的值,則回傳 True or False (1 or 0)【預設為數字】 ```cpp= int i = 3; bool b = False ; cout << boolalpha; ////顯示為 True & False cout <<"( i && b ):" << (i && b) << endl; //output: False cout <<"( i || b ):" << (i || b) << endl; //output: True (非0皆為True) cout <<"( !b ):" << (!b) << endl; //output: True (!:not的意思) ``` #### 5、位元運算子(>>,<<,~,&,|,^) ##### 針對位元做運算 short k = 23; //0001 0111 short l = 14; //0000 1110 cout << "( K >> 1 ):" << ( k >> 1) << endl; //output:( K >> 1 ):11 (1+2+8) // (右移一個位元) = /2 00010111 //以顯示8bit為例 00010111 //右移後最左邊的bit會空出一個位置 若是無號數一律補零; ------------ 若是有號數看最左邊bit為1或0,若是1就補1,若是0就補0; 00001011 //被擠出去的數直接捨棄 cout << "( K << 1 ):" << ( k << 1) << endl; //output:( K << 1 ):46 (2+4+8+32) // (左移一個位元) = *2 00010111 //以顯示8bit為例 00010111 //左移後最右邊的bit會空出位置 不論有無號數一律補零; ------------ 00101110 //被擠出去的數直接捨棄 cout << "( K & l ):" << ( k & l) << endl; //output:( K & l ):7 (1+2+4) // (對應bit做and運算) 0001 0111 0000 1110 ------------- 0000 0111 cout << "( K | l ):" << ( k | l) << endl; //output:( K | l ):31 (1+2+4+8+16) // (對應bit做or運算) 0001 0111 0000 1110 ------------- 0001 1111 cout << "( K ^ l ):" << ( k ^ l) << endl; //output:( K ^ l ):25 (1+8+16) // (對應bit做Xor運算) 0001 0111 0000 1110 ------------- 0001 1001 cout << "( ~K ):" << ( ~k ) << endl; //output:( ~K ):【無號數】232 (8+32+64+128) 【有號數】-24 (-128+64+32+8) // (對應bit做Not運算) 0001 0111 ------------- 1110 1000 #### 6、指定運算式(=) ##### 將右邊的值放進左邊的變數 l = 3; // 將3放進l變數中,此時l變數值為3 k=l=3; // 將3放進l變數中,l變數值為3,再將l值3放進變數k,此時k變數值為3 i=j=k=l=3; //i,j,k,l皆為3 ##### 【運算元指定運算式】 i = ( j = ( k = 1 + 2 ) + 3 ) + 4; // k = 3 // j = 5 // i = 11 #### 7、複合運算子 ##### (+=,-=,*=,/=,%=,>>=,<<=,&=,^=,|=) i = 100; i += 200; // i = i + 200, i = 300; j = 100; j -= 150; // j = j - 150, j = -50; k = 100; k *= 10; // k = k * 10 , k = 1000; ## 二、練習 ### (一)題目一: 請撰寫程式,將攝氏溫度值轉換為華氏溫度。(攝氏溫度 = (華氏溫度 - 32度) * 5/9) #### 1、程式碼(答案不唯一): ```cpp= #include <iostream> using namespace std; /*題目1:請撰寫程式,將攝氏溫度值轉換為華氏溫度。(攝氏溫度 = (華氏溫度 - 32度) * 5/9)*/ int main() { double a, b; cout << "請設定攝氏溫度: " ; cin >> a; b = (a * 9.0 / 5)+32; cout << "華氏溫度為: "<< b << endl; system("pause"); return 0; } ``` #### 2、圖示: ![](https://i.imgur.com/CWS6yXy.png) ### (二)題目二: 假設火車站的自動售票機能接受50元、10元、5元、及1元的硬幣, 請撰寫一個程式,算出購買票價137元的車票時,所需投入的各種幣值硬幣最少的數量? #### 1、程式碼(答案不唯一): ```cpp= #include <iostream> using namespace std; /*題目2:假設火車站的自動售票機能接受50元、10元、5元、及1元的硬幣, 請撰寫一個程式,算出購買票價137元的車票時,所需投入的各種幣值硬幣最少的數量?*/ int main() { int a, b, c, d, e; a = 50; b = 10; c = 5; d = 1; int f50, f10, f5, f1; f50 = 137 / a; //f50為50元硬幣數量 e = 137 - a * f50; //取完50元後剩的餘額 f10 = e / 10; //f10為10元硬幣數量 e = e - b * f10; //取完10元後剩的餘額 f5 = e / c; //f5為5元硬幣數量 e = e - c * f5; //取完5元後剩的餘額 f1 = e / d; //f1為1元硬幣數量 e = f50 + f10 + f5 + f1;//將所需硬幣加總 cout << "最少需要 " << e << "個硬幣 " << endl; system("pause"); return 0; ``` #### 2、圖示: ![](https://i.imgur.com/ep5iWLn.png)