Presentation is loading. Please wait.

Presentation is loading. Please wait.

能盡物之性,則可以贊天地之化育。 可以贊天地之化育,則可以與天地矣。 《中庸﹒第二十一章》

Similar presentations


Presentation on theme: "能盡物之性,則可以贊天地之化育。 可以贊天地之化育,則可以與天地矣。 《中庸﹒第二十一章》"— Presentation transcript:

1 能盡物之性,則可以贊天地之化育。 可以贊天地之化育,則可以與天地矣。 《中庸﹒第二十一章》
3 基本資料型態 能盡物之性,則可以贊天地之化育。 可以贊天地之化育,則可以與天地矣。 《中庸﹒第二十一章》

2 基本資料型態 3.1 整數和浮點數 3.2 變數和常數 3.3 算術運算 3.4 標準數學函數的運算 3.5 邏輯值及其運算
3.1 整數和浮點數 3.2 變數和常數 3.3 算術運算 3.4 標準數學函數的運算 3.5 邏輯值及其運算 3.6 字元與字串 3.7 位元處理運算

3 C++ 的資料型態

4 3.1 整數 整數 (integer values) 是所有不具小數點的數值。例如:

5 long int、8進位整數、16進位整數和 unsigned int (不加正負號的整數)
48U // unsigned int 75UL // unsigned long 372L // long 75l // long (不建議使用,因為l和 1不易區分) 012 // 128 = 10 0x12 // 1216 = 18

6 程式 Int.cpp // Int.cpp #include <iostream> using namespace std;
int main() { cout << " 48U : " << 48U << endl; cout << " 75UL : " << 75UL << endl; cout << " 372L : " << 372L << endl; cout << " 75l : " << 75l << endl; cout << " : " << 012 << endl; cout << " 0x12 : " << 0x12 << endl; return 0; }

7 程式 Int.cpp 執行結果 48U : 48 75UL : 75 372L : 372 75l : 75 012 : 10
012 : 10 0x12 : 18

8 浮點數(floating point numbers)
帶有小數點的數值。 浮點數的例子如下: 36.0  -7.382  +3.92L  0.00  +4.0  3.7f  3.7F

9 浮點數的指數表示法 (exponential notation)
e為exponent的縮寫,可以寫為E或e。

10 float 和 long double 例如: 4.7 // double 48.0F // float 48.0f // float
3.75L // long double 4.26e12 // double 4.26e+12L // long double (+號可以省略) 4.26E-12 // double

11 程式 Float.cpp // Float.cpp #include <iostream>
using namespace std; // 主程式 int main() { cout << " 4.7 : " << 4.7 << endl; cout << " 48.0F : " << 48.0F << endl; cout << " 48.0f : " << 48.0f << endl; cout << " 3.75L : " << 3.75L << endl; cout << " 4.26e12 : " << 4.26e12 << endl; cout << " 4.26e+12L : " << 4.26e+12L << endl; cout << " 4.26E-12 : " << 4.26E-12 << endl; }

12 程式 Float.cpp 執行結果 4.7 : 4.7 48.0F : 48 48.0f : 48 3.75L : 3.75
4.7 : 4.7 48.0F : 48 48.0f : 48 3.75L : 3.75 4.26e12 : 4.26e+12 4.26e+12L : 4.26e+12 4.26E-12 : 4.26e-12

13 基本數值資料型態 的實際適用範圍及有效位數

14 3.2 變數和常數 變數 (variables) 常數 (constants)
所有的變數和常數都需要經由宣告 (declaration) 才能取用。

15 變數的宣告 賦予它一個名稱,並指定其所屬的資料形態。 例如:
Int Age; float Height; 上面這兩個敘述同時也完成了Age和Height兩個變數的定義 (definition)。

16 變數的定義 在記憶體內確實配置足夠容納變數的記憶空間。 對於變數和常數而言,宣告通常也附帶完成了定義。

17 宣告敘述與記憶體空間的對應關係

