c語言 第二章 02 c的資料處理

40
第二章 C 的資料處理 2-1 變數與常數 2-2 資料型態簡介 2-1-1 變數的命名 2-2-1 整數資枓型態 2-2-2 浮點數資料型態 2-2-3 字元資料型態 2-3-1 運算式型態轉換 2-3-2 強制型態轉換 2-2-4 特殊字元表示法 2-4 上機實習課程 2-3 資料型態的轉換方式 2-1-2 變數資料長度 2-1-3 常數

Upload: shademoon

Post on 05-Jul-2015

2.644 views

Category:

Technology


11 download

TRANSCRIPT

Page 1: C語言 第二章 02 C的資料處理

第二章 C 的資料處理

王智祥

2-1 變數與常數

2-2 資料型態簡介

2-1-1 變數的命名

2-2-1 整數資枓型態2-2-2 浮點數資料型態2-2-3 字元資料型態

2-3-1 運算式型態轉換2-3-2 強制型態轉換

2-2-4 特殊字元表示法

2-4 上機實習課程

2-3 資料型態的轉換方式

2-1-2 變數資料長度2-1-3 常數

Page 2: C語言 第二章 02 C的資料處理

2-1-1 變數的命名 (1) 2-1 變數的命名

P 2-2

在 C ”中可以取一個變數名稱(例如 tmp” )來代替這個記憶體位址,同時也代表了位址中所儲存的內容。

如下所示:變數名稱與對應記憶體位址對照表

變數名稱 對應記憶體位址00000

001AC變數

變數內容值

Page 3: C語言 第二章 02 C的資料處理

2-1-1 變數的命名 (1)

資料型態 變數名稱 ; 資料型態 變數名稱 = 初始值 ;

int a; /* 宣告變數 a,暫時未設值 */int b=12; /* 宣告變數 b 並直接設定初值為 12*/

2-1 變數的命名

P 2-3

還可分為宣告後再設值與宣告時設值兩種方式:

例如以下宣告:

Page 4: C語言 第二章 02 C的資料處理

2-1-1 變數的命名 (2)

_age 合法8_age 不合法538 不合法

榮欽 不合法apple 合法ber$123 不合法

2-1 變數的命名

P 2-4

變數的命名還必須遵守以下的規則:

1. 變數名稱必須是由「英文字母」、「數字」或者下底線「 _ 」所組成,不過開頭字元可以是英文字母或是底線,但不可以是數字。

1. 變數名稱中間可以有下底線,但是不可以使用 -,*$@…等符號。

例如:

Page 5: C語言 第二章 02 C的資料處理

2-1-1 變數的命名 (2)

whilevolatile

voidunsigneduniontypedefswitch

structstaticsizeofsignedshort

returnregisterlongint if

gotoforfloatexternenum

elsedoubledodefaultcontinue

constcharcasebreakauto

2-1 變數的命名

P 2-4

1. 變數名稱區分大小寫字母,例如 Ave 與 AVE 會視為兩個不同的變數。

1. 不可使用保留字或與函數名稱相同的命名。

以下列出 C 語言的保留字:

Page 6: C語言 第二章 02 C的資料處理

2-1-1 變數的命名 (3) 2-1 變數的命名

P 2-4

程式範例:變數命名與宣告: CH02_01.c

Page 7: C語言 第二章 02 C的資料處理

2-1-1 變數的命名 (3) 2-1 變數的命名

P 2-5

執行結果

程式解說在第 6~7 行是用來宣告一個沒有設初始值的變數 _a 和 b123 ,而第 8行則是利用「 , 」符號分隔來宣告多個變數的值。至於第 12~14 行的 printf() 中使用了 "%d“ 格式,功能是做為表示以十進位整數格式來輸出變數的值,這部份將在第三章 C 的基本輸入與輸模式中會有更詳盡說明。

Page 8: C語言 第二章 02 C的資料處理

2-1-2 變數資料長度

sizeof( 變數名稱 );

2-1 變數的命名

P 2-5

在 C 語言中可以使用 sizeof() 函數,來顯示各種資料型態或變數的資料長度。

它的使用格式如下:

Page 9: C語言 第二章 02 C的資料處理

2-1-2 變數資料長度 2-1 變數的命名

P 2-6

程式範例: sizeof() 函數的應用: CH02_02.c

