67
1 第 2 第第第第第第第 2-1 變變變變變 2-2 變變變變變變 2-3 變變變變變 2-4 變變變變變變 2-5 變變變變變變

第 2 章基本資料處理

Embed Size (px)

DESCRIPTION

第 2 章基本資料處理. 2-1 變數與常數 2-2 基本資料型態 2-3 運算式簡介 2-4 資料型態轉換 2-5 本章綜合練習. 2-1 變數與常數. 變數 (variable) 與常數 (constant) 都是程式設計師用來存取記憶體資料內容的一個識別代碼。 兩者最大的差異在於變數的內容會隨著程式執行而改變,但常數則固定不變。. 變數簡介. 變數是具備名稱的一塊記憶體空間,用來儲存可變動的資料內容。 透過變數名稱將資料由記憶體中取出或寫入。例如: int num1=30; int num2=77;. 變數命名原則. - PowerPoint PPT Presentation

Citation preview

Page 1: 第 2 章基本資料處理

1

第 2章基本資料處理 2-1 變數與常數2-2 基本資料型態2-3 運算式簡介2-4 資料型態轉換2-5 本章綜合練習

Page 2: 第 2 章基本資料處理

2

2-1 變數與常數變數 (variable) 與常數 (constant) 都是程式設計師用來存取記憶體資料內容的一個識別代碼。兩者最大的差異在於變數的內容會隨著程式執行而改變,但常數則固定不變。

Page 3: 第 2 章基本資料處理

3

變數簡介變數是具備名稱的一塊記憶體空間,用來儲存可變動的資料內容。透過變數名稱將資料由記憶體中取出或寫入。例如:

int num1=30; int num2=77;

Page 4: 第 2 章基本資料處理

4

變數命名原則 1. 變數名稱開頭可以是英文字母或底線,但不可以是數字,名稱中間也不可以有空白。 2. 變數名稱中間可以有下底線,例如 int_age ,但是不可以使用 -,*$@… 等符號。 3. 變數名稱長度不可超過 127 個字元,且變數名稱只有前面 63 個字元是被視為有效變數名稱。 4. 變數名稱必須區分大小寫字母。 5. 不可使用保留字或與函數名稱相同的命名。

Page 5: 第 2 章基本資料處理

5

保留字auto break case char

const continue default do

double else enum extern

float for goto if

int long register return

short signed sizeof static

struct switch typedef union

unsigned void volatile while

Page 6: 第 2 章基本資料處理

6

合法與不合法的變數 合法變數名稱

abc _apple,Apple structure

不合法變數名稱 @abc,5abc dollar$,*salary struct

Page 7: 第 2 章基本資料處理

7

變數宣告變數宣告就是在記憶體上安排儲存位址,作為存放所要宣告變數地方,通常這個位址是由編譯器來安排。由於 C 是屬於「靜態儲存配置」 (static st

orage allocation) 的程式語言,因此 C 中的變數都必須事先宣告後才能使用。 宣告整數型態的變數 my_variable 如下:

int my_variable;

Page 8: 第 2 章基本資料處理

8

C 的變數宣告方式 方式 1 : 資料型態 變數名稱 1, 變數名稱 2,

…… , 變數名稱 n;方式 2 : 資料型態 變數名稱 = 初始值 ;如果要一次宣告多個同資料型態的變數,可以利用逗號「 , 」隔開變數名稱即可。

Page 9: 第 2 章基本資料處理

9

變數宣告與初始化 :CH02_1.c

程式範例中變數 a ,並沒有事先設定初始值,可是當輸出時,卻列印出不知名的數字。這是因為系統並未清除原先在那塊位址上的內容。

Page 10: 第 2 章基本資料處理

10

常數簡介 常數宣告又區分為以修飾詞 const 宣告和利用前置處理器中的 #define 指令來宣告自訂常數。宣告語法如下:

方式 1 : const 資料型態 常數名稱 = 常數值 ; 方式 2 : #define 常數名稱 常數值

Page 11: 第 2 章基本資料處理

11

2-2 基本資料型態由於 C 是屬於一種強制型態式 (strongly typ

ed) 語言,當變數宣告時,必須要指定資料型態。有關 C 的基本資料型態,可以區分為三大類,分別是整數、浮點數和字元資料型態。

Page 12: 第 2 章基本資料處理

12

整數資料型態 當各位將變數指定為整數型態時,記憶體中即會保留 4 個位元組( 32 位元)的空間。宣告語法:

int 變數名稱 ;  或 int 變數名稱 = 初始值 ;

