---
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、圖示:

### (二)題目二:
假設火車站的自動售票機能接受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、圖示:
