編譯式語言/直譯式語言
編譯式語言:需要事先根據執行環境編譯(compile)成可以執行的機器碼
ex. C/C++
直譯式語言:不需編譯過程,是在執行過程中一行行直譯成機器碼執行
ex. Python、JavaScript、PHP...編譯式語言優/缺點
優點:程式執行效能好(速度快)
缺點:開發、除錯速度較慢- C語言副檔名為
.c
- C語言編譯過程
.c
程式原始碼進行程式碼展開等預處理---透過預處理器(pre-processor)
-> 轉成組合語言---透過編譯器
-> 轉成目地(object)檔案(副檔名為.o
檔案)---經過組譯器(assembler)
-> 讓目的檔成為電腦可執行的檔案---透過連接器(linker)連接函式庫(libraries 為其他已經寫好的可用程式碼) - 簡單C語言範例&說明
- repl.it 預設 run 只會執行 main.c 的檔案,若需要執行其他檔案需要點選 shell 自行輸入指令編譯後執行:
xxxx為檔案名稱
執行檔案:clang-7 -pthread -lm -o xxxx xxxx.c
./xxxx
- C 語言中變數前面需要
宣告資料型態(data type)
,不同資料型別可以表示的範圍和佔用的空間不同 - 在 C 程式語言中
=
等號非相等是給定值的意思,比較是否相等為==
- 除了 %d 可以指定 10 進位整數外,還有其他格式化指定:
%d:顯示 10 進位整數。例如 10, 20
%f:顯示浮點數(有小數點小數)。例如 0.2, 2.1
%c:顯示字元。例如 'B', 'a'
%s:顯示字串。例如 "ABC", "大家好"
#include <stdio.h>
int main(void) {
int age = 20; //int定義為整數
float eye = 0.8; //float定義為浮點數
printf("我是%s,今年:%d歲,視力: %f\n", "小明", age, eye);
return 0;
}
- C 語言資料型別:整數(Integer)、浮點數(Float)、字元(Character)
- 浮點數有分
float
和double
資料型別,後者的表示數字範圍大於前者許多,然而後者所佔用的記憶體空間是前者兩倍。unsigned 則代表非負數意思。 - 字元
char
是一個半形文字的意思(一個中文字是多個字元)。char 可以表示-128~127
的數字,佔用 8 位元空間。在 C 語言中字元用單引號''
表示。
p.s. 字元變數僅能儲存單一字元。字串和中文為多個字元 - 字串
strings
是多個字元的集合體(陣列)。使用""
雙引號包裹字串,最後一個字元需為\0
代表字串結束(宣告變數時不需輸入但要預留空間)。
-> index 索引從零開始,[0]
代表第一個字元。
// 字串長度 + 1(預留字串結束符號),宣告後需立即給值
char name[6] = "Jacky";
// 代表 J,index 從 0 開始
name[0];
- 在邏輯中若使用整數輸出
1
代表 true,0
代表 false - 比較運算子 & 邏輯運算子
比較運算子與python相同
- 注意若是計算順序可以參考:括號內優先,先乘除後加減
%
:取餘數 -> x % y (例如:7 % 3 為 1) - 輸入運算子
scanf 用來取得使用者的輸入後,再存入變數所在的地址
scanf 與 printf 差異:scanf前面需要再加個&
來取址
// & 為取址運算子,會將變數的記憶體位址取出,則輸入的數值就知道變數的記憶體位址並儲存(但字元陣列名稱由於本身就有位址資訊,故不用使用 & 來取址。)
int input;
scanf("%d", &input);
- C 語言 if else 條件判斷
if...else
# include <stdio.h>
int main() {
int age = 20;
// 當變數大於 20 進入程式區塊
if (age > 20) {
printf("恭喜可以投票!");
} else {
printf("sorry, 你還未成年喔!");
}
printf("程式結束");
}
if...else if...else
# include <stdio.h>
int main() {
int age = 40;
// 當變數大於 65 進入程式區塊
if (age >= 65) {
printf("喔喔,年齡在 65 以上的長者\n");
} else if (age >= 40 && age < 65) {
printf("喔喔,你現在是壯年\n");
} else {
printf("喔喔,你現在是青年\n");
}
printf("程式結束");
}