《《分支程序設(shè)計(jì)》PPT課件》由會員分享,可在線閱讀,更多相關(guān)《《分支程序設(shè)計(jì)》PPT課件(30頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、第3章 分支程序設(shè)計(jì),關(guān)系表達(dá)式 邏輯表達(dá)式 If 語句 Switch語句,關(guān)系表達(dá)式,關(guān)系表達(dá)式用來實(shí)現(xiàn)比較 關(guān)系運(yùn)算符 , =, =, =, , != 優(yōu)先級:高于賦值運(yùn)算符,低于算術(shù)運(yùn)算符。 關(guān)系運(yùn)算符內(nèi)部:=和 !=較低 結(jié)合性:左結(jié)合 關(guān)系表達(dá)式 用關(guān)系運(yùn)算符將二個(gè)表達(dá)式連接起來稱為關(guān)系表達(dá)式 關(guān)系表達(dá)式的結(jié)果是: true 或 false,eg. x y,a b = c d 都是合法的關(guān)系表達(dá)式,注意:-2 -1 0 與PYTHON中的含義不一樣,關(guān)系表達(dá)式 續(xù),算術(shù)運(yùn)算符的優(yōu)先級比關(guān)系運(yùn)算符高 注意事項(xiàng) “等于”運(yùn)算符是由兩個(gè)等號組成。常見的錯誤是在比較相等時(shí)用一個(gè)等號。 要小心
2、避免冗余。主要是在關(guān)系表達(dá)式中需要判別布爾型的變量的值時(shí)。判別一個(gè)布爾變量flag的值是否為true,初學(xué)者常常會用表達(dá)式flag = true。事實(shí)上,只要用一個(gè)最簡單的表達(dá)式:flag就可以了,5 + 3 6 - 2,(5 + 3) (6 2),第3章 邏輯思維及分支程序設(shè)計(jì),關(guān)系表達(dá)式 邏輯表達(dá)式 If語句 Switch語句,邏輯表達(dá)式,邏輯表達(dá)是用于實(shí)現(xiàn)更復(fù)雜的判斷 邏輯運(yùn)算符 else cout “failed”;,條件語句使用注意,條件的結(jié)果值應(yīng)該是 true 或 false,它們是C+中bool類型的值 事實(shí)上,條件可為任意表達(dá)式,不一定是關(guān)系表達(dá)式。0 為false,非 0 為
3、true。 常見的錯誤:條件測試是比較相等時(shí),用一個(gè)等號, 合理的縮排,使程序結(jié)構(gòu)更加清晰,判斷閏年的程序,#include using namespace std; int main() int year; bool result; cout year; result = (year % 4 = 0 ,if語句的嵌套,if語句的then子句或else子句是if語句,稱為if語句的嵌套 歧義性:if 語句可以沒有else子句,如 if (x 100) if (x 90) 語句1 else if (x80) 語句2 else 語句3 else 語句4; 配對原則:每個(gè)else子句是和在它之前最近
4、的一個(gè)沒有else子句的if語句配對。,縮進(jìn)對齊,可以清晰地表示出層次 ,便于程序員閱讀,if (x 100) if (x 90) 語句1 else if (x80) 語句2 else 語句3 else 語句4;,條件表達(dá)式,?:運(yùn)算符 :問號冒號運(yùn)算符 作用:更加簡練的用來表達(dá)條件執(zhí)行的方式 形式 : (條件) ? 表達(dá)式1 : 表達(dá)式2 執(zhí)行過程:首先計(jì)算條件值。如果條件結(jié)果為true,則計(jì)算表達(dá)式1的值,并將它作為整個(gè)表達(dá)式的值。如果條件結(jié)果為false,則整個(gè)表達(dá)式的值為表達(dá)式2的值。,實(shí)例,例如將x和y中值較大的一個(gè)賦值給max,可以用下列語句: max = (x y) ? x :
5、y; ?:運(yùn)算符用于輸出。例如,想輸出一個(gè)布爾變量flag的值,如果直接用 cout flag; 那么當(dāng)flag為“真”時(shí),輸出為1;當(dāng)flag為“假”時(shí),輸出為0。 如果我們想讓flag為“真”時(shí)輸出true,為“假”時(shí)輸出false,可以用if 語句 if (flag) cout “true”; else cout “false”; 看上去太羅嗦。但如果用?:運(yùn)算符只需要一行 cout ( flag ? true : false ) endl;,第3章 邏輯思維及分支程序設(shè)計(jì),關(guān)系表達(dá)式 邏輯表達(dá)式 If語句 Switch語句,switch語句,格式: switch (表達(dá)式) case
6、常量表達(dá)式1:語句1 case 常量表達(dá)式2:語句2 . . case 常量表達(dá)式n:語句n default:語句n+1 ,執(zhí)行過程: 當(dāng)表達(dá)式值為常量表達(dá)式1時(shí),執(zhí)行語句1到語句n+1; 當(dāng)表達(dá)式值為常量表達(dá)式2時(shí),執(zhí)行語句2到語句n+1; 。 。 當(dāng)表達(dá)式值為常量表達(dá)式n時(shí),執(zhí)行語句n到語句n+1; 否則,執(zhí)行語句n+1,用于多分支的情況,switch語句 續(xù),default子句可以省略 default子句省略時(shí),當(dāng)表達(dá)式的值不等于表達(dá)式1到表達(dá)式n的值時(shí),直接跳出switch語句,執(zhí)行switch語句的下一語句,Break語句,作用:跳出當(dāng)前的switch語句,switch (表達(dá)式)
7、case 常量表達(dá)式1:語句1;break; case 常量表達(dá)式2:語句2 ;break; . . case 常量表達(dá)式n:語句n ;break; default:語句n+1 ,執(zhí)行過程: 當(dāng)表達(dá)式值為常量表達(dá)式1時(shí),執(zhí)行語句1; 當(dāng)表達(dá)式值為常量表達(dá)式2時(shí),執(zhí)行語句2; 。 。 當(dāng)表達(dá)式值為常量表達(dá)式n時(shí),執(zhí)行語句n; 否則,執(zhí)行語句n+1,eg1. 按下表將百分制成績轉(zhuǎn)換成5 級記分制。,switch(score) case score = 90: cout = 80: cout = 70: cout = 60: cout D; break; default: cout E; ,表達(dá)式=
8、成績/10,switch(score / 10) case 10: case 9: cout A; break; case 8: cout B; break; case 7: cout C; break; case 6: cout D; break; default: cout E; ,計(jì)算機(jī)自動出四則運(yùn)算計(jì)算題,生成題目 switch(題目類型) case 加法:顯示題目,輸入和的值,判斷正確與否 case 減法:顯示題目,輸入差的值,判斷正確與否 case 乘法:顯示題目,輸入積的值,判斷正確與否 case 除法:顯示題目,輸入商和余數(shù)的值,判斷正確與否 ,要求自動出0 - 9之間的四則運(yùn)
9、算題,并批改結(jié)果,關(guān)鍵問題,如何讓程序每次執(zhí)行的時(shí)候都出不同的題目? 隨機(jī)數(shù)生成器rand():能隨機(jī)生成0到RAND_MAX之間的整型數(shù) 將生成的隨機(jī)數(shù)映射到0 - 9之間: Rand() % 10 rand() * 10 / (RAND_MAX + 1)。 運(yùn)算符的生成:用編碼0 - 3表示四個(gè)運(yùn)算符。因此題目的生成就是生成0 - 3之間的隨機(jī)數(shù)。,隨機(jī)數(shù)的種子,計(jì)算機(jī)產(chǎn)生的隨機(jī)數(shù)稱為偽隨機(jī)數(shù),它是根據(jù)一個(gè)算法計(jì)算出來的。 系統(tǒng)為每個(gè)程序、每次執(zhí)行指定的隨機(jī)數(shù)的種子都是相同的,因此程序每次執(zhí)行生成的隨機(jī)數(shù)序列都是相同的。,改變隨機(jī)數(shù)的種子,設(shè)置種子的函數(shù)srand : srand (種子)
10、 如何讓程序每次執(zhí)行時(shí)選擇的種子都不一樣呢? 選擇系統(tǒng)時(shí)間為種子:time(NULL) 取當(dāng)前的系統(tǒng)時(shí)間。,#include /包含偽隨機(jī)數(shù)生成函數(shù) #include /包含取系統(tǒng)時(shí)間的函數(shù) #include using namespace std; int main() int num1, num2, op, result1, result2; /num1,num2:操作數(shù),op:運(yùn)算符,result1,result2: 結(jié)果 srand(time(NULL); /隨機(jī)數(shù)種子初始化 num1=rand() * 10 / (RAND_MAX + 1); / 生成運(yùn)算數(shù) num2=rand()
11、* 10 / (RAND_MAX + 1); /生成運(yùn)算數(shù) op=rand() * 4 / (RAND_MAX + 1); / 生成運(yùn)算符 0-+, 1- -, 2-*,3- /,自動出題程序,switch (op) /最容易忘的是switch下的大括號! case 0: cout result1; if (num1 + num2 = result1) cout result1; if (num1 - num2 = result1) cout result1; if (num1 * num2 = result1) cout you are rightn; else cout you are wrongn; break;,case 3: cout result1; cout result2; if (num1 / num2 = result1) ,該程序的缺陷,每次執(zhí)行只能出一道題 減法可能出現(xiàn)負(fù)值 除法可能出現(xiàn)除0 結(jié)果太單調(diào),小結(jié),本章主要介紹了計(jì)算機(jī)實(shí)現(xiàn)邏輯思維的機(jī)制。主要包括兩個(gè)方面: 如何表示一個(gè)邏輯判斷 如何根據(jù)邏輯判斷的結(jié)果執(zhí)行不同的處理 邏輯判斷 關(guān)系表達(dá)式實(shí)現(xiàn) 邏輯表達(dá)式 根據(jù)邏輯判斷執(zhí)行不同的處理 if語句 switch語句,