可以直接以 10 進位數來設定整數數值外,也能採用 8 進位 ( 直接在數字前加上數值 0) 或 16 進位( 直接在數字前加上數值 0x) 來設定: int sum=027; /* 0278 等於 2310 */ int sum1=0x2b; /* 0x2b16=4310 */

Page 13: 第 2 章基本資料處理

13

short

當一個整數宣告為 short int 時,資料長度是 16 位元 (2 byte) 。它的資料型態所佔的記憶體空間,是比 int 整數小的範圍。不過當所選用的編譯器是 16 位元系統下, short int 和 int 型態的資料長度都是 16 位元,就沒什麼差別了。宣告語法如下: short int sum;

Page 14: 第 2 章基本資料處理

14

long

當一個整數宣告為 long int 時,它的資料長度為 4 byte ,在 16 位元編譯器上,它是大於 int 整數 (2 byte) 的儲存範圍,不過如果所選的編譯器為 32 位元 ( 如 Dev C++ 、Visual C++ 等 ) , int 資料型態為 32 位元,和 long int 資料型態的大小就沒有差別。宣告語法如下: long int sum;

Page 15: 第 2 章基本資料處理

15

signed

是有號整數, signed 修飾詞是指定一個整數可以擁有正負數型態,不過由於 int 資料型態在 C 中就預設有正負號型態。如果省略 signed 修飾詞,編譯程式設還是會將該變數視為帶符號整數。宣告語法如下: signed int sum

Page 16: 第 2 章基本資料處理

16

unsigned

是無號整數, unsigned 資料型態修飾詞是將有號數 ( 正負號 ) 的資料型態轉變為無號數型態,也就是只要在資料型態前加上 unsigned 修飾詞,那麼該變數就只能儲存正整數資料。宣告語法如下: unsigned int sum;

Page 17: 第 2 章基本資料處理

17

C 的整數相關宣告資訊 資料型態宣告 資料長度

(位元組 ) 最小值 最大值short int 2 -32768 32767

signed short int 2 -32768 32767

unsigned short int 2 0 65535

int 4 -2147783648 2147483647

signed int 4 -2147783648 2147483647

unsigned int 4 0 4294967265

long int 4 -2147783648 2147483647

Signed long int 4 -2147783648 2147483647

unsigned long int 4 0 4294967265

Page 18: 第 2 章基本資料處理

18

整數修飾詞宣告與輸出 :CH02_2.c

程式範例分別列出了 C 的整數修飾詞宣告與列印結果,並利用 sizeof() 函數來顯示變數的長度。

Page 19: 第 2 章基本資料處理

19

浮點數資料型 浮點數 (floating point) 就是帶有小數點的數字。浮點數的表示方法有兩種,一種是小數點方式,另一種是科學記號方式,例如 3.1

4 、 -100.521 、 6e-2 、 3.2E-18 等。其中 e 或 E 是代表 C 中 10 為底數的科學符號表示法。例如 6e-2 ,其中 6 稱為假數, -2稱為指數。

Page 20: 第 2 章基本資料處理

20

float 單精度浮點數 宣告為 float 單精度浮點數的資料長度為 4位元組,有效範圍為 1.2*10-38~3.4*10+38 。宣告方式如下:

float 變數名稱; 如果各位想宣告 float 變數時直接設定浮點數值,那麼系統會預設為 double 型態的常數來儲存,而不是 float 型態。如果想設定為 float 型態,必須在數值字尾加上「 F 」或「 f 」。

Page 21: 第 2 章基本資料處理

21

double倍精確度浮點數 double倍精確度為 8 位元組,有效範圍為

2.2*10-308~1.8*10+308 。宣告方式如下: double 變數名稱 ;

其實不論是 float 單精度浮點數或 double倍精確度浮點數,當以 printf() 函數輸出時,所要採的取輸出格式化字元可都是 %f格式化字元。不過如果以科學記號方式輸出,則格式化字元為 %e 。

Page 22: 第 2 章基本資料處理

22

浮點數的宣告與輸出範例: CH02_3.c

程式範例中將宣告一個有很長小數位數的實數,並試著以 float 單精度浮點數、 double倍精確度浮點數及科學符號表示法分別列印。

Page 23: 第 2 章基本資料處理

23

字元資料型態 「字元」( Character )包含了字母、數字、標點符號及控制符號等。字元資料在記憶體中是以整數數值來儲存,每一個字元佔用 1 位元組( 8 位元)的資料長度,所以字元的數值範圍「 0~28-1 」之間。宣告方式如下:

char 變數名稱 =ASCII 碼 ; 或是 char 變數名稱 =' 字元 ';

