--- GA: G-RZYLL0RZGV --- ###### tags: `大一程設` `東華大學` `東華大學資管系` `基本程式概念` `資管經驗分享` 運算元與運算子 === [TOC] ## 前言 在每個程式語言裡,運算、條件判斷都是不可或缺的要素,而常見的加減乘除就是一種運算,而這些運算所需的符號我們稱為運算子,也稱為 operator。 舉例來說: `a + b` +號就是運算子,而 a、b 我們稱為運算元,又稱為 operand。 ## 常見的運算子 [話不多說,額外補充連結先放這邊](https://docs.microsoft.com/zh-tw/cpp/cpp/cpp-built-in-operators-precedence-and-associativity?view=msvc-160) > 裡面很多內容大家一定沒看過,但可以往下找到自己看得懂的地方。 > 比方說 + - * / 大家一定會,看程式文件的能力要從早就開始培養哦。 > [name=orange] 這邊我們先看個小範例 ``` cpp= int main(){ double a = 5, b = 3; double ans = 0.0; ans = a / b; } ``` 這邊的 ans 會等於 1.66666...,是一個無窮小數,而 / 這個運算子大家已經了解了,a、b 是運算元大家也了解了,這邊想跟大家談談,今天如果我不希望無窮小數的 6 寫那麼長,只輸出小數點後 3 位該怎麼辦呢? ### 補充 - C++ 的小數輸出與 I/O 格式化旗標 > 這邊的概念會牽扯到比較進階的內容,我們先不多做解釋,但**希望大家先把語法記起來,因為老師考試會出哦。** > ~~我沒有洩題。~~ > [name=orange] ```cpp= int main(){ double a = 5, b = 3; double ans = 0.0; ans = a / b; cout.setf(ios::fixed); cout.setf(ios::showpoint); cout.precision(2); cout << "ans is " << ans << endl; } ``` > 這邊的內容真的比較困難,不用急著馬上就要了解,你可能一年後才會懂 > 跟我一樣,人常說十年磨一劍,千萬不要著急。 > [name=orange] [I/O 格式化旗標補充連結](https://openhome.cc/Gossip/CppGossip/IOFormatFlag.html) 還記得 cout 是拿來輸出的吧,而在 cout 裡面 C++ 有提供格式化旗標這個工具讓我們使用,就是這邊看到的 setf 函式,全名為 set flag,而在這個函式裡面我們可以使用他提供的屬性來設定我們想要的輸出,上面的連結可以看到更多的屬性。 `ios::fixed` 表示以正常方式顯示(非科學記號) `ios::showpoint` 表示顯示小數點 `cout.precision(2)` 表示顯示到小數點後第二位 而如果今天你要取用某個類別底下的函式,要用「.」這個符號來取用這個工具底下的函式,這個我們會在之後做更多的說明。 > 先賣個關子,「.」這個符號,我都用「**取用**」這個動詞來說明他。 > 類別我們也以後再說,可以先記 cout 是在一個類別之中。 > [name=orange] 以防這邊真的太難,我會錄影針對這個補充說明。 [傳送門(門還沒開,他現在是壞的)]() <!-- ### 另外一種小數方式 > 前提:C++的底層設計細節,四捨六入五成雙 > 這是更細節的設計方式 上面使用的方法是 I/O 格式化旗標,其實還有其他的方式,就是引用 iomanip 這個函式庫底下的 setprecision 方法。裡面放的參數代表你要看幾個位數,以下面為例。 ```cpp= #include <iostream> #include <iomanip> using namespace std; int main(){ double c = 5.444445; setprecision(5); cout << c; //這邊會印出5.4444 } ``` **今天只單純呼叫 setprecision 函式的時候,這個參數 5 會包括整數位數**,所以只會印出 5.4444,一個整數位數加上四個小數位數,共五位。 **注意:setprecision 會四捨五入哦。** 那如果今天只想針對小數點後做操作而且要四捨五入,則要加上前面提到的 fixed 格式化旗標,像下面這個例子。 ```cpp= #include <iostream> #include <iomanip> using namespace std; int main(){ double c = 5.444445 cout.setf(ios::fixed); setprecision(5); cout << c; //這邊會印出5.44445 } ``` 我們取到小數點後第六位四捨五入進位到小數點後第五位,所以印出 5.44445,這個時候就不管整數位數了。 --> ## 繼續回到運算子 除了基本四則運算之外,有一個符號大家也務必要認得,就是「%」這個符號,我們在數學中用百分比形容他,英文叫做 mod,在程式語言裡,它叫做「取餘數」,他在很多邏輯設計,無論是網頁互動、遊戲邏輯都蠻常使用到的。 舉例來說: 5 / 3 = 1...2,而這個餘數 2 我們就會用 % 這個符號來獲得。 ```cpp= int main(){ int a = 5, b = 3; cout << 5%3; //這邊會印出 2 } ``` 在這邊放上 PPT 的內容,基本運算該如何寫,這個相信大家看過就會了! 這個在 PPT 第二章第 56 頁  ### +=、*=、-=、/= 在寫程式的過程中,我們很常會遇到要把同一個變數往上加的情況,尤其是在迴圈(有興趣可以去看迴圈的筆記),我們這邊只帶大家了解這個運算子是怎麼運作的。 ```cpp= int main(){ int my_age = 21; int my_age_two_year_later; my_age_two_year_later = my_age + 2; } ``` 應該感覺得出來這種寫法很沒效率,有點刻意,我們有更快的解決方式。 ```cpp= int main(){ int my_age = 21; my_age = my_age + 2; } ``` 我們其實沒有必要刻意在新增一個變數,而是直接指派給原本的 my_age 把他覆蓋掉就好,而這個寫法可以再更精簡。 ```cpp= int main(){ int my_age = 21; my_age += 2; // my_age = my_age + 2 = 21 + 2 = 23 my_age *= 2; // my_age = my_age * 2 = 23 * 2 = 46 my_age /= 2; // my_age = my_age / 2 = 46 / 2 = 23 } ``` 這種寫法快速又簡潔,能夠少打很多字,而且全世界的大家都會用,寫程式長期下來就是你能花越少時間做越多的事越好。 而這個寫法在迴圈做一些累加、累乘的運算特別方便,之後馬上會有例子給大家練習。 當然運算子還有相當多種,這邊只列剛開始學程式會用到的給大家,後續新的也會陸續出現在筆記中喔。 舉例像是: ++、!=、>=、<=,很多很多,超乎你想像的多。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up