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

Slides:



Advertisements
Similar presentations
1 第二讲 C++ 编程基础. 2 主要内容 C++ 语言概述 C++ 编程基础 数据的简单输入输出 C++ 的发展 C++ 源程序结构与书写规范 C++ 编译器和集成开发环境.
Advertisements

第一單元 建立java 程式.
計算機程式語言實習課.
物件導向語言基礎 Chapter 4 認知 學完本章應了解何謂常數、變數。 了解有哪些運算式、運算子和基本輸入、輸出指令。
第 2 章 初探 C++.
JAVA 程式設計 資訊管理系 - 網路組.
第四章 數列與級數 4-1 等差數列與級數 4-2 等比數列與級數 4-3 無窮等比級數 下一頁 總目錄.
C++程序设计 王希 图书馆三楼办公室.
課程名稱:程式設計 授課老師:________
第3章 變數與運算子 3-1 電腦記憶體的基礎 3-2 變數的命名與宣告 3-3 VB.NET的資料型別
Visual C++ introduction
簡易C++除錯技巧 長庚大學機械系
C++程序设计 第二讲 清华大学软件学院.
第3章 變數、資料型別與運算子.
2 C++ 程式概論 2.1 C++ 程式結構 程式註解 // 插入標題檔 #include 2-3
C 程式設計— 語言簡介 台大資訊工程學系 資訊系統訓練班.
101北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
Java程式概觀.
C++ 程式設計— 語言簡介 台大資訊工程學系 資訊系統訓練班.
C語言簡介 日期 : 2018/12/2.
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
第3章 變數、常數與資料型態 3-1 C語言的識別字 3-2 變數的宣告與初值 3-3 指定敘述 3-4 C語言的資料型態
第3章 變數、資料型別與運算子 3-1 變數與資料型別的基礎 3-2 變數的命名與宣告 3-3 資料型別 3-4 運算式與運算子
本章中將會更詳細地考慮有關重複的概念,並且會 介紹for和do…while等兩種用來控制重複的敘述 式。 也將會介紹switch多重選擇敘述式。 我們會討論直接和迅速離開某種控制敘述式的 break敘述式,以及用來跳過重複敘述式本體剩餘 部份的continue敘述式。 本章會討論用來組合控制條件的邏輯運算子,最後.
C++语言程序设计 第二章 C++简单程序设计.
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
程式設計實習課(四) ----C 函數運用----
第一單元 建立java 程式.
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
C++ 程式設計 基礎篇 張啟中 Chang Chi-Chung.
C程式的架構 基本的資料型態 變數的宣告 常見的語法錯誤 基本的運算 優先順序與結合律 資料型態的轉換
第三章 資料型態與輸出控制 本章學習目標 認識Matlab的基本資料型態 練習資料型態的轉換 學習如何控制Matlab的輸出格式
第一章 直角坐標系 1-3 函數圖形.
第3章 Java語法的JSP程式 3-1 Java語言的基礎 3-2 JSP程式的基本架構 3-3 Java的變數與資料型態
開始使用Visual C++.
第二章 基本数据类型及运算 C数据类型概述 基本数据类型 运算符和表达式 混合运算与类型转换 数据的输入输出 顺序程序设计举例.
JAVA 程式設計 資訊管理系 - 網路組.
Speaker: Liu Yu-Jiun Date: 2009/4/29
輸入&輸出 函數 P20~P21.
CH05. 選擇敘述.
挑戰C++程式語言 ──第8章 進一步談字元與字串
認識常數與變數 學習C++所提供的各種基本資料型態 瞭解溢位的發生 學習認識資料型態之間的轉換
第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入
第6章 運算式與運算子 [算術與多功能計算機]
C++语言程序设计教程 第2章 数据类型与表达式 第2章 数据类型与表达式 制作人:杨进才 沈显君.
C++程式設計入門 變數與運算子 作者:黃建庭.
第二章 类型、对象、运算符和表达式.
挑戰C++程式語言 ──第7章 輸入與輸出.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
#include <iostream.h>
北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
Introduction to the C Programming Language
變數與資料型態  綠園.
資料表示方法 資料儲存單位.
本章主題 C++的程式結構 資料型態與宣告 算術運算 簡易的輸入輸出指令 程式編譯(Compile)的過程與原理.
適用於多選一 可減少if 與 else配對混淆的錯誤.
計算機程式設計 老師:謝孟諺 助教:楊斯竣.
第二章 数据类型、运算符和表达式 §2.1 数据与数据类型 §2.2 常量、变量和标准函数 §2.3 基本运算符及其表达式 目 录 上一章
變數、資料型態、運算子.
Programming & Language Telling the computer what to do
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
變數與資料型態  綠園.
Array(陣列) Anny
Introduction to the C Programming Language
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

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

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

C++ 的資料型態

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

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

程式 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 : " << 012 << endl; cout << " 0x12 : " << 0x12 << endl; return 0; }

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

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

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

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

程式 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; }

程式 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

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

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

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

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

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

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

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

程式 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 的平均值是: 5.76667

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

資料型態間的轉換- 程式 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

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

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

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

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

程式 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; }

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

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

程式 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; }

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

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

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

常用的數學函數

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

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

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

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

關係運算子和邏輯運算子的運算優先順序 運算子 結合規則 相關的等值運算 ! ++ -- -(負號) 從右至左 -!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)

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

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

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

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; }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

位元處理程式 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