---
# System prepended metadata

title: C++ 程式設計 運算子與運算式
tags: [' 程式設計', C++]

---

---
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)
