Download presentation
Presentation is loading. Please wait.
1
C programming
2
程式語言分類 第一代 機器語言 第二代 低階語言 第三代 高階語言(程序導向語言) 第四代 極高階語言(物件導向語言) 第五代 自然語言
EX: 組合語言 第三代 高階語言(程序導向語言) EX: FORTRAN、COBOL、PASCAL、Ada、C、BASIC、Perl 第四代 極高階語言(物件導向語言) EX: C++、JAVA、VB、PHP、C#、Python、smalltalk 第五代 自然語言 EX: LISP、PROLOG
3
C語言的編譯流程 載入階段 執行階段 compiler linker loader Source code Object code
Execute code RAM 執行 .obj檔 .exe檔 (binary code) Compiler: 將高階程式翻譯成組合語言程式 Assembler :將組合語言程式轉譯成obj Linker: 連結函式庫 Loader: 載入到memory 載入階段: 將靜態宣告載入,ex: int a[10]; 執行階段: 執行動態宣告, ex: int* a = new int[10];
4
scanf()、gets() 輸入整數: 輸入字元: 輸入字串: [法一] char c; scanf(&c); [法二]
scanf(“%c”,&c); &: 表示先去RAM取一個位址 char a[80]; gets(a);
5
printf %d 整數 int %f 浮點數 float(6位)、double(14位) %c 字元 char
%s 字元陣列 char* a 、char a[] 固定數值顯示兩位 EX1: EX2: EX3: float(6位)、double(14位) 超過時最後一位四捨五入 C++才有string 固定顯示小數後兩位
6
練習 kb_basic_inputOutput (float)
7
Operator (運算子) operator 結合性 優先權 () [] -> . 左結合 高 低 ! ~ ++ -- *(指標)
&(取址) 右結合 * / % + - << (左移) >> (右移) < > <= >= == != & (AND) ^ (XOR) | (OR) && (且) || (或) ?: = += *= /= %=
8
Operator 的執行順序 Ex1 Ex2 Note: 先考量「優先權」再考量「結合性」
9
精確度 EX1 EX2 Ex1: 若a,b改成float =>
10
++、-- 前置加: 後置加: Ex1: Ex2:
11
8進制、16進制
12
ASCII碼 字母的ASCII碼: A = B = 66 …… a = b = 98 ….. Ex:
13
Loops For 語法: 無限迴圈
14
Loops while 語法: 成立 不成立
15
練習
16
break 如何不執行完迴圈就先行離開? Ex: 「break」 執行到第5次就離開迴圈
17
continue 如何不執行完迴圈內部程式碼就執行下一次迴圈? Ex: 「continue」 只會印出4次(∵第二次迴圈時沒印)
18
example
19
if、else 用途:條件判斷,用在2選1的情況 語法: Ex : 1 不是做case1就是做case2 2
20
else if 用途:條件判斷,用在n選1的情況(n>=3) (搭配if、else使用) 語法: 4選1,
依序從case1判斷至case4 若case1成立則離開,不會再判斷下面的case2~case4
21
字串轉整數 仍可轉化成功
22
練習 kb_basic_CountGR
23
練習 kb_basic_CountGR_v2
24
Array(陣列) 宣告 宣告+給值 如:欲儲存整數10、2、6至陣列 須給定陣列大小 (JAVA不能給定大小) int陣列不用加結束位元
25
Array(陣列) 宣告+給值 如:欲儲存字串「abc」至陣列 [寫法一] [寫法二] char陣列須加結束位元
26
strlen() 取得陣列內的元素個數(不含結束字元)
27
sizeof() sizeof() 「取得陣列宣告的大小」 x 「陣列元素type大小」 Note: int陣列內的元素大小為4 bytes
char陣列內的元素大小為1 byte
28
陣列 VS 字串 EX: d陣列的內容? strlen(d) = ? (3) d陣列的空間大小至少需多大才能儲存字串 「a」 ?
1 2
29
exmaple
30
整數轉字串
31
合併整數與字串
32
練習 kb_sprintf
33
練習 kb_sprintf_v2
34
二維陣列 儲存方式:row major 宣告: 宣告+給值: 3列4行 => 如何儲存?
35
二維陣列 – 儲存多個字串 2個字串 每個字串最長為10 長度=6 Why?
36
Exmaple 將二維陣列a的內容印出
37
練習 kb_array_2DimArray1
38
練習 kb_getIP
39
變數的可視範圍 區域變數:在function外的變數 全域變數:在function內的變數 區域變數(local variable)
全域變數(global variable) 可視範圍
40
全域變數 vs 區域變數 全域變數 是否可如此宣告? 區域變數 g = ??????
41
Function(函數、副程式) 型態 函數名稱(參數1, 參數2, ….) { //你的程式碼 return 型態值; }
回傳int型態資料: 不回傳資料:
42
Example 建立一個add函數(副程式)來執行兩數相加的功能 Function建立 Function使用
43
Call by value 將外部變數值代入function內,並在function內對其變數值進行運算。
44
陣列與函數 若修改s陣列第一個元素的值 sum陣列內容是否會改變???
45
練習 kb_function1
46
練習 kb_oddSum_evenSum
47
Function的擺放位置 若不使用Header(標頭檔) Project結構: Function須放置在主程式上面,
主程式:main.cpp Function須建立在主程式上面
48
Function的擺放位置 若使用Header(標頭檔) Project結構: 僅須確保Function標頭檔在主程式上面
主程式:main.cpp Function標頭檔需在主程式上面 副程式:qq.cpp 標頭檔:qq.h
49
Function的好處 可模組化你的程式 程式的可閱讀性提高 主程式雜亂 主程式乾淨
50
練習 kb_function2_v1
51
練習 kb_function2_v2
52
Macro(巨集) Macro = 簡易的function 語法: Ex: 名稱習慣全大寫 定義一個圓面積公式 定義一個取得兩數較小值的公式
53
Example result = ?
54
練習 kb_macro1
55
Function回傳值的應用 說明: 當Function的代入參數為位址時,可將回傳 值做為錯誤回報用途
56
練習 kb_function3
57
Pointer(指標) 陣列 位址 指標 宣告: 宣告+給值: EX: or s為一個char型態的指標變數 如何利用指標來實現此陣列 ?
陣列 位址 指標 宣告: 宣告+給值: or s為一個char型態的指標變數 EX: 如何利用指標來實現此陣列 ? 法一: 法二:
58
Pointer(指標) 輸出: s 給位址印出值 (印出S位址之後的所有值,一直到結束位元為止) Note:欲得知指標所指的data長度
用strlen mem內容 x a b c \0 mem位址 0x x x x x x05 s
59
Pointer(指標) 如何取得位址? 利用「&」運算子 EX1: EX2: memory X a 0x16 p *p
用&取得dd變數的位址 再多加一個*來取值 EX2: memory X a 0x16 p *p
60
Pointer(指標) 令int a[3] = { 0, 1, 2 },int* p =a; 令char a[3] = “ABC”,char* p=a; a 1 2 Q:如何經由指標p來取得a[1]的值? p Sol: *(p+1) a A B C Q:如何經由指標p來印出a[1]之後的所有值? (即印出B、C) Sol: printf(“%s”, p+1); p
61
練習 kb_pointer_practice_accessCharInt
62
example EX: *p++其值? (sol) ∵ *與++優先權相同且右結合 ∴ *(p++) ∵ ++為後繼加
∵ ++為後繼加 ∴ 會先取得*p的值再指到下一個位址 a 1 2 p a 1 2 p
63
Call by value (for C)
64
Call by address (for C)
65
Call by reference (for C++)
66
HW11(pointer_findPos)
67
字串與指標 一個字串: 多個字串: 不浪費 DD 字串個數 字串的最大長度 s 浪費 s+1 c o m p u t e \0 r i n
68
字串與指標 S S+1 *S *(S+1) 取得S[]的index位址 取得S[]的index位址內的值 (∵char* ∴值=址)
印出字串 取得s[0]的值 取得s[1]的值
69
動態產生一維陣列 動態產生int a[n] ? 令n=10 C語言: C++: 錯誤寫法: 刪除: 動態生成陣列的話需用指標
70
練習 kb_pointer_practice_malloc
71
動態產生二維陣列 動態產生二維陣列 (10x20) 刪除二維陣列 (10xN)
72
練習 kb_pointer_practice_accessStr
73
HW12(pointer_reverseStr)
74
Structure(結構) 定義: 變數名稱 node age name next int char* struct node*
75
Structure(結構) 靜態宣告: 動態宣告:
76
練習 kb_struct_practice_node
77
Example for structure h 10 john 18 ken NULL n1 n2 填充node資訊 決定header位置
印出 list內所有data
78
HW13(struct_createLinklist)
79
可得上列binary search tree
Structure(結構) 如何利用structure建立binary search tree ? 50 30 70 10 依序輸入 可得上列binary search tree
80
Struct for BST
Similar presentations