Page 24: 第 2 章基本資料處理

24

另一種字元型態的表示方式 也可以使用「 \x 」開頭的十六進位 ASCII 碼或「 \ 」開頭的八進位 ASCII 碼來表示字元,例如:

char my_char='\x41'; /*16 進位 ASCII 碼表示 A 字元 */ char my_char=0x41; /*16 進位數值表示 A 字元 */ char my_char='\101'; /* 8 進位 ASCII 碼表示 A 字元 */ char my_char=0101; /* 8 進位數值表示 A 字元 */

Page 25: 第 2 章基本資料處理

25

字元資料的輸出與加法運算功能 :CH02_4.c

程式範例是分別以使用 %c 與 %d 兩種格式化字元來列印,並且示範了字元加法運算後的結果。

Page 26: 第 2 章基本資料處理

26

跳脫字元 跳脫字元 說明 十進位 AS

CII碼 八進位 ASCII碼 十六進位

ASCII碼\0 字串結束字元。 (Null Character) 0 0 0x00

\a ’’ ’’警告字元,發出 嗶 的警告音。 7 007 0x7

\b 倒退字元 (backspace),倒退一格 8 010 0x8

\t 水平跳格字元 (horizontal Tab) 9 011 0x9

\n 換行字元 (new line) 10 012 0xA

\v 垂直跳格字元 (vertical Tab) 11 013 0xB

\f 跳頁字元 (form feed) 12 014 0xC

\r 返回字元 (carriage return) 13 015 0xD

\" 顯示雙引號 (double quote) 34 042 0x22

\' 顯示單引號 (single quote) 39 047 0x27

\\ 顯示反斜線 (backslash) 92 0134 0x5C

Page 27: 第 2 章基本資料處理

27

跳脫字元的說明與應用 :CH02_5.c

Page 28: 第 2 章基本資料處理

28

void 資料型態 void 資料型態是表示一種不存在的值, voi

d 資料型態的宣告模式有兩種: 方式 1 : void 函數名稱 () ; 方式 2 : 資料型態 函數名稱 (void) ;

方式 1 是表示宣告一個 void 函數,並代表此函數沒有回傳值,如果省略 void ,編譯器則會自動將此函數預設為 int 型態。方式 2 則表示如果在函數的參數列中宣告 v

oid ,則代表此函數沒有參數的傳遞。

Page 29: 第 2 章基本資料處理

29

運算式 運算式是由運算子 (operator) 與運算元 (operand)所組成。例如:

d=a*b-123.4; 其中 d 、 a 、 b 、 123.4 等常數或變數稱為運算元 (operand) ,而 = 、 * 、 - 等運算符號稱為運算子 (operator) 。 在 C 中,運算元包括了常數、變數、函數呼叫或其他運算式,而運算子有指派運算子、算術運算子、比較運算子、邏輯運算子、遞增遞減運算子,以及位元運算子等六種。

Page 30: 第 2 章基本資料處理

30

指定運算子 「 = 」指定運算子,主要作用是將等號右方的值指派給等號左方的變數。 = 號的左邊必須為變數,右邊則可以為變數、常數或運算式等。例如:

a= a + 5; /* 將 a 值加 5 後指派給變數 a */ c=’A’; /* 將字元’ A’ 指派給變數 c */

「 = 」能指定同一個數值給多個變數。例如: int a,b,c ; a=b=c=100; /* 同步指定值給不同變數 */

Page 31: 第 2 章基本資料處理

31

算術運算子的語法及範例 運算子 說明 使用語法 執行結果 (A=15,B=7)+ 加 A + B 15+7=22- 減 A - B 15-7=8* 乘 A * B 15*7=105/ 除 A / B 15/7=2% 取餘數 A % B 15%2=1+ 正號 +A +15- 負號 -B -7

Page 32: 第 2 章基本資料處理

32

算術運算子運用範例: ch02_6.c

範例是列印出 A 、 B 兩數與算術運算子間的運算關係,如果各位想在螢幕顯示出 %字元,必須要重覆兩次 % 字元。

Page 33: 第 2 章基本資料處理

33

關係運算子 關係運算子 功能說明 用法 A=5, B=2 > 大於 A>B 5>2,結果為 true(1)。< 小於 A<B 5<2,結果為 false(0)。>= 大於等於 A>=B 5>=2,結果為 true(1)。<= 小於等於 A<=B 5<=2,結果為 false(0)。== 等於 A==B 5==2,結果為 false(0)。!= 不等於 A!=B 5!=2,結果為 true(1)。

Page 34: 第 2 章基本資料處理

34

