Presentation is loading. Please wait.

Presentation is loading. Please wait.

C程式的架構 基本的資料型態 變數的宣告 常見的語法錯誤 基本的運算 優先順序與結合律 資料型態的轉換

Similar presentations


Presentation on theme: "C程式的架構 基本的資料型態 變數的宣告 常見的語法錯誤 基本的運算 優先順序與結合律 資料型態的轉換"— Presentation transcript:

1 C程式的架構 基本的資料型態 變數的宣告 常見的語法錯誤 基本的運算 優先順序與結合律 資料型態的轉換
第二章 C程式的架構與基本運算 C程式的架構 基本的資料型態 變數的宣告 常見的語法錯誤 基本的運算 優先順序與結合律 資料型態的轉換

2 圖 一個簡單的 C 程式   /* print number 75 in decimal */ ← 註解 #include <stdio.h> ← 前端處理指令 main() ← 主程式 { int num=75; ← 宣告 printf("decimal=%d\n", num); ← 指令敘述 }

3 圖 2-1a 一個簡單的 C 程式(另一種寫法)   /* print number 75 in decimal */ ← 註解 #include <stdio.h> ← 前端處理指令 int main() ← 主程式 { int num=75; ← 宣告 printf("decimal=%d\n", num); ← 指令敘述 return 0; }

4 圖 2-1b 暫停畫面以觀看程式執行結果   /* print number 75 in decimal */ ← 註解 #include <stdio.h> ← 前端處理指令   #include <stdlib.h> ← 為了使用system 要加這行 main() ← 主程式 { int num=75; ← 宣告 printf("decimal=%d\n", num); ← 指令敘述 system("pause"); ← 暫停畫面 }

5 圖 2-1c 通常的C 程式架構 #include <stdio.h>
#include <math.h> 前端處理指令 #define PI   float rv; float degree_to_radius(int); 變數及函數宣告   main (int argc, char *argv[ ] ) 主程式 { int deg; deg=45; rv=degree_to_radius(deg); printf("Degree %d equals to Radius scale %f \n",deg, rv); } float degree_to_radius(int d) 其他函數程式 float rad; rad=d*PI/180; return d;

6 基本的資料型態 (datatype) char 字元,可以儲存機器中所用字碼的一個符號,佔一個位元組 (Byte) 的空間 int
整數,所佔儲存位置大小依系統而定,對 16 bits 系統而言,佔2個位元組 ,對 32 bits 系統而言,佔4個位元組 float 單精準度浮點數, 所佔儲存位置大小依採用的浮點數規範而定,對 16 bits 系統而言,通常佔 4 個 Byte double 倍精準度浮點數,所佔儲存位置大小依採用的浮點數規範而定,對 16 bits 系統而言,通常佔 8 個 Byte

7 16 bits常用資料型態大小及數值表示範圍 DataType Bytes Bits Range char 1 8
-128~127 (-27~27-1) int 2 16 -32768~32767 (-215~215-1) float 4 32 ±3.4e-38~3.4e+38 double 64 ±1.7e-308~1.7e+308

8 16 bits常用資料型態大小及數值表示範圍(續)
DataType Bytes Bits Range unsigned char 1 8 0~255 (0~28-1) unsigned int 2 16 0~65535 (0~216-1) short int -32768~32767 long int 4 32

9 整數常數(constant) 987 整數 (int) 123456987L 長整數 (long int)
UL 不帶正負號的長整數 (unsigned long)

10 整數常數(constant) 037 是八進位常數,相當於十進位的 31,如果用十六進位表示,則是 0x1f 或 0x1F
0xFF 是十六進位常數,相當於十進位的 255 八進位與十六進位常數後面也可以加上 L 變成 long 型態,加上U則變成 unsigned 型態

11 浮點數常數 5.23e+12 -2.8e-3 .764E-5 .33 0.18f 3.18E4F L

12 字元常數 字元常數 (character constant) 通常用於代表一個文字符號,前後用單引號括起來,例如 'A', '#', 'X'
它也可以代表該文字符號的碼值,例如,在個人電腦上使用的 ASCII 碼中,字元 'A' 這個符號的碼是十六進位 0x41,也就是十進位的 65,所以字元 'A' 的數值就是 65;字元 'a' 這個符號的碼是十六進位 0x61,也就是十進位的 97,所以字元 'a' 的數值就是 97

13 字元常數的八進位與十六進位寫法 八進位寫法 '\ppp' 其中 p 是八進位數字( 0 到 7 )
例如 '\015' 代表ASCII碼為 13 的字元 十六進位寫法 '\xhh' 其中 h 是十六進位數字 ( 0 到 9,a 到 f,或 A 到 F) 例如 '\x1B' 代表ASCII碼為 27 的字元,也就是鍵盤上的Esc鍵

14 脫序字元(escape character)
\a 警鈴符號 (alarm) \b 退位 (backspace) \f 換頁 (formfeed) \n 換列 (newline) \r 回到第一格 (carriage return) \t 水平定位 (tab) \v 垂直定位 (vertical tab) \\ 反斜線 \? 問號 \' 單引號 \" 雙引號 \0 零值符號 (Null character)

15 字串常數 字串常數 (string constant)就是用雙引號對前後括起來幾個字元符號。例如 "This is a string"
或 "" (空字串)

