首頁 關於 支持
上一篇:設定C++編寫環境 下一篇:章節0-2 章節0-1練習題
快速移動至特定內容
C++基礎架構
變數
賦值
陣列
輸入、輸出
基礎運算

章節0-1.C++基礎語法(一)

C++基礎架構

可以執行的C++程式的基本架構如下,以下這段程式碼電腦可以正常編譯並運行了(編譯是指運行C++必經的過程,將人類閱讀的程式碼轉換成給電腦運行的機器碼,類似翻譯的動作),只不過這段程式碼並不會做任何事,需要將「//程式內容」替換成要執行的程式碼。

請將這段程式碼牢牢記住,要隨時都能迅速地寫出來,可以不用死記,多練習幾次自然會記起來。

#include<bits/stdc++.h>
using namespace std;
int main(){
    //程式內容
}

雖然以上的架構還沒有實際編寫要執行的程式,但請先牢記「C++中每段程式碼的結尾都要有分號;」,在後續開始編寫時請謹記要加上;。

另外在程式碼中寫上//會讓該行在//以後的部分成為「註解」,電腦並不會執行這部分,通常是作為註記用途,本教學會利用註解來補充說明程式碼的用途。

點此以展開額外內容→ 補充:以上程式碼各部分的意義

變數

程式中最重要的功能之一就是變數的使用,建立變數就是告訴電腦將一個資料暫時儲存起來,後面的程式就能依據這個存起來的資料進行操作、運算。

在程式中建立新的變數稱作宣告變數,C++宣告變數的方式為「變數型別 變數名稱;」,變數型別代表變數想儲存怎樣的值,例如最常見的整數int。

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n; //宣告整數變數n
    int x,y; //一次宣告多個同型別的變數,可以用逗號分隔
}

此外尚有浮點數double,可以用來儲存小數,若在C++程式碼中寫了包含小數點的數字,如「1.0」,也會被視為double。除此之外C++程式碼內還有一種表示法為科學記號,輸入「2e3」代表「2*103」也就是2000,在程式碼內此種表示法也會被視為double。

long long int用來儲存較大的整數(大於2147483647,約為2*109),在C++程式碼中的整數數值後寫上LL(小寫亦可)則可以告訴電腦現在寫的這個整數要視為long long int。

若使用int儲存過大的數,則會因為「溢位」,也就是超出int能處理的範圍,導致數字變成亂數,這點在運算過程中也可能發生,如「int a=100000,b=100000;」,此時a*b變會溢位導致出現錯誤結果,解決方式就是使用long long int進行運算。

補充:double與long long int的詳細說明

此外還有char、string兩種與文字相關的型別,只是由於其性質與以上所述的其他型別相差很大,因此獨立在章節0-3介紹以避免混淆。

重點整理:型別的轉換
C++中若涉及不同型別的運算,就會牽扯到型別轉換,如「1.0*5LL」,此時C++會將運算結果的型別以「比較強」的型別處理,換句話說原先的型別可能會被轉換成其他型別,稱為轉型。
而上述比較強的意義其實是變數能儲存的值範圍較廣,故以上種類變數的排序會是「double > long long int > int」。
如此就可以知道「1.0*5LL」算完會是double。

C++中型別是非常重要的,在遇到不同型別混合運算時請謹記此規則。

另外在某些時候,我們會希望將一個值的型別直接轉換,例如使用科學記號表示整數。
這時候可以使用一個方法叫「強制轉型」,將變數或運算結果前面加上「(轉型種類)」就可以了,注意強制轉型只會影響後面接著的一個值。
舉例來講,不想寫「1000...000LL」來表示1018,可以用「(long long)1e18」替代。

賦值

而宣告了變數後,我們通常需要給予其一個值,稱為「賦值」,賦值的方式是「變數名稱=值;」,右邊的值可以是直接一個數值或者由其他變數進行運算,總之會將等號右邊的內容存到左邊的變數中。

注意變數如果沒有由輸入取得值(本篇後面會介紹到利用cin讓變數儲存輸入的資料),就必須在宣告時進行賦值的動作,否則後續使用該變數容易出現bug。

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    n=1; //將n賦值1
    int m=2; //宣告時亦可賦值
    //到這裡時變數n儲存的值為1,變數m儲存的值為2
    n=5,m=8; //不同變數的賦值可以由逗號分隔
    //對已經賦值過的變數進行賦值,會直接覆蓋掉原本的資料,到這裡時變數n儲存的值為5,變數m儲存的值為8
    int x=n*m,y=n-m; //宣告後x為40,y為-3
}

陣列

而如果是要一次儲存很多變數的時候,則可以使用陣列,陣列可以一次建立數萬甚至更多個同型別的變數,在宣告時變數名稱後加上[陣列大小]就可以宣告一個陣列,而要使用陣列內的其中一項進行賦值或拿來運算時,一樣在變數名稱後加上[第幾項]就能使用(其中第幾項的編號被稱為索引值),如下。