比較運算子運用範例: CH02_7.c

程式範例是列印兩個運算元間各種比較運算子的真值表,以 0 表示結果為假, 1 表示結果為真。

Page 35: 第 2 章基本資料處理

35

邏輯運算子 邏輯運算子 (Logical Operator) 是用來判斷基本的邏輯運算,並將判斷的結果,以 0代表 false , 1 代表 true 。 && 和 || 運算子的運算規則和比較運算子相同,是由左至右,而 ! 運算子則是由右至左。

Page 36: 第 2 章基本資料處理

36

&& 運算子

&&邏輯運算子 A

1 0

B 1 1 0

0 0 0

當 && 運算子 (AND) 兩邊的運算式皆為真(1) 時,其執行結果才為真 (1) ,任何一邊為假 (0 )時,執行結果都為假 (0) 。

Page 37: 第 2 章基本資料處理

37

|| 運算子

|| 邏輯運算子 A

1 0

B 1 1 1

0 1 0

當 || 運算子 (OR) 兩邊的運算式,只要其中一邊為真 (1) 時,執行結果就為真 (1) 。

Page 38: 第 2 章基本資料處理

38

! 運算子 ! 運算子 (NOT) 是一元運算子,它會將比較運算式的結果做反相輸出,也就是傳回與運算元相反的值。

A 1 0

!運算子 0 1

Page 39: 第 2 章基本資料處理

39

邏輯運算子的應用範例: CH02_8.c

範例是輸出兩數比較與邏輯運算子相互關係的真值表 。

Page 40: 第 2 章基本資料處理

40

遞增與遞減運算子 它們是針對變數運算元加減 1 的簡化寫法,屬於一元運算子的一種,可增加程式碼的簡潔性。如果依據運算子在運算元前後位置的不同,雖然都是對運算元做加減 1 的動作,遞增與邊減運算子還是可以細分成「前置型」及「後置型」兩種。

Page 41: 第 2 章基本資料處理

41

前置型程式片段int a,b;a=5;b=++a;printf("a=%d, b=%d\n",a,b);

Page 42: 第 2 章基本資料處理

42

後置型程式片段 int a,b;a=5;b=a++;printf("a=%d, b=%d\n",a,b);

Page 43: 第 2 章基本資料處理

43

遞增與遞減運算子的應用: CH02_9.c

程式範例將實際示範前置型遞增運算子、前置型遞減運算子、後置型遞增運算子、後置型遞增運算子在運算前後的執行過程 。

Page 44: 第 2 章基本資料處理

44

位元運算子 位元運算子 說明 使用語法& A與 B進行 AND運算 A & B

| A與 B進行 OR運算 A | B

~ A進行 NOT運算 ~A^ A與 B進行 XOR運算 A^B

<< A進行左移 n個位元運算 A<<n

>> A進行右移 n個位元運算 A>>n

Page 45: 第 2 章基本資料處理

45

& 位元運算子執行 AND 運算時,當 A 與 B 位元值逐一比較皆為 1 時,新位元值才為 1 ,其餘皆為為 0 。例如 13&57=9 。

Page 46: 第 2 章基本資料處理

46

| 位元運算子執行 OR 運算時,當 A 或 B 位元值其中一方為 1 時,新位元值則為 1 ,只有 A 與 B的位元值均為 0 時,新位元值為 0 ,例如 1

3|57=61 。

Page 47: 第 2 章基本資料處理

47

^ 位元運算子 執行 XOR 運算時,當 A 或 B 位元值一為 1 ,一為 0 時,新位元值為 1 。另外 A 與 B 的位元值均為 1 或均為 0 時,則新位元值為 0 。例如 13^57=52 。

Page 48: 第 2 章基本資料處理

48

~ 位元運算子 對 A 的位元取 1’補數法,即位元值為 1 時,新位元值改為 0 ,或位元值為 0 時,新位元值改為 1 。例如 ~13=-14 。

Page 49: 第 2 章基本資料處理

49

>> 位元運算子 是將數值的位元向右移動 n 個位元。向右移動後,超出儲存範圍的數字捨去,而左邊多出的位元就補上 0 。例如 13>>2=3 。

Page 50: 第 2 章基本資料處理

50

<< 位元運算子 將數值的位元向左移動 n 個位元。向左移動後,超出儲存範圍的數字捨去,右邊位元則補上 0 。例如 13<<2=52 。

Page 51: 第 2 章基本資料處理

51

位元運算子的說明與應用: CH02_10.c

範例是利用兩個整數運算元 13 與 57 來進行六種位元運算子的相關運算。