18 short 和 long 除了關鍵字int用來指定整數的資料型態外,short和long分別用來代表「短的整數資料」和「長的整數資料」。例如: long int Ia; long Ib; short int Ic; short Id;

19 float 和 double 單精確度的浮點數和雙精確度的浮點數分別以 float 和 double 這兩個關鍵字宣告。例如:
float Fa; // Fa 為單精確度的浮點數 double Db; // Db 為雙精確度的浮點數

20 程式 Average.cpp a, b, c 的平均值是: 5.76667 執行結果 // Average.cpp
#include <iostream> using namespace std; // 主程式 int main() { int Number = 3; float a, b; float c = 5.6; float Average; a = 7.8; b=3.9; Average = (a + b + c) / Number; cout  << "a, b, c 的平均值是: "  << Average << endl; } 執行結果 a, b, c 的平均值是:

21 多重宣告 (multiple declarations)
float a, b; 相當於下列二式: float a; float b;

22 變數c的宣告和初始化 float c = 5.6;

23 常數(constant) 代號的用途 1.避免重複直接寫出數值,以減少輸入的錯誤。
2.可以只修改一處定義,就能同時改變程式中所有使用這個值的地方。

24 常數的例子 const double TaxRate = 0.17; const float Inch2Meter = 0.024;
const int Max = 1024;

25 常數 一旦被宣告為常數,則不能再是lvalue (左值),其內容不能更改。 譬如: const int Max = 1024;
            新值。

26 算術運算子(arithmetic operators)
共有7個:

27 表達式(expression) 將常數、變數或函數以各種運算子聯結起來的組合: x < 15.8 x = y + sin( z )
( x + y ) * 0.8 – z

28 敘述句(statement) C++ 程式裡面最小的可執行單元。例如: x = a + b * sin( c ) ; ; b++;
y = ( b > 10.0 ) ; x = c ;

29 敘述句的規範 (1/2) 1.以分號當結尾。 2.可以任意放置。例如: 與 x = a + b * ( c + 6.5 ) +
x = a + b * ( c ) + c * – 4.0;

30 敘述句的規範 (2/2) 3.各個數值或變數名稱與運算子 (operator) 之間的空隔可有可無。 例如 x=a+b; 與

31 指派敘述 (assignment statement)
有等號的敘述: Value = expression; 例如: x = a + b; 指派敘述的處理步驟 (1) 算出expression的值。 (2) 將此值放在Value裡面,成為它的內容。

32 運算元 (operand) 和運算子 (operator)
在x * y這個運算裡,x和y稱為運算元 (operand),「*」稱為運算子 (operator)。

33 一元運算子 (unary operator) 和二元運算子 (binary operator)
作用於兩個運算元之間的運算子稱為二元運算子,像 *, / 和 % 這類的運算子都是。 如果只作用於一個運算元上,則稱為一元運算子,例如負號。

34 運算符號「-」 「-」既是一元運算子也是二元運算子。例如 -x 用來計算x的負值。然而
x – y 卻是用來計算x和y的差值。 我們將它視為兩個不同的運算子。

35 算術運算的優先權和結合規則 與我們熟悉的「先乘除後加減」規則相吻合,也就是說: 6 + 4 * 8 % 3 * 6 - 5 與
6 + ((4 * 8) % 3) * 6 - 5 的計算順序是一樣的。

36 運算子的優先順序和結合關係 在同一個敘述內,當運算子的優先權相同時,則依照從左至右的順序處理。

37 整數的除法 在C++ 中,整數相除時,其餘數被直接捨棄。例如 1/2 得到 0 3/7 得到 0 15/2 得到 7

38 餘數運算子 (modulus operator) %
1%2 得到 1 3%7 得到 3 15%2 得到 1

39 累加運算子 (increment operator) 和累減運算子 (decrement operator)
表示式 累加或累減表示式 N = N + 1 N++ 或 ++N N = N - 1 N-- 或 --N M = M + 1 M++ 或 ++M M = M – 1 M-- 或 --M

