回顧 第一個程式 基本架構 五行必寫的公式 註解的寫法 cout << endl 變數 (variables) 變數名稱 限制? 變數型別 (type) 字元型別 char 整數型別 short, int, long 浮點數型別 float, double Lecture 2 變數 ( 續 ) C++ 字串 (string) 算術運算與布林運算 3 4 意義 變數型態 記憶體量 * 數值範圍 準確度 (Accuracy) 字元 char -28 ~ +2 精確 整數 short int 2-3268 ~ 326 精確 int 4-2 3 ~ 2 3 - 精確 long int 4-2 3 ~ 2 3 - 精確 浮點數 float 4-3.4x0 38 ~ +3.4x0 38 6- 位有效數字 double 8 -.x0 308 ~ +.x0 308 4 位有效數字 long double 8 -.x0 308 ~ +.x0 308 4 位有效數字 * 單位為 bytes 記憶體量與所使用之作業系統 硬體 以及編譯器等皆有關係, 本表則依據 win32 作業系統之 Visual C++ 9.0 2-.cpp char a = 'A'; cout << (int) a << endl; a = 6; cout << sizeof(a) << endl; cout << sizeof(char) << endl; A 6 C 宣告一個變數 a, 設定初值為 A 字元 輸出 a 變數的值 以整數方式輸出 a 變數的值 將 6 存入 a 變數輸出 a 變數的值輸出 a 變數所佔記憶體大小 輸出 char 型別所佔記憶體大小 6 整數型態 (integer) 三種 :short int int long int short int long 長度與 CPU & 編譯器 (compiler) 有關 一般來說 int: 4 bytes (32 bits 2 32 =4,294,96,296 ~ 40 億 ) short (int): 短整數, 佔用記憶體量 <= int long (int): 長整數, 佔用記憶體量 >= int Modifier ( 修飾字 ) : unsigned vs. signed unsigned int signed short 有號數或無號數 當資料不可能為負值時, 可使用無號數, 使可代表的數值大小擴大一倍 2-2.cpp short int a = 326; unsigned short b = 63; cout << a << ", " << b << endl; a = a + ; b = b + ; cout << a << ", " << b << endl; 326, 63-3268, 0 這裡所看到的情況稱為溢位 (overflow)
8 實數, 浮點數 (real or floating point numbers) 型態 float, double, long double 佔用記憶體量與 CPU & 編譯器 (compiler) 有關 目前一般來說 double: 8 bytes (64 bits) float: 佔用記憶體量 <= double double: 佔用記憶體量 >= double IEEE-4 規定了浮點數在記憶體裡的儲存方式 Example: float a; 宣告變數 a, 型別是浮點數 double b = 3.0e8; 宣告變數 b, 並初始化為 3x0 8 2-3.cpp double a = 3.49263899323846; float b = 3.e8; cout << b << endl; 宣告一倍精度浮點數 a 並存入 3.49.. 宣告一單精度浮點數 b 並存入 3.e8 (3x0 8 ) 3.49 3e+008 9 0 變數型態 variable type 布林值 (boolean) 型態 bool 用來儲存布林或邏輯運算的結果 : 真 (true) 或是假 (false) 之後會與決策判斷的指令一起使用 2-4.cpp bool a = false; bool b = true; bool c = 00; cout << b << endl; cout << c << endl; 宣告一布林變數 a, 並存入 false 宣告一布林變數 b, 並存入 true 宣告一布林變數 c, 並存入 00 輸出變數 a 的值輸出變數 b 的值輸出變數 c 的值 0 在 C/C++ 中, 非 0 值為真 (true),0 為假 (false) 2 常數變數 (constant variable) 在宣告變數時, 對於整數可使用修飾字 unsigned/signed 將一個整數或字元型態的變數宣告為無號數或有號數 另一個修飾字 const, 可用於前述的所有型別, 讓所宣告出來的變數成為常數變數 Example: const double a = 3.49; 在宣告常數變數時, 必需同時進行初始化的動作 程式內若試圖對常數變數進行修改, 將導致編譯錯誤 2-.cpp int a=3, c ; const int b=4; c = a + b; // b = ; cout << "a+b=" << c; 2
3 4 回顧一下 變數名稱 如何命名 命名限制 變數型態 字元 char a; a = 6; a= A ; 整數 int b; b = 0; 浮點數 double c = 3.49e; 布林數 bool T = true; bool F = false; 修飾字 : const unsigned, signed 字串 (string) 在 C++ 裡有兩種字串 C- 字串, 之後會介紹, 由 C 語言繼承過來 C ++ 字串, 方便易用, 但不能用在 C 語言 型別為 string 需要 #include <string> 記得在 C++ 裡字串前後需要加雙引號 " 6 2-6.cpp #include <string> string weather=" 今天天氣很好 \n"; cout << weather; weather=" 明天會下雨 \n"; cout << weather; 需有這一行才能使用 C++ 的字串功能 其中,\n 為一特別的字元, 會在印出時將列印位置移到下一列的開頭 宣告 weather 為字串型別的變數 回答以下問題 我今天想要儲存 3.49264, 應該選用何種變數型別? 今天有一個資料是 2, 那些變數型別可以使用? 今天我想要儲存一個字元 q, 可以使用何種變數型別? -4.2 可以使用何種變數型別儲存? 我要怎麼確定讓一個變數的值不會在程式被修改? 8 算術運算 Arithmetic operations 算術運算 arithmetic operations 我們在 -2.cpp 中已看過了兩個運算子 (+, =) 以進行算術運算 int a=3; int b, c; b = 4; c = a + b; cout << "a+b=" << c; 在 C/C++ 的算術運算中有以下重點 : 算術運算子與運算元 算術運算子的優先順序 型別轉換 3
9 20 2-.cpp int a=4; int b=4; cout << "a= " << a << endl; cout << "b= " << b << endl; cout << "a+b=" << a+b << endl; cout << "a-b=" << a-b << endl; cout << "a*b=" << a*b << endl; cout << "a/b=" << a/b << endl; cout << "a%b=" << a%b << endl; 試試看 請將以上程式的 a 改成 3,a/b 的結果? 將以上程式的變數形別改成 char, 結果? 將以上程式的變數形別改成 double, 結果? 2 22 二元算術運算子 = : 指定 (assignment) +: 相加 (addition) -: 相減 (subtraction) *: 相乘 (multiplication) /: 相除 (division) %: 取餘數 (modulus) a = 3 + 2; // a= b = 3 2; // b= c = 3 * 2; // c=6 d = 3 / 2; // d=. e = 3 % 2; // e= 運算的順序上與數學相同 : 先乘除後加減,% 視為除法運算 3 + 2 * 6 = 3 * 6 + 3 = 2 3 * 6 / 2 = 9 也同於數學運算式, 可用括號 ( ) 來改變運算的順序 (3 + 2) * 6 = 30 3 * (6 + 3) = 2 (3 * 6) / 2 = 9 2-8.cpp int a=2; int b; b = a + 3 * a; b = b + 3 * a; cout << "b+3 is " << b+3 << endl; 23 24 2-9.cpp short a=-30000; short b=0000; short c = a b; short d = a b / 000; short e = ( a b ) / 000; cout << "a=" << a << endl; cout << "c=" << c << endl; cout << "d=" << d << endl; cout << "e=" << e << endl; 3266 326-3268 -326-3266 (-30000 0000) (-3268) = 232 3268 + (-232) = 236 此種數字超出範圍的狀況, 專業術語稱為 Underflow ( 向下溢位 ) 若是加上去超出範圍, 稱為 Overflow ( 溢位 ) 一元運算子 (Unary Operation) 一元運算子即僅需一個運算元即可進行計算的運算子 ++: 將運算元的值遞增 (increment), 在算術運算時即為 + --: 將運算元的值遞減 (decrement), 在算術運算時即為 - 範例 : A=3; A++; A 變為 4 A--; A 的值變為 3 但是! 4
2 26 2-0.cpp 前置 (prefix) 與後置 (postfix) int A=; cout << A++ << endl; cout << ++A << endl; cout << A++ << endl; cout << A << endl; 8 前置 ++a --b ++c 在這行敍述執行之前完成該運算 D=++C; 後置 a-- b++ 在這行敍述執行之後再進行該運算 D=C++; C=C+; D=C; D=C; C=C+; 2. 推土機 請由 http://40.8.0.4/courses/cvb/202/lab/lab0.zip 請利用以下的操作將土堆移動到指定的位置 car.forward(); car.backward(); car.turnleft(); car.turnright(); car.slabdown(); car.movemoundup(); car.putmounddown(); // 前進 // 後退 // 左轉 // 右轉 // 放下置土板 // 搬起土堆 // 放下土堆