Page 10: C語言 第二章 02 C的資料處理

2-1-2 變數資料長度

2-1 變數的命名

P 2-6

執行結果

程式解說

在第 7~8 行分別宣告整數變數 salary 與單精度浮點數變數sum ,而在第 10~11 行中利用 sizeof() 函數來輸出這兩個變數所佔用的記憶體空間,單位為位元組( Byte )。

Page 11: C語言 第二章 02 C的資料處理

2-1-3 常數 (1)

整數常數: 45 、 -36 、 10005 、 0…. 等浮點數常數: 0.56 、 -0.003 、 1.234E2… 等

’字元常數: a’ ’、 A’ ’、 4’… ’’等(必須以單引號 包含)

2-1 變數的命名

P 2-7

常數( Constant )為一個內容值固定,且在程式執行時不會改變的資料數值。

如以下範例所示:

它能夠指定的資料型態有整數、浮點數及字元等。

Page 12: C語言 第二章 02 C的資料處理

2-1-3 常數 (1)

const 資料型態 常數名稱 = 常數值 ;

2-1 變數的命名

P 2-7

通常在宣告常數時,就給予固定的資料型態和數值。

就是在程式執行過程,使用一個識別字來代表某一個固定值。

宣告方式必須利用修飾詞 const ,格式如下:

Page 13: C語言 第二章 02 C的資料處理

2-1-3 常數 (2) 2-1 變數的命名

P 2-8

程式範例:常數的宣告與應用: CH02_03.c

Page 14: C語言 第二章 02 C的資料處理

2-1-3 常數 (2)

P 2-8

執行結果

程式解說

第 3 、 8 行分別以兩種方式宣告常數,在以 #define 形式宣告時,請無需宣告資料型態及「 = 」,通常是習慣加在程式最前端的巨集指令區。第 10~11 行則分別列印出 PI 及半徑為 radius 的圓面積。

2-2 資料型態簡介

Page 15: C語言 第二章 02 C的資料處理

2-2-1 整數資料型態 (1)

可簡寫為 long-2,147,483,648 ~ 2,147,483,6474 Bytesigned long int

可簡寫為 int-2,147,483,648 ~ 2,147,483,6474 Bytesigned int

可簡寫為 short-32,768 ~ 32,7672 Bytesigned short int

說  明數值範圍長度資料型態

2-2 資料型態簡介

P 2-9

有號整數 (singed)

在資料型態之前加上 signed 修飾詞,那麼該變數就可以儲存正負數的資料。

如果省略 signed 修飾詞,編譯程式會將該變數視為帶符號整數。

Page 16: C語言 第二章 02 C的資料處理

2-2-1 整數資料型態 (2)

可簡寫為 unsigned long0 ~ 4,294,967,2954 Byteunsigned long int

可簡寫為 unsigned0 ~ 4,294,967,2954 Byteunsigned int

可簡寫為 unsigned short

0 ~ 65,5352 Byteunsigned short int

說  明數值範圍長度資料型態

2-2 資料型態簡介

P 2-10

無號整數(unsigned)由於無號整數不區分正負值,那麼資料長度就可以省下一個位元來表示數值的正 / 負值情形,因此在它的數值範圍中能夠表示更多的正數。

Page 17: C語言 第二章 02 C的資料處理

2-2-1 整數資料型態 (3)

程式範例:整數變數的宣告與輸出: CH02_04.c

P 2-10

2-2 資料型態簡介

Page 18: C語言 第二章 02 C的資料處理

2-2-1 整數資料型態 (3)

P 2-11

2-2 資料型態簡介

執行結果

程式解說

第 7~9 行是分別以 10 、 8 、 16 進位的整數表示法來設定不同長度的整數型態變數,在第 11-13 行則是以格式化字元

表示以十進位整數常數輸出及 sizeof() 函數來輸出這三個變數所佔用空間大小。

Page 19: C語言 第二章 02 C的資料處理

2-2-2 浮點數資料型態 (1)

倍精確浮點數,有效位數 7 位數

2.2*10-308~1.8*10+3088 Bytedouble

單精確浮點數,有效位數 7 位數

1.2*10-38~3.4*10+384 Bytefloat

說    明數值範圍長度資料型態

P 2-11

2-2 資料型態簡介

