670 likes | 738 Vues
第 2 章基本資料處理. 2-1 變數與常數 2-2 基本資料型態 2-3 運算式簡介 2-4 資料型態轉換 2-5 本章綜合練習. 2-1 變數與常數. 變數 (variable) 與常數 (constant) 都是程式設計師用來存取記憶體資料內容的一個識別代碼。 兩者最大的差異在於變數的內容會隨著程式執行而改變,但常數則固定不變。. 變數簡介. 變數是具備名稱的一塊記憶體空間,用來儲存可變動的資料內容。 透過變數名稱將資料由記憶體中取出或寫入。例如: int num1=30; int num2=77;. 變數命名原則.
E N D
第2章基本資料處理 2-1 變數與常數 2-2 基本資料型態 2-3 運算式簡介 2-4 資料型態轉換 2-5 本章綜合練習
2-1 變數與常數 • 變數(variable)與常數(constant)都是程式設計師用來存取記憶體資料內容的一個識別代碼。 • 兩者最大的差異在於變數的內容會隨著程式執行而改變,但常數則固定不變。
變數簡介 • 變數是具備名稱的一塊記憶體空間,用來儲存可變動的資料內容。 • 透過變數名稱將資料由記憶體中取出或寫入。例如: • int num1=30; • int num2=77;
變數命名原則 • 1.變數名稱開頭可以是英文字母或底線,但不可以是數字,名稱中間也不可以有空白。 • 2.變數名稱中間可以有下底線,例如int_age,但是不可以使用-,*$@…等符號。 • 3.變數名稱長度不可超過127個字元,且變數名稱只有前面63個字元是被視為有效變數名稱。 • 4.變數名稱必須區分大小寫字母。 • 5.不可使用保留字或與函數名稱相同的命名。
合法與不合法的變數 • 合法變數名稱 • abc • _apple,Apple • structure • 不合法變數名稱 • @abc,5abc • dollar$,*salary • struct
變數宣告 • 變數宣告就是在記憶體上安排儲存位址,作為存放所要宣告變數地方,通常這個位址是由編譯器來安排。 • 由於C是屬於「靜態儲存配置」 (static storage allocation)的程式語言,因此C中的變數都必須事先宣告後才能使用。 • 宣告整數型態的變數 my_variable如下: • int my_variable;
C的變數宣告方式 • 方式1: 資料型態 變數名稱1, 變數名稱2, …… , 變數名稱n; • 方式2: 資料型態 變數名稱=初始值; • 如果要一次宣告多個同資料型態的變數,可以利用逗號「,」隔開變數名稱即可。
變數宣告與初始化:CH02_1.c • 程式範例中變數a,並沒有事先設定初始值,可是當輸出時,卻列印出不知名的數字。這是因為系統並未清除原先在那塊位址上的內容。
常數簡介 • 常數宣告又區分為以修飾詞const宣告和利用前置處理器中的#define指令來宣告自訂常數。宣告語法如下: • 方式1: const 資料型態 常數名稱=常數值; • 方式2: #define 常數名稱 常數值
2-2基本資料型態 • 由於C是屬於一種強制型態式(strongly typed)語言,當變數宣告時,必須要指定資料型態。 • 有關C的基本資料型態,可以區分為三大類,分別是整數、浮點數和字元資料型態。
整數資料型態 • 當各位將變數指定為整數型態時,記憶體中即會保留4個位元組(32位元)的空間。宣告語法: • int 變數名稱; 或 • int 變數名稱=初始值; • 可以直接以10進位數來設定整數數值外,也能採用8進位(直接在數字前加上數值0)或16進位(直接在數字前加上數值0x)來設定: • int sum=027; /* 0278等於2310 */ • int sum1=0x2b; /* 0x2b16=4310 */
short • 當一個整數宣告為short int時,資料長度是16位元(2 byte)。它的資料型態所佔的記憶體空間,是比int整數小的範圍。不過當所選用的編譯器是16位元系統下,short int和int型態的資料長度都是16位元,就沒什麼差別了。宣告語法如下: • short int sum;
long • 當一個整數宣告為long int時,它的資料長度為4 byte,在16位元編譯器上,它是大於int整數(2 byte)的儲存範圍,不過如果所選的編譯器為32位元(如Dev C++、Visual C++等),int資料型態為32位元,和long int資料型態的大小就沒有差別。宣告語法如下: • long int sum;
signed • 是有號整數,signed修飾詞是指定一個整數可以擁有正負數型態,不過由於int資料型態在C中就預設有正負號型態。如果省略signed修飾詞,編譯程式設還是會將該變數視為帶符號整數。宣告語法如下: • signed int sum
unsigned • 是無號整數,unsigned資料型態修飾詞是將有號數(正負號)的資料型態轉變為無號數型態,也就是只要在資料型態前加上unsigned修飾詞,那麼該變數就只能儲存正整數資料。宣告語法如下: • unsigned int sum;
整數修飾詞宣告與輸出:CH02_2.c • 程式範例分別列出了C的整數修飾詞宣告與列印結果,並利用sizeof()函數來顯示變數的長度。
浮點數資料型 • 浮點數(floating point)就是帶有小數點的數字。 • 浮點數的表示方法有兩種,一種是小數點方式,另一種是科學記號方式,例如3.14、-100.521、6e-2、3.2E-18等。其中 e或 E是代表C中10為底數的科學符號表示法。例如6e-2,其中6稱為假數,-2稱為指數。
float單精度浮點數 • 宣告為float單精度浮點數的資料長度為4位元組,有效範圍為1.2*10-38~3.4*10+38。宣告方式如下: • float 變數名稱; • 如果各位想宣告float變數時直接設定浮點數值,那麼系統會預設為double型態的常數來儲存,而不是float型態。如果想設定為float型態,必須在數值字尾加上「F」或「f」。
double倍精確度浮點數 • double倍精確度為8位元組,有效範圍為2.2*10-308~1.8*10+308。宣告方式如下: • double 變數名稱; • 其實不論是float單精度浮點數或double倍精確度浮點數,當以printf()函數輸出時,所要採的取輸出格式化字元可都是%f格式化字元。不過如果以科學記號方式輸出,則格式化字元為%e。
浮點數的宣告與輸出範例:CH02_3.c • 程式範例中將宣告一個有很長小數位數的實數,並試著以float單精度浮點數、double倍精確度浮點數及科學符號表示法分別列印。
字元資料型態 • 「字元」(Character)包含了字母、數字、標點符號及控制符號等。 • 字元資料在記憶體中是以整數數值來儲存,每一個字元佔用1位元組(8位元)的資料長度,所以字元的數值範圍「0~28-1」之間。宣告方式如下: • char 變數名稱=ASCII碼; 或是 • char 變數名稱='字元';
另一種字元型態的表示方式 • 也可以使用「\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字元 */
字元資料的輸出與加法運算功能:CH02_4.c • 程式範例是分別以使用%c與%d兩種格式化字元來列印,並且示範了字元加法運算後的結果。
void 資料型態 • void 資料型態是表示一種不存在的值,void 資料型態的宣告模式有兩種: • 方式1: void 函數名稱(); • 方式2: 資料型態 函數名稱(void); • 方式1是表示宣告一個void函數,並代表此函數沒有回傳值,如果省略void,編譯器則會自動將此函數預設為int型態。 • 方式2則表示如果在函數的參數列中宣告void,則代表此函數沒有參數的傳遞。
運算式 • 運算式是由運算子(operator)與運算元(operand)所組成。例如: • d=a*b-123.4; • 其中d、a、b、123.4等常數或變數稱為運算元(operand),而=、*、-等運算符號稱為運算子(operator)。 • 在C中,運算元包括了常數、變數、函數呼叫或其他運算式,而運算子有指派運算子、算術運算子、比較運算子、邏輯運算子、遞增遞減運算子,以及位元運算子等六種。
指定運算子 • 「=」指定運算子,主要作用是將等號右方的值指派給等號左方的變數。=號的左邊必須為變數,右邊則可以為變數、常數或運算式等。例如: • a= a + 5; /* 將a值加5後指派給變數a */ • c=’A’; /* 將字元’A’指派給變數c */ • 「=」能指定同一個數值給多個變數。例如: • int a,b,c; • a=b=c=100; /* 同步指定值給不同變數 */
算術運算子運用範例:ch02_6.c • 範例是列印出A、B兩數與算術運算子間的運算關係,如果各位想在螢幕顯示出%字元,必須要重覆兩次%字元。
比較運算子運用範例:CH02_7.c • 程式範例是列印兩個運算元間各種比較運算子的真值表,以0表示結果為假,1表示結果為真。
邏輯運算子 • 邏輯運算子(Logical Operator)是用來判斷基本的邏輯運算,並將判斷的結果,以0代表false,1代表true。&&和||運算子的運算規則和比較運算子相同,是由左至右,而!運算子則是由右至左。
&& 運算子 • 當&&運算子(AND)兩邊的運算式皆為真(1)時,其執行結果才為真(1),任何一邊為假(0)時,執行結果都為假(0)。
|| 運算子 • 當||運算子(OR)兩邊的運算式,只要其中一邊為真(1)時,執行結果就為真(1)。
!運算子 • !運算子(NOT)是一元運算子,它會將比較運算式的結果做反相輸出,也就是傳回與運算元相反的值。
邏輯運算子的應用範例:CH02_8.c • 範例是輸出兩數比較與邏輯運算子相互關係的真值表 。
遞增與遞減運算子 • 它們是針對變數運算元加減1的簡化寫法,屬於一元運算子的一種,可增加程式碼的簡潔性。 • 如果依據運算子在運算元前後位置的不同,雖然都是對運算元做加減1的動作,遞增與邊減運算子還是可以細分成「前置型」及「後置型」兩種。
前置型程式片段 • int a,b; • a=5; • b=++a; • printf("a=%d, b=%d\n",a,b);
後置型程式片段 • int a,b; • a=5; • b=a++; • printf("a=%d, b=%d\n",a,b);
遞增與遞減運算子的應用:CH02_9.c • 程式範例將實際示範前置型遞增運算子、前置型遞減運算子、後置型遞增運算子、後置型遞增運算子在運算前後的執行過程 。
&位元運算子 • 執行AND運算時,當A與B位元值逐一比較皆為1時,新位元值才為1,其餘皆為為0。例如13&57=9。
|位元運算子 • 執行OR運算時,當A或B位元值其中一方為1時,新位元值則為1,只有A與B的位元值均為0時,新位元值為0,例如13|57=61。
^位元運算子 • 執行XOR運算時,當A或B位元值一為1,一為0時,新位元值為1。另外A與B的位元值均為1或均為0時,則新位元值為0。例如13^57=52。
~位元運算子 • 對A的位元取1’補數法,即位元值為1時,新位元值改為0,或位元值為0時,新位元值改為1。例如~13=-14。
>>位元運算子 • 是將數值的位元向右移動n個位元。向右移動後,超出儲存範圍的數字捨去,而左邊多出的位元就補上0。例如13>>2=3 。
<<位元運算子 • 將數值的位元向左移動n個位元。向左移動後,超出儲存範圍的數字捨去,右邊位元則補上0。例如13<<2=52 。