【正文】
,算法的流程圖表示,見圖41,圖42和圖43 例45 畫出求三個(gè)數(shù)中最大數(shù)的流程圖 思路: 先用第一個(gè)數(shù)和第二個(gè)數(shù)比較,把其中較大的數(shù)放入變量MAX中; 再用第三個(gè)數(shù)與MAX比較。如果第三個(gè)數(shù)比MAX大,則把第三個(gè)數(shù)存入MAX,否則,保持MAX的值不變; 輸出MAX的值,第一百六十八頁,共一千三百五十三頁。,DIM AS INTEGER A, B, C INPUT A, B, C IF A B THEN SWAP A, B IF A C THEN SWAP A, C PRINT A SLEEP : END,第一百六十九頁,共一千三百五十三頁。,算法的流程圖表示,流程圖見圖45 課堂練習(xí):畫出例44的流程圖,第一百七十頁,共一千三百五十三頁。,行條件語句的應(yīng)用舉例,例46 編一個(gè)程序,實(shí)現(xiàn)如下功能:輸入兩個(gè)矩形的邊長,比一比它們的面積哪個(gè)大。輸出較大的那個(gè)面積。,第一百七十一頁,共一千三百五十三頁。,思路與主要步驟: S1:輸入矩形的邊長; S2:比較它們的面積: S21:計(jì)算兩個(gè)矩形的面積; S22:比較兩個(gè)面積; S3:輸出處理后的結(jié)果。 流程圖見圖44,第一百七十二頁,共一千三百五十三頁。,程序清單,DIM AS SINGLE C1, K1, C2, K2, MJ1, MJ2, MAX INPUT “輸入第一個(gè)矩形的長和寬:”, C1, K1 INPUT “輸入第二個(gè)矩形的長和寬:”, C2, K2 MJ1 = C1 * K1 MJ2 = C2 * K2 IF MJ1 MJ2 THEN MAX = MJ1 ELSE MAX = MJ2 PRINT MAX SLEEP : END,第一百七十三頁,共一千三百五十三頁。,上機(jī)練習(xí),輸入源程序清單 改編原程序:比較完面積的大小后,直接輸出較大的面積,而不用變量MAX來存儲(chǔ)較大的面積。,第一百七十四頁,共一千三百五十三頁。,例47 輸入三個(gè)數(shù),按從大到小的順序排列并輸出。,第一百七十五頁,共一千三百五十三頁。,分析與思路,假設(shè)三個(gè)數(shù)分別用變量A、B和C表示; 先將A與B比較,并將較大的數(shù)放在A中,將較小的數(shù)放在B中; 再用C與A比較: 如果C比A大,則交換A和C的值,這時(shí),A中存放的是最大數(shù)。 然后,再用C和B進(jìn)行比較,如果C比B大,則交換它們的值; 最后,輸出A、B和C的值,第一百七十六頁,共一千三百五十三頁。,程序清單,DIM AS INTEGER A, B, C, T INPUT “請(qǐng)輸入三個(gè)數(shù):”,A,B,C IF BA THEN T=A : A=B : B=T IF CA THEN T=A : A=C : C=T IF CB THEN T=B : B=C : C=T PRINT A。 B。 C SLEEP : END,第一百七十七頁,共一千三百五十三頁。,練習(xí),畫出該程序的流程圖 上機(jī)輸入該程序,第一百七十八頁,共一千三百五十三頁。,會(huì)思考的程序設(shè)計(jì)(二),第一百七十九頁,共一千三百五十三頁。,本講要點(diǎn),多個(gè)條件的表達(dá) 塊條件語句 條件語句的嵌套 多分支語句(SELECT CASE) GOTO語句,第一百八十頁,共一千三百五十三頁。,例48 輸入你和爸爸的年齡: 算一算你們年齡的差; 爸爸的年齡是你的年齡的三倍嗎? 想一想:這兩個(gè)問題應(yīng)該怎樣來解決?,第一百八十一頁,共一千三百五十三頁。,例48 程序清單,DIM AS INTEGER NLA, NLB, NLC INPUT “請(qǐng)輸入年齡:”, NLA, NLB NLC = NLA – NLB PRINT “年齡差為:”。NLC IF NLB * 3 = NLA THEN PRINT “爸爸的年齡是我的三倍!” ELSE PRINT “NO!” SLEEP : END,第一百八十二頁,共一千三百五十三頁。,例48:畫出流程圖,并上機(jī)輸入該程序 寫出四個(gè)數(shù)排序的程序,并畫出相應(yīng)的流程圖,第一百八十三頁,共一千三百五十三頁。,多個(gè)條件怎么辦,例49 編程判斷輸入的數(shù)是不是一個(gè)比100大的整數(shù)。 分析:對(duì)輸入的數(shù)進(jìn)行判斷時(shí),要表達(dá)出兩個(gè)條件: 一個(gè)是大于100,這可以表示為A100; 另一個(gè)是要求是整數(shù),這可以表示為 A = INT(A),第一百八十四頁,共一千三百五十三頁。,多個(gè)條件怎么辦,要把兩個(gè)都要滿足的條件相聯(lián),要用到邏輯運(yùn)算符AND 例49中的條件可以表示為: A 100 AND INT(A) = A,第一百八十五頁,共一千三百五十三頁。,例49 程序清單,DIM AS INTEGER A INPUT “請(qǐng)輸入一個(gè)數(shù):”, A IF A 100 AND A=INT(A) THEN PRINT “YES” ELSE PRINT “NO” SLEEP : END,第一百八十六頁,共一千三百五十三頁。,邏輯運(yùn)算符,共有三個(gè):NOT(非), AND(與), OR(或) 含義見教材P51表41 各種運(yùn)算符的優(yōu)先級(jí)(優(yōu)先級(jí)由高到低):算術(shù)運(yùn)算→ 關(guān)系運(yùn)算→邏輯運(yùn)算 例:1+2 1+1 AND 435,第一百八十七頁,共一千三百五十三頁。,第一百八十八頁,共一千三百五十三頁。,第一百八十九頁,共一千三百五十三頁。,第一百九十頁,共一千三百五十三頁。,練一練:,A=8,B=2,C=9,判斷如下表達(dá)式的真假: A+CB AC/B OR C=10 AA OR BB NOT A=B*4,第一百九十一頁,共一千三百五十三頁。,例410 寫出能夠?qū)崿F(xiàn)找出成績不小于80分,并且小于90分的同學(xué)的語句。,第一百九十二頁,共一千三百五十三頁。,分析:用變量CJ表示成績,CJ不小于80分,可以表示為CJ=80。成績小于90分,可以表示為CJ=80 AND CJ90 THEN PRINT “YES!” ELSE PRINT “NO!” 注意:上面的條件表達(dá)式不能寫成 80=CJ90,第一百九十三頁,共一千三百五十三頁。,塊條件語句(IF/END IF) 的使用,在行條件語句中,如果條件表達(dá)式比較長,或者THEN、ELSE后的操作比較多,那么行IF語句就會(huì)比較長,但QB又規(guī)定行IF語句必須在一行內(nèi)寫完,這就造成了程序的可讀性下降 要解決這個(gè)問題,可以利用塊條件語句,第一百九十四頁,共一千三百五十三頁。,塊條件語句(IF/END IF) 的格式,格式:IF THEN [ELSE ] END IF,第一百九十五頁,共一千三百五十三頁。,關(guān)于塊條件語句的幾點(diǎn)說明,IF和THEN必須寫在同一行上,THEN是這一行的結(jié)尾; 整個(gè)塊IF語句必須以END IF結(jié)束。,第一百九十六頁,共一千三百五十三頁。,例411 有三個(gè)數(shù)據(jù),現(xiàn)要求判斷出它們是否都是偶數(shù)。如果是,就輸出它們的和及平均數(shù),否則(即不都是偶數(shù)),輸出“ERROR!”。,第一百九十七頁,共一千三百五十三頁。,例411 程序清單,DIM AS INTEGER A, B, C READ A,B,C IF A MOD 2=0 AND B MOD 2=0 AND C MOD 2=0 THEN PRINT A+B+C, (A+B+C)/3 ELSE PRINT “ERROR!” END IF DATA 2,6,8 SLEEP : END,第一百九十八頁,共一千三百五十三頁。,上機(jī)練習(xí): 輸入例411的源程序; 將判斷一個(gè)數(shù)是否為偶數(shù)的條件改為A/2=INT(A/2),再試一試 還有沒有別的判斷一個(gè)數(shù)是否為偶數(shù)的方法了?,第一百九十九頁,共一千三百五十三頁。,例412 從鍵盤輸入一個(gè)三位數(shù),輸出用這個(gè)三位數(shù)的各位數(shù)字排列出來的最大三位數(shù)。例如,輸入263,則輸出632。分別寫出采用行IF語句和塊IF語句的程序。,第二百頁,共一千三百五十三頁。,分析: 本題的難點(diǎn)在于如何求出符合條件的三位數(shù) 本題的要求也可以轉(zhuǎn)化為將輸入數(shù)的三位數(shù)字按從大到小的順序排序 進(jìn)而帶來的問題就是,如何將輸入數(shù)的三位數(shù)字取出來這可以利用INT()函數(shù)來完成。例如,要取出352的百位,可以用INT(352/100),第二百零一頁,共一千三百五十三頁。,用s、a、b、c來表示原數(shù)及其三個(gè)數(shù)字,則三位數(shù)字可以用以下的賦值語句求出: A = INT(S/100) B = INT((S – A * 100) / 10) C = S – A * 100 – B * 10,第二百零二頁,共一千三百五十三頁。,例412程序清單(用行條件語句編寫),DIM AS INTEGER S, A, B, C INPUT “輸入一個(gè)三位數(shù):”,S A = INT(S/100) s\100 B = INT((SA*100)/10) C = S – A*100 – B*10 s mod 10 IF AB THEN T=A:A=B:B=T IF AC THEN T=A:A=C:C=T IF BC THEN T=B:B=C:C=T PRINT A。 B。 C SLEEP : END,第二百零三頁,共一千三百五十三頁。,例412程序清單(用塊條件語句編寫),DIM AS INTEGER S, A, B, C, T INPUT “輸入一個(gè)三位數(shù):”,S A = INT(S/100) B = INT((SA*100)/10) C = S – A*100 – B*10 IF AB THEN T=A A=B B=T END IF,第二百零四頁,共一千三百五十三頁。,IF A C THEN T=A A=C C=T END IF IF B C THEN T=B B=C C=T END IF PRINT A。 B。 C SLEEP : END,第二百零五頁,共一千三百五十三頁。,想一想:還有沒有其他方法能取出數(shù)值常量的各位數(shù)字嗎?,第二百零六頁,共一千三百五十三頁。,條件語句的嵌套,在IF語句的語句組里可以再次出現(xiàn)IF語句,稱為條件語句的嵌套 例如: IF XY THEN IF XZ THEN PRINT “MAX=”。X IF NM THEN IF N90 THEN P=P+1 ELSE Q=Q+1 IF A=B*2 THEN IF A=B/2 THEN PRINT “A,B都是零” ELSE B=B+1 END IF,第二百零七頁,共一千三百五十三頁。,上機(jī)練習(xí),如果超過80的數(shù)是大數(shù),20以下的是小數(shù)的話,編一個(gè)程序輸入一個(gè)數(shù),經(jīng)判斷后輸出數(shù)的類型(是大數(shù)還是小數(shù)),第二百零八頁,共一千三百五十三頁。,DIM AS INTEGER X INPUT X IF X =80 THEN PRINT “DA SHU” ELSE IF X 20 THEN PRINT “XIAO SHU” ELSE PRINT “ZHONG SHU” END IF END IF SLEEP : END,第二百零九頁,共一千三百五十三頁。,例413 比較兩數(shù)大小的程序,DIM AS INTEGER A, B INPUT “輸入兩個(gè)數(shù):”,A, B IF A=B THEN IF AB THEN PRINT “B大” ELSE PRINT “一樣大” END IF ELSE PRINT “A大” END IF SLEEP : END,第二百一十頁,共一千三百五十三頁。,說明,THEN子句和ELSE子句部分都可以嵌套一個(gè)新的IF語句 內(nèi)外層IF語句不能交叉;要注意ELSE子句和IF的配對(duì)關(guān)系。,第二百一十一頁,共一千三百五十三頁。,以下一段程序要實(shí)現(xiàn)這樣的功能:輸入0時(shí)即輸出0;輸入正數(shù)時(shí)即輸出1;輸入負(fù)數(shù)時(shí)即輸出1: DIM AS INTEGER M, N INPUT M N = 0 IF M=0 THEN IF M0 THEN N=1 ELSE N=1 PRINT M, N SLEEP : END,第二百一十二頁,共一千三百五十三頁。,FB規(guī)定:ELSE要與其最近的IF配對(duì),因而,上一段程序是不對(duì)的。應(yīng)該如何改? 上機(jī)練習(xí),第二百一十三頁,共一千三百五十三頁。,例414 用IF語句的嵌套來完成三個(gè)數(shù)排序的程序,DIM AS INTEGER A, B, C INPUT “輸入三個(gè)數(shù):”,A,B,C IF AC THEN PRINT A。 IF BC THEN PRINT B。 C ELSE PRINT C。 B ELSE PRINT C。 A。 B END IF SLEEP : END,第二百一十四頁,共一千三百五十三頁。,多分支語句(SELECT CASE),IF語句可以實(shí)現(xiàn)兩路分支選擇結(jié)構(gòu),即根據(jù)條件表達(dá)式的值(真或假),從兩種情況(兩個(gè)分支)中選擇一個(gè)執(zhí)行 如果要選擇的情況多于兩種時(shí),可以利用嵌套的IF語句來實(shí)現(xiàn),但往往比較麻煩 對(duì)于這種多種情況/分支的選擇,可以使用QB中的多分支語句,即SELECT CASE語句,第二百一十五頁,共一千三百五十三頁。,多分支語句(SELECT CASE),格式: SELECT CASE CASE [, ,…] CASE [, ,…] …… [CASE ELSE ] END SELECT,第二百一十六頁,共一千三百五十三頁。,幾點(diǎn)說明,“測(cè)試表達(dá)式”可以是單個(gè)變量,也可以是一個(gè)算術(shù)表達(dá)式 CASE語句中的“條件”有三種形式: 常量、變量或表達(dá)式,如1,2,3,A,A+B(表達(dá)式必須有確定的值) TO ,如3 TO 10,A TO B等 IS ,如IS=3*C等,第二百一十七頁,共一千三百五十三頁。,例415 把百分制的成績轉(zhuǎn)化成5分制的成績,DIM AS INTEGER C INPUT “請(qǐng)輸入成績:”, C SELECT CASE C CASE IS=90 PRINT “5” CASE IS=80 PRINT “4” CASE IS=70 PRINT “3” CASE IS=60 PRINT “2” CASE ELSE PRINT “1” END SELECT SLEEP : END,第二百一十八頁,共一千三百五十三頁。,IF語句與SELECT CASE語句的比較,如果分支較少(只有一兩個(gè)條件),那么使用IF語句較好 如果分支較多(要判斷的條件有多個(gè)),則使用SELECT CASE語句可以使程序更加清晰,第二百一十九頁,共一千三百五十三頁。,例416 秋天蘋果熟了,果農(nóng)們要把蘋果分等級(jí)包裝,400克以上(包括400克)的為A級(jí)品,200克至400克(包括200克)的為B級(jí)品