#include <stdio.h>
#include <stdlib.h>
void main() {
/* some comments */
printf("Hello World!");
system("PAUSE");
return 0;
}
我們一步一步拆開來看看
#include <stdio.h>
#include <stdlib.h>
這是在 C program 編譯之前要處理的內容,我們稱為預處理命令(preprocessing command)。預處理命令還有很多,它們也都以 #
開頭,並且不用分號結尾。
而 stdio
是 standard input output 的縮寫,也就是有關輸入輸出的標頭檔(head file)stdlib
也就是 standard library,包含了 C 與 C++ 裡最常用的一些函數。
void main()
main function
,從這裡開始執行 C program。
/* some comments */
註解,C program 不會編譯執行裡面的任何內容。單行註解的話使用雙斜線 //
printf("Hello World!");
printf
指令可以輸出內容顯示在螢幕上。
system(“PAUSE”);
return 0;
程式暫停,按任意鍵繼續。
Types | Data Types |
---|---|
Basic data types | int , char , float , double |
Enumeration data type | enum |
Derived data type | pointer , array , structure , union |
Void data type | void |
列舉 (
enum
或enumeration
) 是另一種複合型別,主要是用在宣告僅有少數值的型別,像是一星期內的日期 (day of week) 或是一年內的月份等。
int
是用來宣告整數資料型態。Keyword | Byte | Format String | Comment |
---|---|---|---|
float | 4 bytes | %f |
浮點數 |
double | 8 bytes | %lf 、%l |
雙精度浮點數 |
%c
用來宣告字元資料型態。Variable is a named location in a memory where a program can manipulate the data. This location is used to hold the value of the variable.
變數宣告需要在變數「初次」使用前完成,不可在其被使用後才進行宣告。
至於宣告的位置並沒有特別規定,可以在任何地方進行宣告。
不過還是習慣於最一開始的時候先進行宣告。
printf
& scanf
printf
, scanf
)是 C語言非常重要的函式,也是 C語言必學的兩個函式。在 C語言的程式中,幾乎每一個程式都會使用到這兩個函式,尤其是輸出函式。printf
或者是 scanf
,那麼在撰寫時就需要引用標頭檔(head file)stdio.h
。stdio 為 standard input output 的縮寫,而這兩個函式就包含在這個標頭檔裡。printf
的功能很強大,用法靈活,比較難掌握;而 scanf
用法相對比較固定。printf
printf
,print format 的縮寫。Syntax:
# include <stdio.h>
int printf (const char *format, ...);
標準語法如上。
以下舉幾個例子來示範 printf
的使用方法。
printf("字符串\n");
# include <stdio.h>
int main(void)
{
printf("Hello World!\n");
return 0;
}
\n
表示換行的意思,是一個跳脫字元。n
為 new line 的縮寫。printf
裡必須使用雙引號("
),雙引號內的字幅串可以是英文,也可以是中文。printf("輸出控制符",輸出參數);
# include <stdio.h>
int main(void)
{
int i = 10;
printf("%d\n", i);
return 0;
}
i
以十進制的方式輸出。i
本身就是十進制,又為甚麼還要將 i
以十進制輸出?因為程式碼中,雖然寫的是 i=10
,但是在記憶體中並不是將「10
」這個十進制的值存進去,而是以二進制的方式存進去。所以我們在輸出的時候就必須要有「輸出控制符」(或稱格式指定字,format specifier)來告訴系統應該怎麼解讀這個二進制的數值。scanf
scanf
,scan format 的縮寫。scanf
與 printf
的用法幾乎完全一樣。但是需要注意以下兩點:
\n
&
,不過字元或陣列不需要加上&
(至於為甚麼,等之後上到指標的時候會再解釋)。以下也示範幾個例子說明 scanf 的使用方法。
#include <stdio.h>
int main() {
int a = 0, b = 0, c = 0, d = 0;
scanf("%d", &a);
scanf("%d", &b);
printf("a+b = %d\n", a+b);
scanf("%d %d", &c, &d);
printf("c*d = %d", c*d);
return 0;
}
從鍵盤上輸入 12
,按下 Enter 鍵之後,scanf()
就會讀取輸入數據並給定給變數 a
,本次輸入結束。接著執行下一個 scanf()
,再從鍵盤輸入 60
,按下 Enter 鍵就會將 60
給定給變數 b
。
後面的 scanf()
有兩個用空格分開的 %d
,後面跟著兩個變數 c
、d
,這個代表我們要一次輸入兩個整數,並且會分別給定給 c
和 d
。注意,%d %d
之間是有空格的,所以我們在輸入數據時也要有空格。對於 scanf()
,輸入數據的格式要和控制字符串的格式一樣。
scanf(“%d %d”, &a, &b); // 獲取使用者輸入的兩個整數,分別給定變數a和b
printf(“%d %d”, a, b); // 將變數a和b的值在螢幕上輸出
scanf 和 printf 非常相似,只是功能相反。
兩者都有格式控制字符串,都有變數,不同的是 scanf 的變數前需要加一個 &
符號。
而 &
稱為取址符號,也就是可以獲得變數在記憶體的位址。(詳細內容會在指標單元詳細介紹)
#include <stdio.h>
int main() {
int a, b, c;
scanf("%d %d", &a, &b);
printf("a+b=%d\n", a+b);
scanf("%d %d", &a, &b);
printf("a+b=%d\n", a+b);
scanf("%d, %d, %d", &a, &b, &c);
printf("a+b+c=%d\n", a+b+c);
scanf("%d is bigger than %d", &a, &b);
printf("a-b=%d\n", a-b);
return 0;
}
使用者每次按下 Enter 鍵,程式就會認為完成了一次輸入操作,scanf()
開始讀取使用者的輸入內容,並且根據格式控制符中提取有效的數據,只要使用者輸入的內容和格式控制符匹配,就能夠正確提取。
scanf
連續輸入我們將前兩個程式碼改寫看看!
scanf()
讀取完後並沒有拋棄多餘的值,而是將它們保存在某個地方,下次接著使用。scanf()
把前面兩個整數給讀進去了,此時剩下一個整數 60
。而第三個 scanf()
要求要輸入兩個整數,一個單獨的整數 60
並不能滿足其要求,所以我們還是必須輸入數值湊足兩個整數以後,第三個 scanf()
才能正確讀取。所以,從基本上我們可以發現從鍵盤輸入進去的數值並沒有直接交給
scanf()
,而是放入一個「緩衝區」,直到我們按下 Enter,scanf()
才會到緩衝區去讀取數值。如果緩衝區的數值符合scanf()
的要求,那麼就可以讀取結束;如果不符合要求,那麼就繼續等待用戶輸入,或者乾脆讀取失敗。
以此算式為例:
Types of Operators | Description |
---|---|
Arithmetic operators | 用於執行數學計算,例如:加減乘除和取餘數。 |
Assignment operators | 用在為變數分配值(value)。 |
Relational operators | 用來比較兩個變數的值。 |
Logical operators | 對給定的變數執行邏輯運算。 |
Bit wise operators | 對於給定的兩個變數執行 bit operations。 |
Conditional (ternary) operators | 如果條件為 true,則條件運算子會回傳一個值;如果是 false,則回傳另一個。 |
Increment / decrement operators | 用於將變數的值增加或減少一。 |
Special operators | &、*、sizeof() 和 ternary operators。 |
++
遞增運算子與 --
遞減運算子順序 | 運算子 |
---|---|
1 | () 小括號 |
2 | + 正數、- 負數 |
3 | * 、/ 、% |
4 | + 、- |
5 | < 、<= 、> 、>= |
6 | = 、!= |
7 | && |
8 | || |
9 | = assign、*= 、/= 、%= 、+= 、-= |