40 當 ++ 或 -- 寫在操作元之前 (稱為字首,prefix)時
M = ++i; 相當於 i = i + 1; M = i;

41 當 ++ 或 -- 寫在操作元之後 (稱為字尾,postfix) 時
M = i++; 相當於: M = i; i = i + 1;

42 累加和累減運算 M = i++ * 5; 相當於 M = i*5; i++; 而 M = ++i * 5; 則相當於

43 指派運算子 (assignment operators)
敘述 具有相同計算結果的敘述(使用指派操作子) Num = Num + Inc; Num += Inc; x = x * TaxRage; x *= TaxRate; y = y / Ratio; y /= Ratio; M = M % N; M %= N;

44 rvalue 和 lvalue 1. rvalue和lvalue分別為right value (右值) 和left value (左值) 的縮寫。 變數的值或表達式的計算結果稱為rvalue,因為它可以置於指派操作子等號「=」的右側。rvalue本身不可以被指定數值。 2. 經由compiler規劃過的記憶位置所儲存的內容稱為lvalue,因為它通常放在指派操作子的左側。它可以被指定存入某個數值。 3. 指派敘述可以視為把rvalue置入lvalue的操作。 例如,下列兩個敘述: 5 = x ; ( b = 10.0 ) = a ; 都是錯誤的敘述。

45 資料型態間的轉換- 程式 Convert.cpp
執行結果 // Convert.cpp #include <iostream> using namespace std; // 主程式 int main() { int a = 5; float x; x = a + 3.8; cout << "x 的值是: " << x << endl; } x 的值是: 8.8

46 隱性資料型態轉換 (implicit type conversions)
表示式 (expression) 計算結果的資料型態 a + 3.8f float a + 3.8 double

47 C++ 敘述的隱性資料型態轉換規則 1.如果混合不同的資料型態,則計算結果以最精確的資料型態為準。
2.當所有的運算元都具有相同的資料型態,計算結果不做型態轉換。 3.如果是指派運算 (assignment operation),則依lvalue的資料型態儲存。

48 C++ 的兩種顯式資料型態轉換語法 (資料型態) 變數名稱; 資料型態 (變數名稱); 例如 x = float (a) + 3.8f ;
或是 x = (float) a + 3.8f ;

49 sizeof () 運算子 可以用來顯示資料所使用的記憶空間有幾個位元組。 運算子sizeof() 括號內的引數可以是資料,也可以是資料型態。

50 程式 Size.cpp 檢查資料型態的長度以及隱式資料轉換的效果
#include <iostream> #include <conio> using namespace std; // 主程式 int main() { int a = 5; cout << " Size of int is : " << sizeof(int) << " bytes" << endl; cout << " Size of short is : " << sizeof(short) cout << " Size of(3.8f + a)is : " << sizeof(3.8f + a) return 0; }

51 程式 Size.cpp 執行結果 Size of int is : 4 bytes Size of short is : 2 bytes
Size of (3.8f + a) is : 4 bytes

52 3.4 標準數學函數的運算 要使用C++ 的數學函數前,我們需要先知道: 要呼叫的數學函數之名稱及其功能。 該函數的輸入及輸出資料型態。
如何將提供該函數的標頭檔 <cmath> 寫到程式裡。

53 程式 Power3.cpp 計算實數x的3次方 // Power3.cpp #include <cmath>
#include <iostream> using namespace std; // 主程式 int main() { double x ; cout << "請輸入一個數值:\n "; cin >> x; cout << "它的3次方是: " << pow(x,3) << endl ; return 0; }

54 程式 Power3.cpp 的操作過程 請輸入一個數值: 4.8 它的3次方是:

55 引數 (arguments) 及函數的重載 (Overloading)

