資料型別的選擇 如果資料或是運算過程可能會出現小數點 (e.g. BMI), 宜使用浮點數 (double, float) char 僅能儲存一個英文字 數字 或是英文中出現的標點符號等等鍵盤上可直接看得到 按得出的符號 若要儲存中文字, 目前建議使用 string 型別 A 和 A 的差別, 我們目前還沒辦法說得很詳細 只能說一個是字元 一個是字串 布林運算式的寫法 如果 x 等於, 就印出 Hello 如果 x 等於 或是, 就印出 Hello 如果 x 大於 且小於 8, 就印出 Hello 如果 x>=y >= z, 就印出 Hello if(x=) cout << "Hello"; if(x== ) cout << "Hello"; if(x== < 8) cout << "Hello"; if(x>=y>=z) cout << "Hello"; 布林運算式的正確寫法 如果 x 等於, 就印出 Hello 如果 x 等於 或是 x 等於, 就印出 Hello 如果 x 大於 且 x 小於 8, 就印出 Hello 如果 x >=y 而且 y >= z, 就印出 Hello if(x==) cout << "Hello"; 一次輸入多筆資料 cin >> x, y, z; cin >> x >> y >> z; if(x== x==) cout << "Hello"; if(x> && x<8) cout << "Hello"; if(x>=y && y>=z) cout << "Hello"; 6 回顧 平方 的平方 #include<iostream> int x = ; int y = x ^ ; ^ 的確是 C/C++ 裡的一佪運算子, 但是它的運算不是大家在 Excel 裡知道的運算 ^ 進行的運算稱為 exclude or, 簡寫為 xor for ( ; ; ) { break; cout << y << endl; continue;
7 8 for 迴圈 for (i=0; i<; i++) { 令 i = 0 0 < true i++; < true 6-.cpp int x, i; cout << "\n 請輸入一個正整數 ; "; cin >> x; 迴圈被執行到時初始化的動作 迴圈要執行或要被繼續執行的條件 迴圈完成一次後要做的動作 迴圈內欲重複執行的敍述 迴圈結束後要執行的敍述 i++; < true i++; < false for(i=;i<=x;i++) { if(x % i == 0) break; if(i == x) cout << x << " 為質數 "; else cout << x << " 不是質數, 可以被 " << i << " 整除 "; 9 0 今日內容 while 迴圈 Lecture 6 while do while 無窮迴圈巢狀迴圈 do/while 迴圈 巢狀迴圈 無窮迴圈 while 迴圈 while 的語法 while ( 條件運算式 ) { 欲重複執行的程式片斷 ; 其中條件運算式 / 布林運算式的部份與 if 的寫法一樣 count>0 a<0 && b<0 while 和 for 迴圈一樣, 都會先檢查條件運算式的結果決定迴圈的內容是否會被執行, 所以有可能一次都不會被執行
6-.cpp int count, sum=0; cout << " 請輸入一個整數 : "; cin >> count; while(count>0) { sum = sum + count; cout<< "count=" << count << ", sum=" << sum << endl; count--; 請輸入一個整數 : 0 count=0, sum=0 count=9, sum=9 count=8, sum=7 count=7, sum= count=6, sum=0 count=, sum= count=, sum=9 count=, sum= count=, sum= count=, sum= 6-.cpp int ans; bool isodd = true; while(isodd) { cout << " 請輸入一個偶數 : "; cin >> ans; isodd = (ans % == ); cout << " 你輸入了一個偶數 : " << ans << endl; 請輸入一個偶數 : 請輸入一個偶數 : 請輸入一個偶數 : 請輸入一個偶數 : 7 請輸入一個偶數 : 6 你輸入了一個偶數 : 6 6 6-.cpp 費氏級數 (Fibonacci number) 之定義如下 :,,,,, 8,,, 級數中每個數字皆為級數中的前兩個數字加總 如何寫一個程式依序列出級數中小於 0 的各項?. 我們自己會怎麼作?. 過程當中我們需要同時記得幾個資料? 6-.cpp int a=, b=, c=a+b; cout << a << ", " << b << ", "; while(c<=0) { a=b; b=c; cout << b << ", "; c=a+b;,,,,, 8,,,,, 89,, 7 8 do/while 迴圈 do/while 的語法 do { 欲重複執行的程式片段 ; while ( 布林運算式 ); 很重要 其中布林運算式的部份與 if 的寫法一樣 count>0 a<0 && b<0 do/while 迴圈與 while 或 for 最大不一樣的地方在於它的條件判斷在迴圈內容之後, 亦即它的迴圈內容被保證至少執行到一次 記得 while ( ) 之後要加分號!
9 0 6-.cpp 請輸入你的身高 ( 公分 ): 70 請輸入你的體重 ( 公斤 ): 60 你的 BMI 值為 : 0.76 再算一次請按 y: y 請輸入你的身高 ( 公分 ): 80 請輸入你的體重 ( 公斤 ): 60 char again; 你的 BMI 值為 : 8.8 float weight, height, BMI; 再算一次請按 y: y do { 請輸入你的身高 ( 公分 ): 7 cout << " 請輸入你的身高 ( 公分 ): "; 請輸入你的體重 ( 公斤 ): cin >> height; 你的 BMI 值為 : 8.9 cout << " 請輸入你的體重 ( 公斤 ): "; 再算一次請按 y: n cin >> weight; BMI = weight*0000 / height / height; cout << " 你的 BMI 值為 : " << BMI << endl; cout << " 再算一次請按 y: "; cin >> again; while(again=='y' again=='y'); 6-6.cpp int ans; do { cout << " 請輸入一個偶數 : "; cin >> ans; while(ans%!= 0); cout << " 你輸入了一個偶數 " << endl; 請輸入一個偶數 : 請輸入一個偶數 : 請輸入一個偶數 : 請輸入一個偶數 : 7 請輸入一個偶數 : 6 你輸入了一個偶數 小結 while 迴圈 0 < true while do while 注意, 之前介紹過的 break 與 continue 一樣也可以使用在 while / do-while 迴圈內 int a = 0; while( a < ) { < true < true 判斷迴圈內容是否執行或繼續執行 迴圈內欲重複執行的敍述. < false 迴圈結束後要執行的敍述. do/while 迴圈 int a = 0; do { while(a<); < true < true 無窮迴圈 Infinite loop 迴圈內欲重複執行的敍述 迴圈要執行或要被繼續執行的條件 < false 迴圈結束後要執行的敍述
6 無窮迴圈 (Infinite loop) 沒有結束的迴圈 用於無論在迭代開始 (for, while) 或是結束 (do/while) 來判斷是否進行下次迭代都不合適的時候, 一般配合 break 使用 真的不想結束程式的時候 for(;;) { while(true) { do { while(); 6-7.cpp 這個 else 有沒有差別? int choice; 對程式執行結果而言, 沒有! 就程式效率而言, 有! for(;;) { cout << "\n 歡迎使用本程式 "; cout << "\n 輸入 ) 問候, ) 感謝, ) 再見 : "; cin >> choice; if(choice==) break; if(choice==) { cout << "\nhello there. How are you? "; else if(choice==) { cout << "\nthank you ver much. "; cout << "\nsee you next time" << endl; 7 8 歡迎使用本程式輸入 ) 問候, ) 感謝, ) 再見 : Hello there. How are you? 歡迎使用本程式輸入 ) 問候, ) 感謝, ) 再見 : Thank you ver much. 歡迎使用本程式輸入 ) 問候, ) 感謝, ) 再見 : 巢狀迴圈 nested loop Hello there. How are you? 歡迎使用本程式輸入 ) 問候, ) 感謝, ) 再見 : See you next time 9 0 巢狀迴圈 就是迴圈裡面還有迴圈 for, while, do/while 三種迴圈可以互相混合 層數幾乎沒有限制 被包起來的迴圈稱作 內迴圈 (inner-loop), 包其它迴圈的稱作 外迴圈 (outer-loop) 外迴圈 (i) 通常不會使用或參考到內迴圈的計數器 (j) 內外層的迴圈計數器的增量通常獨立控制 內迴圈 (j) 有時會參考到外迴圈 (i) 的計數器 第一層迴圈 第二層迴圈 for(i=0;i<;i++) { cout << "*, i=" << i << endl; for(j=0;j<;j++) { cout << "**, i=" << i << ", j=" << j << endl; 6-8.cpp int j; for(int i=0; i<=0; i=i+) { cout << "* " << i << endl; for(j=; j<=; j++) { cout << "** " << i << ", " << j << endl; cout << "+ " << i << ", " << j << endl; * 0 ** 0, ** 0, ** 0, + 0, * **, **, **, +, * 0 ** 0, ** 0, ** 0, + 0,
a b a b 6-8.cpp c b int j; c b a b c c b for(int i=0; i<=0; i=i+) { c b cout << "* " << i << endl; a b a b c c b for(j=; j<=; j++) { c b cout<<"** "<<i<<", "<<j<<endl; c b c b cout<<"+ "<<i<<", "<<j<<endl; a b c b 6 c b c b c b 6 * 0 ** 0, ** 0, ** 0, + 0, * **, **, **, +, * 0 ** 0, ** 0, ** 0, + 0, 6-9.cpp int i, j; for(i=0; i<; i++) { for(j=0; j<; j++) { cout << "*"; cout << endl; 6-0.cpp int i, j; for(i=0; i<0; i++) { for(j=0; j<i; j++) { cout << "*"; cout << endl; * ** *** * ** *** * 6-.cpp 我們想列出兩位數字中 ( 總共有幾個?) 各個位數不相同者, 並計算總共有幾個符合條件的數字 e.g.,, 等不符合條件. 我們怎麼列出所有兩位數?. 我們怎麼將需求之條件 ( 各個位數不相同者 ) 寫成程式? 6 6-.cpp int count=0; for(int i=;i<0;i++) { for(int j=0;j<0;j++) { if( i!= j ) { cout << i << j << endl; count++; cout << " 共有 : " << count << endl; 隨堂練習 6
7 8. 排列組合 參考輸出 請寫一程式, 列出 0 所組成的三位數中互相不重複的所有數字, 並印出共有幾個符合條件的數字 Hint : 每一位數由一個迴圈控制 Hint : 使用條件判斷 + continue 或是 break 跳過不要的數字 Hint : 如果自己想不出來的話, 可以參考 6-.cpp 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7