Presentation is loading. Please wait.

Presentation is loading. Please wait.

C programming.

Similar presentations


Presentation on theme: "C programming."— Presentation transcript:

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


Download ppt "C programming."

Similar presentations


Ads by Google