3 數學運算 3.1 鍵盤輸入 鍵盤輸入 輸入函數 cin 輸入函數 cin 多重輸入 cin 多重輸入 cin 輸出格式化 輸出格式化 設定輸出長度 setw 設定輸出長度 setw 設定有效數字 setprecision 設定有效數字 setprecision 設定輸出旗號 setiosflags 設定輸出旗號 setiosflags cout 成員函數 cout 成員函數 輸入格式化 輸入格式化 設定輸入長度 setw 設定輸入長度 setw cin 成員函數 cin 成員函數 算術運算 算術運算 算術運算符號 算術運算符號 上限與下限溢位 轉換資料型態 指定運算 單一指定 多重指定 混合指定 數值函數 亂數函數 三角函數 指數與對數 冪次與開方 小數進位與切除小數 取絕對值 3-37
3.1 鍵盤輸入 標準輸入元件是鍵盤,所以本節將介紹如 何在 DOS 系統下,使用 cin 函數讀取鍵盤輸 入的字元與字串。 標準輸入元件是鍵盤,所以本節將介紹如 何在 DOS 系統下,使用 cin 函數讀取鍵盤輸 入的字元與字串。
3.1.1 輸入函數 cin #include #include cin >> 變數 ; cin >> 變數 ; 範例 範例 int length;// 宣告整數變數 length cin >> length;// 將輸入資料存入 length
3.1.2 多重輸入 cin #include #include cin >> 變數 1 >> 變數 2 >>... >> 變數 n; cin >> 變數 1 >> 變數 2 >>... >> 變數 n; 範例 範例 int width, height;// 宣告變數 width 與 height cin >> width >> height; // 分別存入 width 與 height
程式 3-01 : cin 練習 // 檔名: d:\C++03\C0301.cpp #include void main() { char key; cout << " 請按任意鍵: "; cin >> key; cout << " 輸入的鍵是: " << key << endl; }
執行結果
3.2 輸出格式化 設定輸出長度 setw 設定輸出長度 setw 設定有效數字 setprecision 設定有效數字 setprecision 設定輸出旗號 setiosflags 設定輸出旗號 setiosflags cout 成員函數 cout 成員函數
程式 3-02 :定位輸出練習 // 檔名: d:\C++03\C0302.cpp #include void main() { int n11 = 14, n12 = , n13 = 44; int n21 = , n22 = 9, n23 = 524; cout << n11 << '\t' << n12 << '\t' << n13 << endl; cout << n21 << '\t' << n22 << '\t' << n23 << endl; }
執行結果
期望的結果
3.2.1 設定輸出長度 setw #include #include setw( 指定長度 ) setw( 指定長度 ) 範例 範例 int number = 25; cout << '(' << number << ")\n";// 輸出 (25) cout << '(' << setw(3) << number << ")\n"; // 輸出 ( 25) cout << '(' << setw(5) << number << ")\n"; // 輸出 ( 25)
程式 3-03 : cout 與 setw 練習 // 檔名: d:\C++03\C0303.cpp #include void main() { int n11 = 14, n12 = , n13 = 44; int n21 = , n22 = 9, n23 = 524; cout << setw(12) << n11 << setw(12) << n12 << setw(12) << n13 << endl; cout << setw(12) << n21 << setw(12) << n22 << setw(12) << n23 << endl; }
執行結果
3.2.2 設定有效數字 setprecision #include #include setprecision( 有效位數 ) setprecision( 有效位數 ) 範例 範例 const double PI = ; cout << setprecision(10) << PI << endl; // 輸出 十位 cout << setprecision(8) << PI << endl; // 輸出 八位有效 cout << setprecision(6) << PI << endl; // 輸出 六位有效
程式 3-04 :設定輸出精確度練習 // 檔名: d:\C++03\C0304.cpp #include void main() { const double PI = ; cout << PI << endl; cout << setprecision(10) << PI << endl; cout << setprecision(8) << PI << endl; cout << setprecision(6) << PI << endl; cout << setprecision(3) << PI << endl; cout << setprecision(1) << PI << endl; }
執行結果
3.3 輸入格式化 設定輸入長度 setw 設定輸入長度 setw
3.3.1 設定輸入長度 setw #include #include setw( 指定長度 ) setw( 指定長度 ) 範例 範例 char string[4];// 宣告字串變數 string cin >> setw(4) >> string; // 設定輸入字數並取得輸入
Exercise 04 寫一個 C++ 程式,請使用者輸入兩個整數之後, 會格式化輸出相加後的值。如下所示 寫一個 C++ 程式,請使用者輸入兩個整數之後, 會格式化輸出相加後的值。如下所示 專案及程式檔案名稱請使用「學號 _04 」,檔 案上載至 ftp:// 上的 Ex04 目錄 專案及程式檔案名稱請使用「學號 _04 」,檔 案上載至 ftp:// 上的 Ex04 目錄 ftp:// 上的 Ex04 ftp:// 上的 Ex04
3.4 算術運算 C++ 的數學運算式( mathematical expressions )與一般數學運算式相容,它代 表一個數值的敘述 。 C++ 的數學運算式( mathematical expressions )與一般數學運算式相容,它代 表一個數值的敘述 。 範例 範例 int a = 5, b = 3, c = 6; int x = 3 * a + 2 * b + c;
3.4.1 算術運算符號 符號功能 C++ 運算式 數學運算式 -x負號 a = -x a = -5 +x正號 a = +x a = +5 *乘號 a = x * y a = 5 3 /除號 a = x / y a = 5 / 3 %餘數 a = x % y a = 5 / 3 的餘數 +加號 a = x + y a = 減號 a = x - y a = 5 - 3
程式 3-13 :算術運算符號練習 // 檔名: d:\C++03\C0313.cpp #include void main() { int a = 1, b = 3, c = 4; int x = b * b - 4 * a * c; cout << "a=" << a << endl << "b=" << b << endl << "c=" << c << endl << "b*b-4*a*c=" << x << endl; }
執行結果
3.4.2 上限與下限溢位 上限溢位( overflows )就是指定一個較大 型態的資料給一個較小型態的變數。 上限溢位( overflows )就是指定一個較大 型態的資料給一個較小型態的變數。 範例 範例 short n1 = 32767;//n1=0x7fff n1 = n1 + 1;//n1=0x8000= 溢位 unsigned short n2 = 65535;//n2=0xffff n2 = n2 + 1;//n2=0x0000=0 上限溢位
3.4.2 上限與下限溢位 ( 續 ) 下限溢位( underflows )也是指定一個較大 型態的資料給一個較小型態的變數。 下限溢位( underflows )也是指定一個較大 型態的資料給一個較小型態的變數。 範例 範例 short n3 = ;//n3=0x8000 n3 = n3 - 1;//n3=0x7fff=32767 溢位 unsigned short n4 = 0;//n4=0x0000 n4 = n4 - 1;//n4=0xffff=65535 溢位
3.4.3 轉換資料型態 指定型態 ( 資料 | 變數 ) 指定型態 ( 資料 | 變數 ) 由小轉大 由小轉大 範例一 範例一 int n; short n1 = 32767;//n1=32767 n = int(n1 + 1);//n= =32768 範例二 範例二 int n; unsigned short n2 = 65535;//n2=65535 n = int(n2 + 1);//n= =65536
3.4.3 轉換資料型態 ( 續 ) 範例三 範例三 int n; short n3 = ;//n3= n = int(n3 - 1);//n= = 範例四 範例四 int n; unsigned short n4 = 0;//n4=0 n = int(n4 - 1);//n=0-1=-1 範例五 範例五 int a=5; int b=3; float c = (float(a) / float(b));
3.4.3 轉換資料型態 ( 續 ) 由大轉小 由大轉小 範例一 範例一 int intVar = 65500;//intVar=65500 signed short shortVar = short(intVar);//shortVar=-36 範例二 範例二 short shortLet = 65;//shortLet=65 char charLet = char(shortLet);//charLet='A' 範例三 範例三 float floatNum = f; //floatNum= int intNum = int(floatNum);//intNum=70000 short shortNum = short(floatNum);//shortNum=4464
Exercise Write a C++ program to practice overflow, underflow, and casting. For example, define A and B are both short integer, and then let A and B equal to and , respectively. Show the results of A+1 and B-1 to screen. If cast them to integer, what are the results. Write a C++ program to practice overflow, underflow, and casting. For example, define A and B are both short integer, and then let A and B equal to and , respectively. Show the results of A+1 and B-1 to screen. If cast them to integer, what are the results.
3.5 指定運算 指定運算符號( assignment operators )包 括 指定運算符號( assignment operators )包 括 單一指定運算符號( = ) 單一指定運算符號( = ) 多重指定運算符號 多重指定運算符號 混合運算符號( += 、 -= 、 *= 、 /= 、 %= ) 混合運算符號( += 、 -= 、 *= 、 /= 、 %= )
3.5.1 單一指定 資料型態變數名稱 1, 變數名稱 2, … 資料型態變數名稱 1, 變數名稱 2, … 變數名稱 1 = 初值, 變數名稱 2 = 初值, … 變數名稱 1 = 初值, 變數名稱 2 = 初值, … short shortVar;// 宣告短整數變數 shortVar shortVar = 5;//shortVar 的初值等於 5. shortVar = 10;// 改變 shortVar 的值為 10 資料型態變數名稱 1 = 初值, 變數名稱 2 = 初值, … 資料型態變數名稱 1 = 初值, 變數名稱 2 = 初值, … short shortVar = 5;//shortVar 的初值等於 5
3.5.2 多重指定 變數名稱 1 = 變數名稱 2 … = 初值 ; 變數名稱 1 = 變數名稱 2 … = 初值 ; 範例一 範例一 int a, b, c, d; // 宣告整數變數 a, b, c, d a = b = c = d = 10;// 令 a=b=c=d=10 範例二 範例二 const int VALUE = 100;// 宣告常數符號 int var1, var2, var3;// 宣告變數 var1 = var2 = var3 = VALUE; // 令多個變數 =100
3.5.3 混合指定 變數名稱 op= 資料 ; 變數名稱 op= 資料 ; 範例 範例 a = a + 10;//a+10 存回 a a += 10;//a+10 存回 a
3.6 數值函數 C++ 語言提供一些常用的數學函數 ( mathematical functions ),如三角函數、 指數與對數函數、冪次與開方函數、取整 數函數、取絕對值函數、還有產生亂數函 數等等。 C++ 語言提供一些常用的數學函數 ( mathematical functions ),如三角函數、 指數與對數函數、冪次與開方函數、取整 數函數、取絕對值函數、還有產生亂數函 數等等。 這些數學函數包含於 math.h 標題檔中,亂數 函數則包含於 stdlib.h 標題檔中,所以使用這 些函數之前必須先插入包含該函數的標題 檔到使用者程式的前置處理區。 這些數學函數包含於 math.h 標題檔中,亂數 函數則包含於 stdlib.h 標題檔中,所以使用這 些函數之前必須先插入包含該函數的標題 檔到使用者程式的前置處理區。
3.6.1 亂數函數 產生固定亂數 產生固定亂數 #include #include rand( ) rand( ) 範例 範例 cout << rand() << endl;// 輸出亂數
3.6.1 亂數函數 ( 續 ) 產生種子亂數 產生種子亂數 #include #include srand ( 正整數 ) srand ( 正整數 ) 範例 範例 unsigned seed; cin >> seed;// 輸入種子數 srand(seed);// 設定亂數種子數 cout << rand() << endl;// 輸出亂數
3.6.1 亂數函數 ( 續 ) 產生隨機亂數 產生隨機亂數 #include #include time(* 指標 ) time(* 指標 ) 範例 範例 srand (time(NULL)); cout << rand() << endl;// 輸出亂數
3.6.1 亂數函數 ( 續 ) 調整亂數範圍 調整亂數範圍 下限 + rand( ) % ( 上限 – 下限 + 1) 下限 + rand( ) % ( 上限 – 下限 + 1) 範例 範例 int x, y; x = 10 + rand( ) % ( ); //10~20 的整數亂數 y = rand( ) % (99 + 1); //0~99 的整數亂數
3.6.2 三角函數 #include #include double sin(double 徑度 ) double sin(double 徑度 ) double cos(double 徑度 ) double cos(double 徑度 ) double tan(double 徑度 ) double tan(double 徑度 ) 範例 範例 x = 30 * ( / 180);//x = 30 double a = sin(x); //a = sin(30 ) double b = cos(x); //b = cos(30 ) double c = tan(x); //c = tan(30 )
3.6.3 指數與對數 #include #include double exp( 數值 ) double exp( 數值 ) double log( 數值 ) double log( 數值 ) double log10( 數值 ) double log10( 數值 ) 範例 範例 double a = log(2);//a = ln(2) double b = log10(2);//b = log 10 (2) double c = exp(2); //c = e 2
3.6.4 冪次與開方 #include #include double pow( 底數, 冪次 ) double pow( 底數, 冪次 ) double sqrt( 數值 ) double sqrt( 數值 ) 範例 範例 double a = pow(2, 3);//a=2 3 double b = sqrt(3); //b=√3
3.6.5 小數進位與切除小數 #include #include double ceil( 數值 ) double ceil( 數值 ) double floor( 數值 ) double floor( 數值 ) 範例 範例 int m1 = ceil(3.33)//m1 = 4 int n1 = floor(3.33); //n1 = 3 int m2 = ceil(-3.33)//m2 = -3 int n2 = floor(-3.33); //n2 = -4
3.6.6 取絕對值 #include #include double fabs ( 數值 ) double fabs ( 數值 ) 範例 範例 int a = fabs(5.25);//a = 5.25 int b = fabs(-3.75);//b = 3.75
Ex 05 寫一個加法練習程式,程式產生兩個 100 到 500 的 亂數,並輸出畫面如下 等待使用者輸入答案,並顯示正確答案。 寫一個加法練習程式,程式產生兩個 100 到 500 的 亂數,並輸出畫面如下 等待使用者輸入答案,並顯示正確答案。 專案及程式檔案名稱請使用「學號 _05 」,檔案上 載至 ftp:// 上的 Ex05 目錄 專案及程式檔案名稱請使用「學號 _05 」,檔案上 載至 ftp:// 上的 Ex05 目錄 ftp:// 上的 Ex05 ftp:// 上的 Ex05
Homework 2 設計一個程式,可由使用者輸入學生姓名,國文成績,數學成績,英 文成績。然後計算總分和平均,再輸出使用者輸入的資料、總分及成 績。程式執行結果如下: 請輸入姓名: 曾聰明 請輸入國文成績: 97 請輸入數學成績: 92 請輸入英文成績: 77 統計中 ……………………… 曾聰明的成績如下: ================ 國文: 97 數學: 92 英文: 總分: 266 平均: 設計一個程式,可由使用者輸入學生姓名,國文成績,數學成績,英 文成績。然後計算總分和平均,再輸出使用者輸入的資料、總分及成 績。程式執行結果如下: 請輸入姓名: 曾聰明 請輸入國文成績: 97 請輸入數學成績: 92 請輸入英文成績: 77 統計中 ……………………… 曾聰明的成績如下: ================ 國文: 97 數學: 92 英文: 總分: 266 平均: 88.67