在 C 語言中,浮點數是用來表示具有小數點的數值。

Page 20: C語言 第二章 02 C的資料處理

2-2-2 浮點數資料型態 (1)

float 變數名稱 ; 或float 變數名稱 = 初始值 ;double 變數名稱 ; 或double 變數名稱 = 初始

值 ;

P 2-12

2-2 資料型態簡介

浮點數在電腦中有兩種表示方法,一種為一般的小數 點表示法,例如 314.159;另一種則是以科學浮號的

方式來表示,例如 3.14159e+02 。

將變數宣告為浮點數型態的方法如下:

Page 21: C語言 第二章 02 C的資料處理

2-2-2 浮點數資料型態 (2)

P 2-10

2-2 資料型態簡介

程式範例:浮點數變數的宣告與輸出: CH02_05.c

Page 22: C語言 第二章 02 C的資料處理

2-2-2 浮點數資料型態 (2)

P 2-13

2-2 資料型態簡介

執行結果

程式解說在第 07 ~ 08 行中分別宣告了兩個單精度與倍精度浮點數型態的數值,接著透過第 10 ~ 13 行的 printf ()函數,將這兩個浮點數分別以一般浮點數及科學符號的表示方式來顯示內容。

Page 23: C語言 第二章 02 C的資料處理

2-2-3 字元資料型態 (1)

方式 1 : char 變數名稱 1, 變數名稱 2, ……. , 變數名稱 N; /* 宣告字元變數 */

方式 2 : char 變數名稱 = ' 字元 ' ; /* 宣告並初始化字元變數 */

char 變數名稱 =10 進位 ASCII碼 ; /* 以 10 進位 ASCII碼設定字元變數 */char 變數名稱 = 「 \ 」 8 進位 ASCII碼 ; /*八進位 ASCII碼設定字元變數 */char 變數名稱 = 「 \x 」 16 進位 ASCII碼 ; /* 十六進位 ASCII碼設定字元變數 */

P 2-14

2-2 資料型態簡介

宣告字元變數的方式如下:

除了可以使用字元來指定字元變數值外,您還能夠使用10 進位、 8 進位及 16 進位的 ASCII 數值來設定,

 方式如下:

Page 24: C語言 第二章 02 C的資料處理

2-2-3 字元資料型態 (2)

P 2-14

2-2 資料型態簡介

程式範例:字元變數的宣告與輸出: CH02_06.c

Page 25: C語言 第二章 02 C的資料處理

2-2-3 字元資料型態 (2)

P 2-15

2-2 資料型態簡介

執行結果

程式解說在第 7~10 行是以不同格式來設定字元變數,由於 10 進位的67 等於 ASCII 碼中的「 C 」、 8 進位 111 則是 ASCII 碼中的「 I 」、而 16 進位的 61 則是對應到 ASCII 碼中「 a 」,因此第 12 、 14 、 15 行的輸出結果分別是 C 、 I 、 a 字元。

Page 26: C語言 第二章 02 C的資料處理

2-2-4 特殊字元表示法 (1)

十六進位表示的 ASCII碼,每個 h 表示一個十六進位數字

\xhh

八進位表示的 ASCII碼,每個 o 表示一個八進位數字\ooo

顯示反斜線 \\\

顯示雙引號 "\"

顯示單引號 '\'

垂直跳格\v

水平跳格,相當於按一次 Tab鍵\t

返回( carriage return )\r

換行( newline )\n

跳頁( form feed )\f

倒退一格( backspace )\b

使電腦發出嗶一聲( alarm )\a

說明跳脫表示字元

P 2-16

2-2 資料型態簡介

Page 27: C語言 第二章 02 C的資料處理

2-2-4 特殊字元表示法 (2)

P 2-10

2-2 資料型態簡介

程式範例:特殊字元的宣告與輸出: CH02_07.c

Page 28: C語言 第二章 02 C的資料處理

2-2-4 特殊字元表示法 (2)

P 2-16

2-2 資料型態簡介

執行結果

程式解說

第 7~8 行中使用「 \“ 」來在 printf() ”函數中顯示「 」符號,以及使用 16 進位表示法來表示每一個字元的 ASCII 碼,並且藉由「 \ 」符號來轉換成字元及輸出。

Page 29: C語言 第二章 02 C的資料處理

2-3-1 運算式型態轉換 (1)

