基本C++

這個教學系列的目的是針對每個人:即使你以前沒有設計過程式或是你在其他的程式語言有相當的經驗並且想要擴展到C++!這可以給每一個人想要擁有一個可執行的程式那種成就感。

我的意思是什麼?C++是一種程式語言—它允許你控制你的電腦,讓它做你想要它做的,這個程式語言教學系列會幫你獲得C++的好處。

開始設定 – C++

在開始瞭解C++之前,你第一件要做的就是確定你有編譯器,什麼是編譯器,你問?編譯器就是將你寫的程式轉變成你的電腦可以真正瞭解並執行的執行檔,假如你是參加一個課程,你可能會透過你的學校取得一個編譯器,假如你是開始自己學,你最好的選擇就是使用Code::Blocks,我們在設定Code::Blocks這頁將會很詳細地帶你通過設定Code::Blocks編譯器。

進階編譯器資料

如果你有一些以前的經驗,或者只是想要一個選擇的菜單,你應該知道有一些常用的編譯器,假如你是程式設計新手,就跳過這節!
一些常用的編譯器包括Borland C++Microsoft C++GNU C++
不同的編譯器也有許多前端的環境–最常見的有使用GNU G++ 編譯器的Dev-C++,有一些像是G++是免費的,有些則不是,請見編譯器列表 有更多關於如何取得編譯器及設定的資訊。
這些編譯器每一個都有些不同,每一個應該支援ANSI/ISO標準C++函式,但每一個編譯器也會有不標準的函式(這些函式類似於一個國家的不同區域的口語或俚語那樣),當你用不同編譯器試著編譯原始碼(由程式設計師所寫的C++並存為一個文字檔)的時候不標準的函式有時候會造成問題,這些使用ANSI/ISO標準C++的教學應該不會有這個問題(有足夠現代的編譯器),注意假如你使用較舊的編譯器,像是TCLite,你應該你應該閱讀檢查一些相容性問題

進入C++語言

一個C++程式就是一個命令的集合,告訴電腦做”一些事”,這些命令的集合通常稱作C++、原始碼或只是程式碼,命令不是”函式”就是”關鍵字”,關鍵字是一個語言基本的建構方塊,事實上,函式也是,通常是由簡單的函式寫成–你會看到我們第一個程式在下面(搞混了嗎?你可以把它想成是一本書的大綱;大綱可以看出書裡的每一章;每一章也有它自己的大綱,這些是由節組成的。每一節可以有自己的大綱,也有可能是寫出的細節),幸運的是,c + +提供了許多你可以使用的常用函式和關鍵字。
但是一個程式是如何真正地開始?每個C++的程式都會有一個函式,叫做main,它總是在你的程式一開始執行的時候就呼叫,對於main,你也可以呼叫其他的函式,不管他們是我們寫出來的,又或是前面提到的是由編譯器提供的
所以你如何取得那些預寫的函式?要取得那些編譯器所擁有的標準函式,你可以含括一個#include的前置指令,這樣做可以有效地將每件事放在標頭檔中然後貼到你的程式中,讓我們看看一個正在使用的程式:

#include <iostream>

using namespace std;

int main()
{
  cout<<"HEY, you, I'm alive! Oh, and Hello World!\n";
  cin.get();
}

讓我們看看程式的元素,這個#include是一個”前置處理器”指令,告訴編譯器在真正建置執行檔前從一個叫做iostream的標頭檔放程式碼到我們的程式中,藉著含括標頭檔,你獲得存取許多不同函式的權限,例如,cout函式需要iostream,include之後是敘述”using namespace std;”,這一行告訴編譯器使用標準函式庫(std)的一部分函式,藉著在檔案前面含括這一行,你允許程式使用像是cout的程式,分號是C++語法的一部分,它告訴編譯器這是一個命令的結束,你稍後會看到分號被用在C++很多的命令結束部份。

接下來重要的一行是int main(),這一行告訴編譯器有一個函式叫做main,這個函式會傳回一個整數,因此寫int,這個”大括號” ({ 跟 })表示函式跟其他程式區塊的開始跟結束,你可以把他們想成是BEGIN跟END的意義。

