C++ 是一個歷史悠久的語言。1983 年由貝爾實驗室的 Bjarne Stroustrup 所發明。
起初,這種語言被稱作「C WITH CLASSES」(「包含類別的C語言」),作為C語言的增強版出現。所以可以看到 C 語言並沒有像 C++ 一樣有「class」這種程序。
目前 C++ 是最被廣泛應用的語言之一。
先前 IEEE 透過算出 2016年熱門程式語言排行榜,其中包含Google搜尋、GitHub、Stack Overflow、Reddit、Hacker News、IEEE Xplore 數位圖書館等網站,得出對應的熱門程式語言排名。
2015 年 IEEE Spectrum 熱門程式語言排行榜前三名分別為:Java、C 與 C++。
可以看到 C++ 常常在第三和第四之間變動。
近幾年來 C++ 的新標準不斷發布,C++ 已經變得越來越龐大了,大多數的 C++ 程式員只用到(也只懂)C++ 功能的一小部份。
想成為 C++ 語言的高手,沒有耗上三五年是不可能的。
雖然 C++ 很複雜,但是真正想成為程式高手的人應該都要懂 C/C++,重要的 API 都會有 C/C++ 的版本,由此可見 C/C++ 的重要性。
今天就要來教大家最最基礎的 C++ 語法。
環境設置
我們寫程式需要「編輯器」和「編譯器」,以前是要分開安裝,現在能利用整合開發環境 (Integrated Development Environment, 簡稱 IDE) 把這些功能通通包在一起、輔助程式開發者寫軟體。
IDE 內撰寫程式,程式碼會用顏色區分不同命令以方便閱讀,程式寫完之後,按下「執行 (Run)」按鈕,就會開始編譯、測試你的程式。
如果過程中出錯、程式執行失敗,螢幕裡會自動標示出錯的程式碼行數跟錯誤訊息,幫助你 Debug。
不過原本 IDE 也是要安裝的,現在雲端技術普及,除了有 Google Drive、Dropbox 這種雲端服務,連 IDE 也推出有雲端版了。
要撰寫下列程式,可以使用雲端 IDE—— Ideone 來撰寫。
點選左下角,可以選擇你要撰寫的程式語言環境,包括 C/C++、Python、Java…
選好、寫好程式之後按下「Run」,就能看到結果了。
利用 Ideone,讓我們開始今天的教學吧!
(不過以下我是用本機端的Terminal,看程式碼和輸出結果就行了)
輸入與輸出
起手式:每一個 C++ 程式都會有的基本結構
#include <iostream> using namespace std; int main(){ return 0; }
iostream 是 C++ 中用於資料輸入與輸出的標頭文件,屬於 C++ 標準程式庫的一部分。 iostream 為 Input/Output Stream 的縮寫,即是輸入/輸出流。
namespace (命名空間) 是 C++ 的 class 原本就有提供的一種功能。待後續再為大家詳細解釋,總之先這樣寫就對了。
接下來印出 “hello, world” ,我們的第一個程式吧!
TWICE 成員由左而右分別是:Mina、Momo、Sana、Tzuyu,來跟著 TWICE 動疵動疵學 hello, world 吧~
在 return 前面寫上 cout << “Your Message” << endl;
#include <iostream> using namespace std; int main(){ cout << "hello, world" << endl; return 0; }
<< endl 是換行的意思。試試看如果加上三個 << endl 、不加上 << endl 和用可以替換 endl 的 ‘\n’ ,編譯起來會有什麼差別呢?
#include <iostream> using namespace std; int main(){ cout << "hello, world Tzuyu!" << endl << endl << endl; cout << "hello, world Sana!"; cout << "hello, world Mina!" << '\n'; cout << "hello, world Momo!" << endl; return 0; }
結果在此:
來寫一個能印出生日賀卡的程式看看:
################################ Dear Tzuyu, TWICE is the best! Fighting! Sincerely, Lynn ################################
要怎麼寫呢?多印幾行就可以啦。
#include <iostream> using namespace std; int main(){ cout << "################################" << endl; cout << "Dear Tzuyu" << endl; cout << " TWICE is the best!" << endl; cout << " Fighting!" << endl; cout << " Sincerely, Lynn" << endl; cout << "################################" << endl; return 0; }
很簡單吧!如果要有空格的話,印的時候也要在裡面放入空格就行了。
讓我們進一步提升這個程式,能讓你自訂輸入收卡人和送卡人的姓名,名字可以是英文字母或是中文字。
在 C++ 中這叫字串,可以這樣表示:
char name[50];
char 代表型態為字元,name 是這個陣列的變數名稱,要叫 s、hello 都可以。50 是陣列大小。
已經知道 cout << 是輸出,輸入的寫法長這樣:
cin>> name1; cin>> name2; //或寫成 cin>> name1>> name2; //然後輸出 cout<< name1;
寫成完整的程式:
#include <iostream> using namespace std; int main(){ char name1[50], name2[50]; //宣告name1和name2是字元陣列 cin >> name1 >> name2; //輸入 cout << "################################" << endl; cout << "Dear "<< name1 << endl; cout << " TWICE is the best!" << endl; cout << " Fighting!" << endl; cout << " Sincerely, " << name2 << endl; cout << "################################" << endl; return 0; }
這樣一來就可以指定想要跟 TWICE 中的哪一位成員告白了!顆顆
等等,我想要寫個更真摯一點…
所以我決定寫 Sana 的全名來告白!Minatozaki Sana。
等等,結果怎麼變成這樣了?!name1 被代換成 Minatozaki、name2 被代換成 Sana。
原因是因為 cin>> 是用「空格」、「tab 鍵」和「Enter (return) 鍵」作為分隔點。
所以只要一按下空格,cin 就會判斷為第二個輸入。
解決辦法是改寫成: cin.getline(name1, 50);
cin.getline(字串, 字串長度) 的意思是按照一行行的方式做輸入。而 cin>>字串 則是理解成按單個字串輸入。
基本上只要把輸入改掉就行了,輸出不變。
#include <iostream> #include <cmath> using namespace std; int main(){ char name1[50], name2[50]; //宣告name1和name2是字元陣列 cin.getline(name1, 50); cin.getline(name2, 50); cout << "################################" << endl; cout << "Dear "<< name1 << endl; cout << " TWICE is the best!" << endl; cout << " Fighting!" << endl; cout << " Sincerely, " << name2 << endl; cout << "################################" << endl; return 0; }
哦成功了!
四則運算
身為一個財金背景的,寫程式第一個要做的當然是計算利息啦。來試著寫一個能計算銀行存款利息的程式吧!
這裡是
總額 = 本金*(1+利率)年期
這裡我們要用到一個次方函數,需要用到 <cmath> 函式庫中的 pow 函數。在最上方 include 進來此函式庫。
pow 函數的寫法為:pow(底數, 次方)
#include <iostream> #include <cmath> using namespace std; int main(){ double money, years, rate, sum; //宣告浮點型變數 cin>>money>>years>>rate; //輸入本金, 年期, 利息 sum = money*pow((1+rate), years); //算出總額 cout<<sum<<endl; return 0; }
來計算看看本金 1,000 元,年期 5 年,利率 5% 的存款,在到期後的總額會是多少:
接下來,再一次提升這個程式的功能。
如果我想要讓程式永無止境跑,讓我能輸入我要算的存款條件、算到開心為止該怎麼做呢?
可以在外面包一個「while 迴圈」,只要 while() 裡面的條件符合,它就會一直跑下去。
#include <iostream> #include <cmath> using namespace std; int main(){ double money, years, rate, sum; //宣告浮點型變數 cin>>money>>years>>rate; //輸入本金, 年期, 利息 while(money > 0){ sum = money*pow((1+rate), years); //算出總額 cout<<sum<<endl<<; cin>>money>>years>>rate; //再繼續輸入 } return 0; }
所以我們分別輸入「本金 1,000 元、年期 5 年、利率 5%」、「本金 250,000 元、年期 2 年、利率 3%」、「本金 3,000 元、年期 1 年、利率 2%」… 等條件。
問題來了,要不是這個程式是我們寫的,誰知道那個游標是要我們輸入啥啊…
更好的方式是印出提示文字,像這樣:
要做到這樣很簡單,運用一下第一個教的 cout<< 把文字印出來就行了。
#include <iostream> #include <cmath> using namespace std; int main(){ double money, years, rate, sum; //宣告浮點型變數 cout<< "請分別輸入本金,年期,利率,並用空格隔開:"; cin>>money>>years>>rate; //輸入本金, 年期, 利息 while(money > 0){ sum = money*pow((1+rate), years); //算出總額 cout<<"到期存款總額為 "; cout<<sum<<endl; cout<< "請分別輸入本金,年期,利率,並用空格隔開:"; cin>>money>>years>>rate; //再繼續輸入 } return 0; }