Page 52: 第 2 章基本資料處理

52

複合指定運算子 複合指定運算子,是由指派運算子與其它運算子結合而成。先決條件是「 = 」號右方的來源運算元必須有一個是和左方接收指定數值的運算元相同,如果一個運算式含有多個混合指定運算子,運算過程必須是由右方開始,逐步進行到左方。 例如以「 A += B; 」指令來說,它就是指令「 A=A+B; 」的精簡寫法

Page 53: 第 2 章基本資料處理

53

複合指定運算子種類運算子 說明 使用語法+= 加法指定運算 A += B

-= 減法指定運算 A -= B

*= 乘法指定運算 A *= B

/= 除法指定運算 A /= B

%= 餘數指定運算 A %= B

&= AND位元指定運算 A &= B

|= OR位元指定運算 A |= B

^= NOT位元指定運算 A ^= B

<<= 位元左移指定運算 A <<= B

>>= 位元右移指定運算 A >>= B

Page 54: 第 2 章基本資料處理

54

複合指定運算子運算過程混合指定運算子的多層運算式 : a+=a+=b+=b%=4; 其實際運算過程如下:

b=b%4 b=b+b; a=a+b; a=a+a;

Page 55: 第 2 章基本資料處理

55

複合指定運算子的整合應用: CH02_11.c

程式範例在說明複合指定運算子的運算模式 。

Page 56: 第 2 章基本資料處理

56

運算式處理規則1. 當遇到一個運算式時,先區分運算子與運算元。2.依照運算子的優先順序作整理的動作。3. 將各運算子根據其結合順序進行運算。

Page 57: 第 2 章基本資料處理

57

運算子優先順序 ( 一 )運算子優先順序 說明

() 括號!-

++--

邏輯運算 NOT負號遞增運算遞減運算*/

%

乘法運算除法運算餘數運算+-

加法運算減法運算<<>>

位元左移運算位元右移運算

Page 58: 第 2 章基本資料處理

58

運算子優先順序 (二 )>

>=<

<=

比較運算大於比較運算大於等於比較運算小於比較運算小於等於==!=

比較運算等於比較運算不等於&^|

位元運算 AND位元運算 XOR位元運算 OR&&

||邏輯運算 AND邏輯運算 OR

?: 條件運算子= 指定運算

Page 59: 第 2 章基本資料處理

59

自動型態轉換自動型態轉換是由編譯器來判斷應轉換成何種資料型態,因此也稱為隱含轉換。在 C 編譯器中,對於算式型態轉換,會依照型態數值範圍大者作為優先轉換的對象。資料型態大小的轉換的順位

double > float > unsigned long > long > unsigned int > int

Page 60: 第 2 章基本資料處理

60

自動型態轉換範例double=int / float + int * long

Page 61: 第 2 章基本資料處理

61

自動型態轉換的範例實作: CH02_12.c

程式範例示範自動型態轉換的結果,請各位留意當不同編譯器在轉換 char 資料型態時,會產生 unsigned 或 signed 兩種狀況。

Page 62: 第 2 章基本資料處理

62

強制型態轉換語法:

( 強制轉換型態名稱 ) 運算式或變數; 程式片段

int a,b,avg ; avg=(float)(a+b)/2 ; /* 將 a+b 的值轉換為浮點數型態 */

Page 63: 第 2 章基本資料處理

63

強制型態轉換的範例實作: CH02_13.c

程式範例列印了強制型態轉換前後的平均成績結果。

Page 64: 第 2 章基本資料處理

64

跳脫字元的應用與範例實作: CH02_14.c

請使用「 \" 」來顯示「 " 」符號,並且利用 16 進位表示法來表示 "HELLO! WORLD!" 中「 HELLO! 」的 ASCII 碼與 8 進位表示法來表示「 WORLD! 」,再藉由「 \ 」符號來轉換成字元及輸出。

Page 65: 第 2 章基本資料處理

65

多重邏輯運算子的應用與範例實作: CH02_15.c

程式中宣告 a 、 b及 c 三個整數變數,並指定初始值,請判斷以下兩個式子的真假值: a<b && b<c || c<a !a<b && b<!c || c<a

Page 66: 第 2 章基本資料處理

66

位元運算子的應用與範例實作: CH02_16.c

使用位元運算子來對兩個整數運算元 12與 7 內容值,進行位元與位元間的 AND 、OR 、 XOR邏輯運算,並顯示結果

Page 67: 第 2 章基本資料處理

67

自動型態轉換與強制型態轉換的比較: CH02_17.c

強制型態轉換可以用來補強自動型態轉換無法處理的狀況。