P 2-17

2-3 資料型態的轉換方式

在 C 編譯器中,對於運算式型態轉換,會依照型態數值範圍大者作為優先轉換的對象,並且如果指定敘述「 = 」兩邊的型態不同,會一律轉換成與左邊變數相同的型態。

當然在這種情形下,要注意執行結果可能會有所改變,例如例如將 float 型態指定給 int 型態,可能會有遺失小數點後的精準度。

Page 30: C語言 第二章 02 C的資料處理

2-3-1 運算式型態轉換 (2) 程式範例:運算式型態轉換的說明與示範: CH02_08.c

P 2-17

2-3 資料型態的轉換方式

Page 31: C語言 第二章 02 C的資料處理

2-3-1 運算式型態轉換 (2)

P 2-18

2-3 資料型態的轉換方式

執行結果

程式解說

在第 11 與 12 行中, C 編譯器會先把變數 i 的資料型態各別轉換成 float 與 double 型態,再執行除法運算。

在程式第 16 行中,將 f 與 d 兩個含有小數的值相加,最後存入整數變數i ,則小數部份的值被忽略掉。與原先計算時,含有小數值的結果並不相同,使用時應注意到這個特性。

Page 32: C語言 第二章 02 C的資料處理

2-3-2 強制型態轉換 (1)

( 資料型態 ) 運算式或變數;

int i=100, j=3;float Result;Result=i/j;

P 2-19

2-3 資料型態的轉換方式

要在運算式中強制的轉換資料型態,可以使用如下的語法。

 注意!包含型態名稱的小括號,絕對不可以省略:

強制型態轉換可以用來補強運算式型態轉換無法處理的狀況。

 例如底下的情形:

Page 33: C語言 第二章 02 C的資料處理

2-3-2 強制型態轉換 (2)

P 2-19

2-3 資料型態的轉換方式

程式範例:強制型態轉換的說明與示範: CH02_09.c

Page 34: C語言 第二章 02 C的資料處理

2-3-2 強制型態轉換 (2)

P 2-20

2-3 資料型態的轉換方式

執行結果

程式解說

在第 10 行,由於變數 i 與 j都是整數變數,算式運算不作型態轉換,只作整數的除法運算,因此浮點數變數 f 的儲存值,只有整數部份。在第 14 行,使用強制型態轉換,將變數 i 與 j 改以 float 型態作除法運算,運算結果就可包含小數點的數值。

Page 35: C語言 第二章 02 C的資料處理

2-4 上機實習課程 (1)

P 2-21

2-4 上機實習課程

補充一下溢位( overflow )的觀念,這會產生個很有趣的現象。基本上,所謂溢位就是該類型整數的數值超出了可以表示的範圍。

以下 C 程式中宣告了兩個變數 i 、 j ,並將 i 、 j 的值設定為 整數與短整數的最大值,分別是 2147483647 、 32767 。

上機實習範例: CH02_10.c

Page 36: C語言 第二章 02 C的資料處理

2-4 上機實習課程 (1)

P 2-21

上機實習範例: CH02_10.c

執行結果

2-4 上機實習課程

Page 37: C語言 第二章 02 C的資料處理

2-4 上機實習課程 (2)

P 2-21

2-4 上機實習課程

以下程式範例是宣告一個倍精確度浮點數,接著分別以不同的 格式輸出,其中變數 df 雖然是 double 型態,第 11 行中以

「 %13.8f 」格式輸出,表示總位數為 13 位,小數部分為 8 位 ,所以 df 變數的小數位數得以全部顯示。

上機實習範例: CH02_11.c

Page 38: C語言 第二章 02 C的資料處理

2-4 上機實習課程 (2)

執行結果

P 2-22

2-4 上機實習課程

上機實習範例: CH02_11.c 執行結果

Page 39: C語言 第二章 02 C的資料處理

2-4 上機實習課程 (3)

P 2-21

2-4 上機實習課程

以下程式範例是利用 sizeof() 函數來查詢以下資料型態所 佔位元組,如 short int 、 long

int 、 char 、 float 、 double 。

上機實習範例: CH02_12.c

Page 40: C語言 第二章 02 C的資料處理

2-4 上機實習課程 (3)

P 2-23

2-4 上機實習課程

上機實習範例: CH02_12.c 執行結果