1 / 58

博碩文化出版發行

程式設計. 博碩文化出版發行. 第二章 資料處理. 課前指引 變數與常數主要是用來儲存程式中的資料,以提供程式中各種運算之用。兩者之間最大的差別在於變數的值是可以改變,而常數的值則固定不變。. 章節大綱. 2-1 基本資料型態. 2-2 變數. 2-3 常數. 備註:可依進度點選小節. 2-1 基本資料型態. 前言 資料型態在程式語言中,包含兩個必備的層次 :可說明性及可執行性。 在 C 中共有 整數 、 浮點數 及 字元 等三種基本資料型態。. 2-1 基本資料型態. 整數 (integer)

raven-glenn
Download Presentation

博碩文化出版發行

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 程式設計 博碩文化出版發行

  2. 第二章 資料處理 課前指引 變數與常數主要是用來儲存程式中的資料,以提供程式中各種運算之用。兩者之間最大的差別在於變數的值是可以改變,而常數的值則固定不變。

  3. 章節大綱 2-1 基本資料型態 2-2 變數 2-3 常數 備註:可依進度點選小節

  4. 2-1 基本資料型態 前言 資料型態在程式語言中,包含兩個必備的層次 :可說明性及可執行性。 在C中共有整數、浮點數及字元等三種基本資料型態。

  5. 2-1 基本資料型態 整數(integer) 整數(int)在C中的儲存方式會保留4個位元組(32位元)的空間 整數表示方式可以是10進位、8進位或16進位。 int no=80; /* 十進位 */ int no=0120; /* 八進位 */ int no=0x50; /* 十六進位 */

  6. 範例CH02-01.c /* sizeof()函數的使用 */ 2-1 基本資料型態

  7. 2-1 基本資料型態 執行結果 程式解說 第7~9行將三個宣告不同整數型態的變數no1、no2、no3,設定相同的初始值。

  8. 2-1 基本資料型態 修飾詞 英文字母「U」、「u」與「L」、「l」可直接放在整數字面常數後標示其為無號(unsigned;無正負符號的整數)以及長整數(long)資料型態 45U、45u //標示45為無號整數 45L、45l //標示45為長整數 45UL、45UL //標示45為無號長整數

  9. 2-1 基本資料型態 整數資料型態(適用於一般的個人電腦)

  10. 2-1 基本資料型態 範例:CH02-02.c /* 整數的溢位(over floating) */

  11. 2-1 基本資料型態 執行結果

  12. 2-1 基本資料型態 • 程式解說 • 第7~8行中分別設定s1與s2的值,並讓s1超過無號短整數的最小下限值,而讓s2超過短整數的最大上限值。 • 當在第11~12行輸出時,卻發現s1的值為65535,而s2的值為-32768。 • 事實上,在C的整數溢位處理中,可看成是以一種循環的觀念來處理,當比最大表示值大1時,則變為最小表示值,如s2,當比最小表示值小1時,則變為最大表示值,如s1。

  13. 2-1 基本資料型態 浮點數 可以區分為單精度(float)和倍精度(double)兩種宣告類型。 float(單精度浮點數)的資料型態長度為32個位元(4個位元組),其數值的精確位數最多儲存到第八位,如果數值的超過了,那麼系統不會儲存後續的數值。 double(倍精度浮點數)的資料長度為64個位元(8個位元組),則其數值的精確位數最多儲存到第十五位。

  14. 2-1 基本資料型態 浮點數數值範圍

  15. 2-1 基本資料型態 範例ch02_03.c /* 浮點數的準確位數 */

  16. 2-1 基本資料型態 執行結果

  17. 2-1 基本資料型態 • 程式解說 • 第7~9行我們刻意宣告了三個變數,其中f1、f2分別宣告為單精度浮點數,其值設定為123.4568357109375F與21341372.1357912,而d1則宣告為倍精數浮點數,其值設定為123456789.123456789123。 • 在第11行中,輸出123.456833共八位數,第12行中輸出21341372.000000,也是只保留八位數精確值。 • 第13行輸出則可保留15位數,即是123456789.123457。

  18. 2-1 基本資料型態 範例CH02-04.c /* 浮點數不應被拿來比較是否相等 */

  19. 2-1 基本資料型態 執行結果 程式解說 第8行中宣告f1=1e-25,而在第10行中我們利用if指令(這部份會在第五章中繼續說明)來判斷是否相等,由程式執行結果中可知兩數並不相等,不過從數學的角度而言,卻是相同。 因此通常我們在程式設計上會利用第13~14行中,讓兩數相減的絕對值小於某有微小值來做近似相等的判斷。

  20. 2-1 基本資料型態 範例CH02-05.c /* 兩種輸出格式之比較 */

  21. 2-1 基本資料型態 執行結果 程式解說 第7~8行中我們宣告並設定單精度浮點數f1與f2的值。 在第10~11行中直接利用%e格式化字元輸出其科學記號表示法的值。 請注意第11行的輸出結果,在第8行是設定f1=5467.1234,但為何輸出時f2=5467.1235335,主要因素就是因為儲存精確度的問題,而輸出時多出的位數,是保留在記憶體中的殘值。

  22. 2-1 基本資料型態 字元型態 字元型態(char)包含了字母、數字、標點符號及控制符號等,每一個字元佔用1位元組(8位元)的資料長度,在記憶體中仍然是以整數數值的方式來儲存 當程式中要加入一個字元符號時,必須用單引號將資料括起來 char ch='A' //宣告ch為字元變數,並指定初值為'A' char ch=65; //宣告ch為字元變數,並指定初值為65

  23. 2-1 基本資料型態 範例CH02-06.c /* ASCII碼的換算 */

  24. 2-1 基本資料型態 執行結果 程式解說 第7~8行宣告兩個字元變數char1、char2。 第12、17行則分別進行加法與減法運算。 第13、18行則分別輸出運算的結果。

  25. 2-1 基本資料型態 Char數值範圍

  26. 2-1 基本資料型態 範例CH02-07.c /* 字元與字串之比較 */

  27. 2-1 基本資料型態 執行結果 程式解說 第7~8行分別宣告ch1與ch2變數,ch1是以單引號括住資料,而ch2則以雙引號括住資料。 第10、12行輸出變數內的資料及所佔的位元組,兩者間的差異是字串多了一個空位元('\0')。

  28. 2-1 基本資料型態 字串宣告方式 方式1:char 字串變數[字串長度]="初始字串"; 方式2:char 字串變數[字串長度]={'字元1', '字元2', ...... ,'字元n', '\0'};

  29. 2-1 基本資料型態 範例CH02-08.c /* 字串中的字元 */

  30. 2-1 基本資料型態 執行結果 程式解說 第7行宣告一字串變數,並設值為"World!",第8行則配合%s格式化字元輸出此字串。第10~16行則逐一輸出此字串中的每個字元,但第16行則是輸出'\0',於螢幕中並無法顯示。

  31. 2-1 基本資料型態 四種字串宣告方式 char Str_1[6]="Hello!"; char Str_2[6]={ 'H', 'e', 'l', 'l', 'o', '!', '\0'}; char Str_3[]="Hello!"; char Str_4[]={ 'H', 'e', 'l', 'l', 'o', '!', '\0'};

  32. 2-1 基本資料型態 範例CH02-09.c /* 字串的不同設定方式 */

  33. 2-1 基本資料型態 執行結果 程式解說 第8~10行是正統的字串宣告方式,而第11行的宣告僅是一種字元陣列,因為沒有結尾字元(‘\0’),不算是一種字串。 在第17行輸出時,因無結尾字元,故輸出時出現奇怪的符號。

  34. 2-1 基本資料型態 常用跳脫字元

  35. 2-1 基本資料型態 範例CH02-10.c /* 輸出嗶聲 */

  36. 2-1 基本資料型態 執行結果 程式解說 第7~10行是屬於跳脫字元的應用,都能讓電腦發出嗶的聲響,第13行則是以跳脫字元與16進位來設定WORLD! 字串。當程式執行到第15行時,會輸出四聲嗶聲顯示字串st的內容值。

  37. 範例CH02-11.c /* 輸出單引號與雙引號 */ 2-1 基本資料型態

  38. 執行結果 程式解說 第6行將ch1中的值設定為跳脫序列\',在第8行中則以%c輸出ch1的值,並且利用(\")在printf()函數中顯示出雙引號。 2-1 基本資料型態

  39. 2-2 變數簡介 前言 變數型態:整數、浮點數或字元。 變數名稱:變數本身在程式中的名字,必須符合識別字的命名規則及可讀性。 值:程式中變數所賦予的值。 參考位置或記憶體位址:變數在記憶體中儲存的位置。

  40. 2-2 變數簡介 變數的宣告 由於變數本身的內容值是可以被改變,因此不同資料型態的變數,所使用的記憶體空間大小以及可表示的資料範圍自然不同。至於在程式語言的領域中,有關變數儲存位址的方法則有兩種,分述如下: 就

  41. 2-2 變數簡介 範例CH02-12.c /* 初始化與未初始化 */

  42. 2-2 變數簡介 執行結果 程式解說 第6~8行中宣告了三個變數,其中a變數並未設定初值。 當從第10行中輸出a時,各位在螢幕上會發現a=2,如果您的電腦顯示的不是2,那也很正常,因為這個值是系統並未清除原先在那塊位址上的內容,所出現先前存放的數字。

  43. 2-2 變數簡介 變數的生命週期與可視範圍 「全域變數」(Global variable) 宣告在程式區塊與函數之外,且在宣告指令以下的所有函數及程式區塊都可以使用到該變數。 通常全域變數是用來定義一些常數,但是初學者不應為了方便而將所有的變數都設定為全域變數,否則將來一定會發生變數名稱管理上的問題。 全域變數的生命週期始於程式開始之時,終止於程式結束之後: float pi=3.14; /* pi是全域變數 */ int main() { … … }

  44. 2-2 變數簡介 變數的生命週期與可視範圍 區域變數 是指宣告在函數之內的變數。 它的可視範圍只在宣告的函數區塊之中,其它的函數不可以使用該變數。 區域變數的生命週期開始於函數被呼叫之後,終止於函數執行完畢之時。 void circle() { float pi=3.14; /* pi是circle()函數中的區域變數 */ } int main() { … … }

  45. 2-2 變數簡介 變數的生命週期與可視範圍 區塊變數 是指宣告在某個程式區塊之中的變數,也是屬於區域變數的一種。在某些程式碼區塊中所宣告的變數其有效範圍僅在此程式碼區塊中,此程式碼區塊以外的程式碼都不能參考此變數: { /*在此區塊中宣告一個變數sum,其有效範圍為此「程式區塊」範圍*/ int sum ; ... }

  46. 2-2 變數簡介 範例CH02-13.c /*全域變數與區塊變數*/

  47. 2-2 變數簡介 執行結果 程式解說 第4行宣告salary為全域變數,在整個程式的任何位置的指令都可以合法使用該變數。 第9行將輸出全域變數salary的值。 第11行在此宣告salary為區塊變數,因此第12行所輸出的是區塊變數salary的值。 但在第14行時,因為離開了程式區塊,所以又將輸出全域變數salary的值。

  48. 2-2 變數簡介 變數資料型態轉換 針對變數執行上的要求,可以「暫時性」轉換資料型態的方式。基本上,資料型態轉換只是針對變數儲存的「資料」作轉換,但是不能轉換變數本身的「資料型態」。要在運算式中強制的轉換資料型態,可以使用如下的語法: (資料型態) 變數名稱;

  49. 2-2 變數簡介 範例CH02-14.c /*資料型態的強制轉換*/

  50. 2-2 變數簡介 執行結果 程式解說 第7~8行宣告整數與浮點數變數,並在第10-11行中進行整數強制型態轉換,,請注意!這個包含型態名稱的小括號,可絕對不能省略。 當第13行輸出時,我們發現no1與no2的值是f1與f2的整數值,而且f1與f2的值並沒有受到任何影響。

More Related