#include<bits/stdc++.h>
using namespace std;
int main(){
    int a[10]; //宣告大小為10的整數陣列a
    a[1]=1,a[2]=4,a[3]=9,a[4]=16; //賦值陣列a的第一到第四項
    int n=a[3]+a[4]; //使用變數時一樣加上[第幾項(索引值)],例如此處是賦值n為a的第三項加第四項,結果為25

    int b[10]={1,2,3,4}; //可以將陣列的前4項(b[0]~b[3],陣列索引值從0開始編號,見下方說明)賦值為1,2,3,4
    //小陣列逐個賦值可以用此方法,但通常陣列直會使用迴圈(見0-2)輸入資料
}
補充:二維以上的陣列

需要注意宣告陣列後,陣列的索引值是從0開始編號,也就是說假設宣告陣列大小為10的時候,實際上可以使用的為a[0]、a[1]、...、a[9],恰好10項,若使用超過9的索引值可能導致程式出現錯誤,因此建議宣告時陣列大小至少使用「可能會用到的最大大小+5」。

另外建議可以養成將陣列宣告在全域的習慣,也就是在int main()的上方,如下,因為宣告在main內有時候會因為陣列大小太大導致程式掛掉中斷執行,但宣告在main外基本上可以宣告到上億的陣列大小,除此之外宣告在全域的好處還有會自動初始化,即開始執行時所有值都會是零,另外在不同函式(章節0-4會介紹,總之記得會比較方便就是了)也能使用該陣列。

#include<bits/stdc++.h>
using namespace std;
int a[100005];
int main(){
    a[0]=1,a[1]=2;
}

輸入、輸出

C++最簡單的輸入、輸出方式就是使用cin、cout,用法為輸入時「cin>>變數1>>變數2>>變數3;」、輸出時「cout<<內容1<<內容2<<內容3;」。

輸入時請確保輸入內容跟變數型別一致,而輸入只要遇到空格或換行,就會依序讀入不同變數中,如「cin>>n>>m;」輸入「3 6」,在執行到cin那一行程式碼後n會變3、m會變6。

而輸出時由<<串起來的內容會依序輸出,這些內容可以是各種變數,也可以是直接寫在程式碼的運算式,如「cout<<10;」。
如果要輸出字母或空格可以直接在<<後寫「'a'」或「' '」(兩個英文單引號中間有字母、空格),單引號裡面可以放單個英文字母、空格或「\n」(視為一個字母,表示換行),程式就會認出這是表示「單個字母」的資料。
如果是一串英文字母可以使用雙引號,如「"Hello, World!"」,雙引號會讓程式將這段內容辨識成「一串字母」。

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin>>n>>m;
    cout<<n+m;
    //以上程式可以進行兩個整數的加法
    //如輸入「5 7」,則會輸出「12」
}
#include<bits/stdc++.h>
using namespace std;
int main(){
    string name; //字串型別,在0-3介紹,這裡只要暫時知道他是用來存一串字母的就好
    cin>>name;
    cout<<"Hello, "<<name<<'\n';
    //以上程式碼可以輸入一個名字,並輸出「Hello 名字」然後換行
    //如輸入「Samuel」,則會輸出「Hello, Samuel」
}
補充:輸出浮點數的說明

基礎運算

C++中進行基本運算的方式跟平常四則運算的規則一樣,+-*/並用時有先乘除後加減的規則,而如果有()會先將()內的內容運算完,並且多層()時一樣從最內層進行運算。而C++常見的運算還有取餘數,或稱取模,運算的符號是%,例如5%3代表5除3的餘數,運算結果是2,但須注意取模運算只適用於兩個整數間。另外需要注意的是程式中不能出現/0或%0的情況,因此若出現/a或%a時,請確保變數a的值不會是0。

雖然說C++的基本運算與平常數學的用法基本一樣,但唯一需要注意的是型別問題。例如「9/2」的結果,看似是4.5,但由於兩個數都是int型別,因此運算結果也會以int處理,而C++中對於無法整除、小數變整數,都是以無條件捨去來處理,因此9/2的結果為4。如果要得到4.5的話可以使用「9.0/2」,由於前面提及C++會以較強的型別來處理運算結果,而double較強,因此最終的結果會是4.5。

另外請注意C++沒有內建指數的運算子,也就是不像某些語言有a**b代表a的b次方的寫法,而a^b也不是a的b次,請不要用錯了。

如果今天要操控變數的值,例如將某個變數的值+5,除了可以使用賦值的方式「n=n+5;」,C++還有可以直接操作變數的方法,就是寫成「n+=5;」,這時變數n的值就會直接加上5了,同理有「-=」、「*=」、「/=」、「%=」;另外,對於整數變數還有兩種方式,「n++;」、「n--;」,分別會將變數n增加1與減少1,等同「n+=1;」、「n-=1;」。

小技巧:變數操作完會丟出操作完的值