56 使用內建的數學函式時最常犯的錯誤 -- 絕對值的使用
使用內建的數學函式時最常犯的錯誤 -- 絕對值的使用 abs(x) 的結果是整數,而fabs(x) 才能獲得正確的浮點數。例如: double x = ; cout << abs(x); // 得到253 cout << fabs(x); // 得到

57 常用的數學函數

58 3.5 邏輯值及其運算 邏輯值又稱為布林資料 (Boolean data),只有true和false兩種值,分別代表「真」和「偽」。
在 C++ 中,任何不是 0 的值進行布林資料判斷的結果都視為true。

59 關係運算 (Relational Operations)
關係表達式 (relational expression): x < 3.8 的計算結果是1 ( x 小於 3.8 ) 或 0 ( x 大於或小於 3.8 )。

60 常用的關係運算子 (relational operators )
意義 範例 < 小於 x < 3.8 > 大於 x > 10.0 <= 小於或等於 4.8 <= y >= 大於或等於 c >= b == 相等 x == y != 不相等 x != y

61 C++邏輯運算子 (logical operators)
邏輯意涵 範例 && AND ( a > b ) && ( c > d ) || OR ( x > 8.2 ) || ( y < 0.0 ) ! NOT ! ( x < 0.0 )

62 關係運算子和邏輯運算子的運算優先順序 運算子 結合規則 相關的等值運算 ! ++ -- -(負號) 從右至左 -!a -(!a) * / %
! (負號) 從右至左 -!a -(!a) * / % 從左至右 a*b/c ( a * b ) / c + - (減) a*b–c ( a * b ) – c < <= > >= a+b<c–d (a+ b) < ( c – d ) == != a<b == c–d (a< b) == (c – d) && a==b && c!=d (a == b )&&(c!=d ) || a && b||c (a && b) || c = += -= /= a = b||c a = (b || c)

63 關係運算和邏輯運算 (1) a * b – c < d (2) y = ( b > 10.0 ) ;