16 變數及宣告 變數是程式中用來代表某項會變動的資料,其名稱由設計者自己編,通常是英文字母開頭再加上英文或數字或底線符號
所有變數在使用之前都要先加以宣告;編譯程式會依宣告替變數安排適當的記憶體空間來儲存它的值 例如 int i, j, k; char ch; float money, weight; 每個宣告列都要用分號 ; 結尾,這是C語言中表示一個敘述結束的語法

17 宣告變數初始值 int i = 0; int limit = MAXNUM-1; float small = 1.0e-6;
char ch = '\0';

18 【語法練習 2-4-1】 (1) 宣告一整數變數 x int x; (2) 宣告一字元變數 ch char ch;
(3) 宣告一浮點數變數 val float val; (4) 宣告兩個整數變數 a 與 b int a, b;

19 【範例 2-5-1】 1 #include <stdio.h> 2 main() 3 { 4 int i; 5 float m;
3 { 4 int i; 5 float m; 6 char ch; 7 8 i = 100; 9 m = 4.38; 10 ch = '#'; 11 printf("i=%d m=%f ch=%c \n",i,m,ch); 12 } 各列開頭的行號,是為了方便說明,請不要鍵入,C 程式是不帶行號的

20 常見的語法錯誤 (一) 忘記在敘述行尾端打上分號 ; (二) 大小寫未區分 (三) 拼錯字 (四) 括弧未配成對 (五) 不該出現的空白符號
(六) 引號未成對

21 基本的運算 設定運算子 = 加法運算子 + 減法運算子 – 乘法運算子 * 除法運算子 / 餘數運算子 % 負號運算子 -

22 合併的設定運算子 a = a+b; 可以寫成 a += b; a = a-b; 可以寫成 a -= b;

23 遞增運算子 ++ a = a+1 ; 可以簡化成 a += 1; 可以再簡化成 a++;

24 遞減運算子 -- a = a-1 ; 可以簡化成 a -= 1; 可以再簡化成 a--;

25 前置運算與後置運算 前置遞增: ++寫在變數前面,變數先加一, 其數值再拿來使用 int a=7; b = ++a;
前置遞增: ++寫在變數前面,變數先加一, 其數值再拿來使用 int a=7; b = ++a; 結果 a 值為 8, b 值為 8 後置遞增: ++寫在變數後面,變數值先拿來使用然後變數再加一 b = a++; 結果 a 值為 8, b 值為 7

26 sizeof sizeof ( X ) 代表資料X的大小 (bytes),其值隨電腦系統而異,目的在於將程式移植到其他機器上使用而不須改寫原始程式 例如 sizeof (int) 代表一個整數資料的大小,在 16 bits系統上的值是 2,在 32 bits系統上的值是 4

27 運算子的優先順序 例 a=b+c*d; 運算子的優先順序為 * 優於 + 優於 =
所以 c*d 先計算,然後才和 b 相加,才把值設定給 a

28 運算子的結合律 大部份的運算符號都使用左結合規則,也就是由左邊的運算先做。例如 a=b*c/d;

29 右結合的運算子 有極少數運算子是採右結合律的 例如 設定運算 = a=b=c; 相當於 a=(b=c);

30 表 2-1運算子的優先順序及結合律 等級 運 算 符 號 運 算 功 能 結合律
等級 運 算 符 號 運 算 功 能 結合律 ── ──────── ───────────────── ────── 1 () [] . ← 函數、陣列、結構成員、結構指標成員 由左到右(L) 、後置遞增、遞減 ~ ! * & 負號、1的補數、邏輯NOT、間接、取址 由右到左(R) -- sizeof() 前置遞增、遞減、型態大小 3 * / % 乘、除、求餘數 由左到右(L) 加、減 由左到右(L) 5 << >> 左移、右移 由左到右(L) 6 < > <= >= 小於、大於、小於等於、大於等於 由左到右(L) 7 == != 等於、不等於 由左到右(L) 8 & 位元AND 由左到右(L) 9 ^ 位元XOR 由左到右(L) 10 | 位元OR 由左到右(L) 11 && 邏輯AND 由左到右(L) 12 || 邏輯OR 由左到右(L) 13 ? = 條件運算 由右到左(R) 14 = *= /= %= += -= 各種設定運算 由右到左(R) <<= >>= &= ^= |= 15 , 逗號分隔 由左到右(L)

31 資料型態的轉換 在運算式中,若運算子兩邊的運算元型態不同時,會依一些規則轉換成同一種型態
例如 整數與浮點數相加,會先轉換成浮點數(值域較大)再加 ,得到浮點數的值 例如 浮點數值存入整數變數時會自動切為整數值 下列 C 程式片段  int a, s; float b, t; a=3; b=4.5; t=a+b; s=a+b; 會使 t 的值為 7.5, s 的值 7

32 資料型態的轉換(續) 將型態宣告用小括號 括起來,可以強制進行型態的轉換 例如 下列 C 程式片段 int a, b, s;
float t; a=3; b=2; s=a/b; t=(float)a/b;  會使 s 的值為 1, t 的值為 1.5


Download ppt "C程式的架構 基本的資料型態 變數的宣告 常見的語法錯誤 基本的運算 優先順序與結合律 資料型態的轉換"

Similar presentations


Ads by Google