基本的變數與運算

在學會了如何在畫面上輸出文字之後,光是能在畫面上輸出文字是沒有太大用途的,因為我們還少了一個重要的步驟那就是運算,電腦最大的長處就在於他可以進行大量且複雜的運算,在這篇教學中我們將介紹如何進行簡易的運算

運算

c語言的數值運算分為加、減、乘、除以及求餘數這幾種,基本上和我們在小學裡學到的數學沒兩樣,語法如我們下面所列

加法: 左算子 + 右算子
減法: 左算子 - 右算子
乘法: 左算子 * 右算子
除法: 左算子 / 右算子
模除法: 左算子 % 右算子

我們以下就介紹簡單的例子

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    printf("1+1 = %d\n", 1+1);
    system("PAUSE");
    return 0;
}

在上面這個例子中,我們運用先前所學到的printf,在參數的地方寫入1+1,讓電腦幫我們計算它的結果,然後填空到前面的預留位置中,輸出的結果會是

1+1 = 2

這只是一個最簡單的加法運算例子,接著我們看一些其它的運算

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    printf("Result: %d\n", 3*4 + 6 - 2);
    system("PAUSE");
    return 0;
}

這次我們在參數的地方寫了

3*4 + 6 - 2

電腦幫我們計算的結果為16,所以會在畫面上輸出

Result: 16

值得注意的是,c語言運算的優先規則為先乘除後加減,那你說如果想讓加法先做該怎麼辦?很簡單,用括號將其括起來即可

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    printf("Result: %d\n", 3*(4 + 6 - 2));
    system("PAUSE");
    return 0;
}

因為在上例中4 + 6 - 2被括起來所以先行被計算,結果變成3*8,所以輸出結果就會是

Result: 24

接著我們再加入除法試試

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    printf("Result: %d\n", 3*((4 + 6)/2));
    system("PAUSE");
    return 0;
}

在這裡我們讓4+6除以2,得到5,再和3做乘法,得到結果

Result: 15

接著,我們介紹模除法,也就是求餘數

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    printf("Result: %d\n", 7 % 2);
    system("PAUSE");
    return 0;
}

注意這裡模除法用的符號是 % ,和我們所見到的printf裡的格式符號是一樣的,不過在運算式子裡這是表示模除法也就是求餘數的意思,因為7除以2的餘數是1,所以程式的執行結果應為

Result: 1

小數點運算

我們先前所看到的運算都是整數的運算,事實上對於電腦而言整數的運算和小數點的運算是不一樣的兩回事,我們先來看一個可能令你覺得百思不得其解的奇怪例子

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    printf("Result: %d\n", (2/3)*3);
    system("PAUSE");
    return 0;
}

在這個算式中我們寫了

(2/3)*3

直覺上答案應該會是2是吧? 但運算出來的結果卻是

0

為什麼會有這樣令人驚訝的結果? 原因很簡單,電腦是以整數來處理這些算式的,2/3雖然是0.66666...,但是因為算式兩邊都是整數,所以結果也是整數,整數意思就是不帶有小數點,因此運算的結果小數點都會被去掉,(2/3)*3變成0.666*3,但因為0.666..小數點被捨去,變為0,0*3是0,因此最終的結果便為0

很多初學者很容易在此出錯,那麼你可能會問,即然如此我該如何用小數點進行運算呢?很簡單,把算式左右邊的數字其中一個變為小數點即可,例如我們將算式改為

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    printf("Result: %d\n", (2/3.0)*3);
    system("PAUSE");
    return 0;
}

因為2/3.0,其中3.0是小數,以專業的術語來說,它是浮點數,因此為了能進行運算,電腦會將左邊的數字也轉成浮點數來進行運算,因此(2/3.0)變成了(2.0/3.0),結果就會是0.6666...,不過因為電腦儲存的小數點位數有限,所以其實小數只會取近似值,接著0.666..再*3,才會得到3.0這個答案,我們列出以下表來說明整數與浮點數進行運算之間的轉換關係

左算子 右算子 結果
整數 整數 整數
整數 浮點數 浮點數
浮點數 整數 浮點數
浮點數 浮點數 浮點數

由這表我們可以得知只要把左右算子中的任一個改寫為浮點數,其算出來的結果就會是浮點數,下面列出一些如果你想要運算結果變為浮點數的改寫例子

2/3 可改寫為 2/3.0
10/9 可以改寫為 10/9.0
10*5 可改寫為10*0.5
20+30 可以改寫為 20+30.0

當然,你可以兩邊都改成浮點數,這樣運算的結果一樣還是浮點數

變數

在瞭解了基礎的c語言運算,回想我們人類在計算的過程中,往往都不是直接算出答案來的,而是有運算的過程,中間需要紙筆來把當前的算式記住,同時我們也會有公式可以代入運算,每次算的數字都不一定會一模一樣,在程式語言裡也有類似的概念,叫做變數,也就是可以讓你將資料暫時記住,之後可以拿來做運算,它的語法如下

形態 名稱;

它也可以一開始就指定初始值,寫法為

形態 名稱 = 初始值;

我們來看一個簡單的例子

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    int a = 10;
    int b = 20;
    printf("a + b = %d\n", a + b);
    system("PAUSE");
    return 0;
}

在這個例子中我們宣告了兩個變數,形態是都int,也就是整數,名稱分別為a和b,初始值分別為10和20,在宣告完成後,電腦就認得了這兩個變數,它會配置記憶體空間給這兩個變數用來儲存數字的內容,從此之後你就可以使用a和b這兩個名稱來取代他們該放數值的地方

變數還有一個很大的特色,就如同他名稱所暗示的,它是可以被改變的,我們來看另一個例子

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    int a = 10;
    int b = 20;
    int c;

    c = a + b;
    printf("a + b = %d\n", c);

    c = a - b;
    printf("a - b = %d\n", c);

    c = a * b;
    printf("a * b = %d\n", c);

    system("PAUSE");
    return 0;
}

如同這個例子所示,我們新增了一個變數c,並且將a+b、a-b和a*b的結果存到變數c裡再分別秀出來,這個動作叫指派,它的語法如下

變數名稱 = 指派的值;

請特別注意很多初學者都會將這裡的等號和以前在數學裡學到的等於搞混,在此的等號和數學課所學到的等號是不一樣的,我們在此的等號稱之為 “指派” ,因為電腦會將數值資料搬移到變數所佔有的空間來儲存,和等號是沒有人何關聯性的,請不要搞錯了,為了容易好記,可以把等號想像成指向左邊的箭頭

變數名稱 <= 指派的值

想像數值是從右邊被複製到左邊的變數裡,而事實上電腦也是這麼做的,如此一來就比較不容易弄混指派與等於

Table Of Contents

Previous topic

基本輸出

Next topic

基本輸入

This Page