64 迪摩根定理 (De Morgan' s law) not (A and B) 等於 (not A) or (not B)
not (A or B) (not A) and (not B) 以數學式表示 ( 分別為OR及AND的意思):

65 迪摩根定理的應用實例 !( x = a && y != b && z != c ) 可進一步改寫成:

66 bool 資料型態的應用實例:程式 BoolCheck.cpp
#include <iostream> using namespace std; // 主程式 int main() { bool b1, b2, b3, b4; b1= true; b2= false; b3= (3>1); b4= (3<1); cout << "b1 = " << b1 << endl; cout << "b2 = " << b2 << endl; cout << "b3 = " << b3 << endl; cout << "b4 = " << b4 << endl; cout << "Size of bool is : " << sizeof(bool) << " byte" << endl; cout << "Size of b1 is : " << sizeof(b1) return 0; }

67 程式 BoolCheck.cpp 執行結果 b1 = 1 b2 = 0 b3 = 1 b4 = 0
Size of bool is : 1 byte Size of b1 is : 1 byte

68 字元資料 1. 大寫與小寫英文字字母,A~Z,a~z。 2.十個阿拉伯數字0~9。 3.特別符號,如 + $ - @ ! 等等。
共128個符號。為了區別,所有的字元都以單引號前後包起來: 'a' 'A' '$' '+' '5'

69 字元 字元以ASCII碼儲存。每個字元佔一個位元組的大小。
ASCII是American Standard Code for Information Interchange的縮寫。 例如 a 存成 b 存成 Q = 8110 = 。

70 字元的資料型態 char Ch = 'f' ; // 定義一個字元變數ch 其內容存了字母f
cout << Ch << endl;  // 輸出的是字母f而不是 'f'

71 中文字的儲存 BIG-5 Unicode (通用碼),亦採用16位元編碼,能夠涵括世界上各種不同的文字和符號系統。

72 逃離序列(escape sequences)
代表無法用單一符號表示,或是無法顯示的字元。 反斜線「\」則稱為逃離字元 (escape character)。如: '\b' '\t' '\\'

73 常用的逃離序列 Escape Sequence code 意義 \n 00001010 跳到下一行(newline) \t 00001001
跳到下一個定位點(tab) \b 退回一格(back) \f 跳到下一頁(form feed) \r 輸入(return) \\ 反斜線 \ \’ 單引號 ’ \” 雙引號 ” \0 字串結束符號

74 字串(string) 一序列用雙引號「"」包起來的字元。 在儲存的時候,所有的字串後面都會被自動加上字元 '\0',代表字串的結束。 例如:
"c+b="  "中文"  "The answer is: "  "\nCorrect" "C:\\C++\\Examples\\File.cpp“ 在儲存的時候,所有的字串後面都會被自動加上字元 '\0',代表字串的結束。

75 儲存字串的 byte 數目 "c+b=" // 使用5 個位元組儲存 "中文" // 使用5 個位元組儲存
"中文" // 使用5 個位元組儲存 "Good! " // 使用6 個位元組儲存 "\nAnswer: " //使用9 個位元組儲存 (每個中文字都以兩個bytes儲存)

76 字串的儲存 "Good!" 儲存成: G o d ! \0 1 byte

77 字串的儲存 "中文" 儲存成: \0 2 bytes 1 byte

78 驗證字串的儲存 // StringSize.cpp StringSize.cpp
// 主程式 int main() { cout << "字串 \"c+b=\" 的大小為 " << sizeof("c+b=") << "位元組" << endl; } 程式執行結果 : 字串 "c+b=" 的大小為 5 位元組

79 字元也可以進行運算 cout << 'a' + 0 << endl; //答案為97
cout << '0' << endl; //答案為48 cout << '\0' << endl; //答案為1 ('a' 的二進位儲存方式 所對應的值為97。) (字元 '0' 的值是48,而無法顯示的字元 '\0' 的值才是0。)

80 3.7 位元處理運算 位元處理運算子 位元處理運算子 意義 ~ 補數 (complement) << 左移 >>
右移 & 且(AND) ^ XOR | 或(OR)

81 位元處理運算子的真值表 位元處理運算子 意義 ~ 補數 (complement) << 左移 >> 右移 &
且(AND) ^ XOR | 或(OR)

82 位元處理運算子 AND 針對位元組的處理結果
表示式 計算結果 a b a & b

83 位元處理運算子 XOR 針對位元組的處理結果
表示式 計算結果 a b a ^ b

84 位元處理運算子 OR 針對位元組的處理結果 OR運算 表示式 計算結果 a 01000001 b 01100010 a | b

85 位元處理運算子 ~ (補數運算) 針對位元組的處理結果
表示式 計算結果 a ~a

86 右移運算針對位元組的處理結果 右移運算 表示式 計算結果 a 10011010 a >> 2 00100110
如果有一個數值X,且N為整數,則 X >> N; 會將X的所有位元往右移N個位元位置,原來左端的位置則 補上0。 如果原來的數值是正整數,則右移一位元相當於除以2的運 算,左移一位元則相當於乘以2。

87 左移運算針對位元組的處理結果 左移運算 X << N; 會將X的所有位元往左移N個位元位置,原來右端的位置則補上0。
如果原來的數值是正整數,則左移一位元則相當於乘以2。 表示式 計算結果 a a << 3

88 位元處理程式 BitOp.cpp // BitOp.cpp #include <iomanip>
using namespace std; // 主程式 int main() { short Ia = 0x5678, Ib = 0x12ff; char C1 = 'A' ; cout << hex; cout << "Ia & Ib = ox" << (Ia & Ib) << endl; cout << "C1 >> 2 = ox" << (C1>>2) << endl; return 0; } 程式BitOp.cpp執行結果 : Ia & Ib = ox1278 Ia ^ Ib = ox4487 C1 >> 2 = ox10


Download ppt "能盡物之性,則可以贊天地之化育。 可以贊天地之化育,則可以與天地矣。 《中庸﹒第二十一章》"

Similar presentations


Ads by Google