程式的下一行看起來有點奇怪,假如你有寫過其他的程式語言的話,你可能會認為是用來顯示字串的print函式,然而在C++裡,這個cout物件用來顯示文字(唸作”C out”),它使用<<符號,就是我們所知的”插入運算子”,表示有什麼要輸出,cout<<導致隨後的文字作為這個函式的參數,引號告訴編譯器,你要輸出的字串原樣,’\n’序號實際上是被視為一個單一的字元,代表著一個新行(我們稍後會有更詳細的說明),它移動螢幕上的游標到下一行,再一次注意到分號,它被加在很多行的後面,像是C++的函式呼叫。

下一個命令是cin.get(),這是另一個函式呼叫:它讀取輸入並且期望使用者按下ENTER鍵,很多編譯器環境會開啟一個命令列視窗,執行程式,然後關閉視窗,這個命令會讓視窗不會關閉因為程式尚未完成因為它正等著你按下ENTER鍵,含括這一行會給你時間來看看程式的執行。

在到達main的結尾,結束的括號,我們的程式會傳回0的值(而且是整數,這也是為什麼我們會告訴main傳回一個int)給作業系統。這個傳回值是重要的,它可以用來告訴OS我們的程式是否成功,傳回0的值表示成功,而且是自動傳回(但這有main這樣,其他的函式需要你手動傳回一個值),但是假如我們想要傳回其他的東西,像是1,我們就必須有一個處理return的敘述:

#include <iostream>

using namespace std;

int main()
{
  cout<<"HEY, you, I'm alive! Oh, and Hello World!\n";
  cin.get();

  return 1;
}

最後的括號結束函式,你可以試著編譯這程式並且執行它,你可以將程式碼剪下貼到檔案裡,將它存成.cpp檔,我們的Code::Blocks教學可以帶你建置一個簡單的程式,所以如果你搞混了就檢查看看。

假如你沒有使用Code::Blocks,你應該閱讀編譯器關於如何編譯的資訊說明。

一旦你拿到第一隻程式執行,為什麼不試著玩一玩cout函式來適應C++的撰寫?

在你程式的旁邊註解

當你學習程式設計時,你應該也開始要學習如何解釋你的程式(如果沒有其他人就是為你自己),你可以增加註解到程式碼中;我會常常使用註解來幫註解事程式碼範例。

當你告訴編譯器有一段的文字是註解,它會在執行程式碼的時候忽略它,允許你使用任何的文字來描述你真實的程式碼,要新增一個註解不是使用 //來告訴編譯器這一行之後是一個註解,就是用 /* 然後 */來區隔這之間的文字是一個註解,在某些的編譯器環境中會改變註解區域的顏色,但是有些則不會,確定不要意外地將你需要的程式碼給註解起來(那就是說,告訴編譯器說你的程式碼某個部份是註解),當你學習程式設計時,能夠將一段程式碼註解起來是有用的因為這樣可以看出這個輸出是怎樣。

使用者互動跟使用變數儲存資訊

到目前為止你已經學了如何寫一個簡單的程式來顯示程式設計師就是你所輸入的資訊,以及如何用註解來描述你的程式,那很棒,但是關於跟你的使用者互動呢?幸運地,也有可能讓你的程式來接受輸入了,你所要用的函式被稱為cin,而且後面會有插入運算子>>。

當然,在你試著接受輸入之前,你必須有一個地方可以儲存輸入,在程式設計裡,輸入跟資料被儲存在變數裡,有幾個不同的變數型態來儲存不同種類的資訊(例如,數值對字母);當你告訴電腦你宣告一個變數,你必須含括資料型態還有變數名稱,幾個基本的型態包括char、int跟float。

一個char型態的變數儲存一個單一字元,int型態的變數儲存整數(沒有小數點的數值),而float型態的變數儲存有小數點的數值,每一個變數型態 – char、int跟float – 是一個你在宣告一個變數時使用的關鍵字。

所有這些變數型態做什麼用?

有時候有這麼多種變數型態當它看起來像某些變數型態是多餘的時候會令人難以理解的(為什麼當你有浮點數時用整數數字),使用正確的變數型態讓你的程式碼可以閱讀跟有效率是很重要的–有些變數需要比其他變數還要多的記憶體,此外。因為數字儲存的方式是真正存在記憶體內,浮點數是”不精確的”,而且在你需要儲存一個”精確的”整數值不能夠使用。

在C++裡宣告變數

要宣告變數你要使用語法”type <name>;”,這裡有一些變數宣告的範例:

int x;
char letter;
float the_float;

在同一行宣告相同型態的多個變數是允許的;每一個變數應該用逗號分隔。

int a, b, c, d;

假如你注意看,你可能看到宣告一個變數之後會加上分號(注意這跟你呼叫一個函式是相同的程序)。

在C++裡宣告變數常見的錯誤

假如你嘗試使用一個未經宣告的變數,你的程式將不能編譯或執行,之後你會收到一個錯誤訊息通知你犯了一個錯誤,通常,這稱作未宣告的變數

大小寫區分

現在是時候來討論一個你很容易丟的一個重要觀念,大小寫區分,基本上,在C++裡,不論你是使用大寫或小寫字母,這個Cat跟cat兩個字的意義對編譯器來說是不同的,在C++裡,所有的語言關鍵字,所有的函式和所有的變數都是大小寫區分的,在例子裡你的變數宣告跟變數的使用不同就是你可能會得到一個沒有宣告的變數錯誤的原因。

使用變數

Ok,所以你現在知道如何告訴編譯器變數的事,但是有關於使用他們的事嗎

這裡有一個範例程式描述變數的使用:

#include <iostream>

using namespace std;

int main()
{
  int thisisanumber;

  cout<<"Please enter a number: ";
  cin>> thisisanumber;
  cin.ignore();
  cout<<"You entered: "<< thisisanumber <<"\n";
  cin.get();
}

讓我們掰開這一個程式,並逐行檢查,關鍵字int宣告thisisanumber是一個整數,函式cin>> 讀取一個值到thisisanumber;使用者在數植被程式讀取前按下enter,cin.ignore() 是另一個讀取並拋棄一個字元的函式,記住當你輸入到程式的時候,它也會用到enter鍵,我不需要這個,所以我們要把它丟掉,記住變數被宣告為整數,假如使用者嘗試輸入一個有小數的數值,它會被截掉(那就是,數值的小數部份會被忽略),當你執行範例程式時試著輸入一列的字元或是一個有小數的數字;回應會隨著輸入的不同而不同,但是在任何情況下都非常地漂亮,注意在印出變數的時候不需要加引號,如果有引號,輸出就會是 “You Entered: thisisanumber.”,少了引號通知編譯器這是一個變數,因此程式會檢查變數值以便在執行輸出函式時可以將變數名稱取代為變數,不要被一行內用了兩個新增運算子而搞混,一行內含括多個新增運算子是可以完全接受的,而且所有的輸出會在相同的地方,事實上,你必須用它自己的新增運算子(<<)來分隔幾個字串常數(有用引號刮起來的字串)跟變數,試著將兩個變數放在一起然後只用一個 << 會有錯誤訊息給你,不要這樣嘗試,不要忘記結束函式跟宣告要用分號,假如你忘記分號,在你試著編譯程式的時候,編譯器會給你一個錯誤訊息。

感遍及比較變數

當然,不論你使用什麼型態,變數不能修改就會無趣,一些變數使用的運算子有下列:*、-、+、/、=、==、>、<,* 乘法、 – 減法跟 + 加法,當然也要瞭解倒要修改成事裡的變數值要使用等號也是相當重要的,在某些語言裡面,等號比較左邊跟右邊的值,但是在C++裡面是用 == 來做比較,等號仍然相當有用,變數設置在等號左邊,必須有一個而且只有一個變數等於等號右邊的值,這個執行數學函式的運算子用在等號右邊是為了將結果指定到左邊的變數,這裡有一些範例:

a = 4 * 6; // (Note use of comments and of semicolon) a is 24
a = a + 5; // a equals the original value of a with five added to it
a == 5     // Does NOT assign five to a. Rather, it checks to see if a equals 5.

另一個等號形式,==,它不是用來指定值給變數,相反地,它檢查變數是否相等,它在其它C++的領域裡頭也很有用;舉例來說,你會常使用 == 在條件敘述跟迴圈這樣的建構式中,你能會猜 < 跟 > 的功能為何,他們是大於跟小於的運算子。

舉個例說:

a < 5  // Checks to see if a is less than five
a > 5  // Checks to see if a is greater than five
a == 5 // Checks to see if a equals five, for good measure

比較變數要只到你有使用到結果的時候才會真正有用 –那是第2課的課程if敘述 要討論的。

你是否可以跟到? 測驗一下吧

下一課: If 敘述 – 有條件地改變程式的行為

回到教學的目錄

馬上成為工作達人的Fans

About ㄚ琪

工作達人Fun Taiwan的創辦者及總編,可以在這裡更認識他。

3 comments

發表迴響

你的電子郵件位址並不會被公開。 Required fields are marked *

*

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料

Scroll To Top