姚佳俊 曹恒來
● 學(xué)習(xí)者分析
本課的教學(xué)對象是高二年級的學(xué)生,他們思維活躍,具有一定的邏輯思維和推理演繹的能力,但歸納總結(jié)能力較弱。在前面的課程中,學(xué)生已經(jīng)掌握了VB的常量、變量、表達式、Let語句、Print方法等基本知識,了解了程序設(shè)計的一般過程,急切地想編寫程序解決生活中更為復(fù)雜的實際問題,但他們現(xiàn)有的知識結(jié)構(gòu)僅限于解決順序結(jié)構(gòu)的問題,而且將實際問題轉(zhuǎn)化為VB程序的能力也有待提高。
● 學(xué)習(xí)內(nèi)容分析
本課是教育科學(xué)出版社出版的《算法與程序設(shè)計》(選修)第二章“程序的基本結(jié)構(gòu)”中第三節(jié)第二部分的內(nèi)容。任何規(guī)范的程序都可以分解為三種基本結(jié)構(gòu),即順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu),教材的前一節(jié)介紹了順序結(jié)構(gòu)程序設(shè)計。選擇結(jié)構(gòu)是用于判斷給定的條件,并根據(jù)判斷的結(jié)果控制程序的執(zhí)行流程,它分為單分支、雙分支及多分支選擇結(jié)構(gòu),而不同的分支結(jié)構(gòu)有不同的語法格式和適用場合。牢固掌握選擇結(jié)構(gòu)程序設(shè)計,是學(xué)習(xí)程序設(shè)計的基本要求,是學(xué)會編寫結(jié)構(gòu)清晰、易讀易懂的程序的前提。
● 教學(xué)目標(biāo)
知識與技能目標(biāo):掌握選擇結(jié)構(gòu)的基本格式,理解選擇結(jié)構(gòu)的執(zhí)行過程。
過程與方法目標(biāo):能根據(jù)問題建立合適、正確的條件,利用選擇結(jié)構(gòu)解決實際問題。
情感態(tài)度與價值觀目標(biāo):領(lǐng)悟選擇結(jié)構(gòu)的思想,體驗選擇在生活中的應(yīng)用。
● 教學(xué)重點、難點
重點:選擇結(jié)構(gòu)的基本格式,利用選擇結(jié)構(gòu)解決實際問題。
難點:選擇結(jié)構(gòu)的嵌套。
● 教學(xué)策略
本課教學(xué)采用了案例模擬教學(xué)法。筆者通過呈現(xiàn)問題、觀察代碼、模仿嘗試、歸納小結(jié)、問題解決、拓展應(yīng)用、總結(jié)提升等課堂教學(xué)環(huán)節(jié),設(shè)計了遞進式的學(xué)習(xí)活動。學(xué)生通過“比較兩個數(shù)的大小”“出租車計費器”“月餅促銷”“計算三角形面積”“BMI等級的判斷”等程序的完善,在解決一個個問題的同時,層層深入地認識選擇結(jié)構(gòu)。學(xué)生在模仿中,通過對多個“個”的嘗試,找出“個”背后“類”的規(guī)律性問題,歸納出選擇結(jié)構(gòu)的一般格式,實現(xiàn)從“個”到“類”的提升。這樣的設(shè)計有助于學(xué)生從整體上認識選擇結(jié)構(gòu),并不斷地向縱深發(fā)展。同時,真實的問題情境能有效地激發(fā)學(xué)生的學(xué)習(xí)興趣,讓他們積極思考、主動建構(gòu),獲得程序設(shè)計的成就感。
● 教學(xué)過程
1.代碼呈現(xiàn)
運行上節(jié)課編寫的“計算兩個數(shù)的商”程序,代碼如下:
Private Sub cmddiv_Click()
Dim x As Single ' 被除數(shù)
Dim y As Single ' 除數(shù)
Dim q As Single ' 商
x = Val(InputBox("請輸入被除數(shù):"))
y = Val(InputBox("請輸入除數(shù):"))
q = x / y
Print q
End Sub
學(xué)生運行上述程序,分析程序的漏洞:當(dāng)除數(shù)為0時,程序提示出錯,說明這樣的程序是不完善的。實際上,在除數(shù)不為零的情況下,學(xué)生才能計算它們的商,否則應(yīng)提示“除數(shù)為零”。
用VB程序來描述如下:
If y <> 0 Then
q = x / y
Print q
Else
Print "除數(shù)為零"
End If
教師小結(jié):根據(jù)條件判斷的結(jié)果,選擇執(zhí)行不同語句的結(jié)構(gòu),稱為選擇結(jié)構(gòu)。
設(shè)計意圖:教師從上一節(jié)課的順序結(jié)構(gòu)程序引入,讓學(xué)生通過觀察、分析,發(fā)現(xiàn)其中的If語句結(jié)構(gòu)起著引導(dǎo)程序走向的作用。這樣的設(shè)計使學(xué)生的學(xué)習(xí)不是被動接受,而是一個以已有知識經(jīng)驗為基礎(chǔ)的主動建構(gòu)過程。
2.模仿嘗試
活動1:模仿上例完善程序,嘗試解決下面兩個問題。
①輸入兩個數(shù)x和y,比較它們的大小,使x大于y。
Private Sub cmdxy_Click()
Dim x As Single,y As Single,t As Single
x = Val(InputBox("輸入x的值:"))
y = Val(InputBox("輸入y的值:"))
If _________ Then
t = x
x = y
y = t
End If
Print "x的值為:"; x
Print "y的值為:"; y
End Sub
②出租車計費程序,三公里以內(nèi)(含)起步價9元,超出三公里的部分每公里2.4元。
Private Sub cmdtaxi_Click()
Dim s As Single,y As Single
s = Val(InputBox("輸入里程數(shù):"))
If s <= 3 Then
y = 9
Else
___________
End If
Print y
End Sub
設(shè)計意圖:學(xué)生通過模仿完善兩個半成品程序,進一步深化對選擇結(jié)構(gòu)的認識。教師有目的地將部分核心代碼留空,讓學(xué)生將有限的注意力集中到核心問題的解決上,做到有的放矢;另外,關(guān)鍵代碼的填寫可以為學(xué)生理解程序提供支架,降低活動難度。
3.歸納提升
選擇結(jié)構(gòu)根據(jù)條件判斷的結(jié)果控制程序的走向,不同的問題可能有不同的條件判斷,但If語句的基本格式是固定的。
單分支選擇結(jié)構(gòu)(如圖1),代碼如下:
If 條件 Then
語句塊
End If
雙分支選擇結(jié)構(gòu)(如圖2),代碼如下:
If 條件 Then
語句塊1
Else
語句塊2
End If
教師小結(jié):單分支的選擇結(jié)構(gòu),當(dāng)條件為真時才執(zhí)行指定語句,否則跳過;雙分支的選擇結(jié)構(gòu)根據(jù)條件是否成立,程序選擇執(zhí)行相對應(yīng)的語句,然后執(zhí)行End If后面的語句。
設(shè)計意圖:教師通過適時地歸納總結(jié),讓學(xué)生在對選擇結(jié)構(gòu)有了感性認識的基礎(chǔ)上,系統(tǒng)地認識單分支和雙分支選擇結(jié)構(gòu)的一般格式,并借助流程圖分析選擇結(jié)構(gòu)的執(zhí)行過程,幫助學(xué)生建構(gòu)清晰而完整的知識框架,這將為他們后面的學(xué)習(xí)打下扎實的基礎(chǔ)。
4.問題解決
活動2:利用單分支和雙分支選擇結(jié)構(gòu),完善程序,解決問題。
①中秋節(jié)前夕,商店月餅促銷,購滿3盒(含)即可享受八折優(yōu)惠。請根據(jù)輸入的購買盒數(shù),計算出應(yīng)付金額。
Private Sub cmdmk_Click()
Dim qty As Integer ' 購買 盒數(shù)
Dim price As Single ' 應(yīng)付 金額
Dim sum As Single
price = 80
qty = Val(InputBox("購買盒數(shù):"))
' 如果購買盒數(shù)低于3盒,不打折
' 購滿3盒(含)享受八折優(yōu)惠
_______________
Print "應(yīng)付金額:"; sum; "元"
End Sub
②已知三角形的三條邊a、b、c,求三角形的面積(判斷三條邊是否構(gòu)成三角形的條件為:任意兩邊之和大于第三條邊)。
Private Sub cmdsquare_Click()
Dim a As Single,b As Single,c As Single
Dim p As Single,s As Single
a = Val(InputBox("input a:"))
b = Val(InputBox("input b:"))
c = Val(InputBox("input c:"))
p = (a + b + c) / 2
' 如果輸入的三邊值(a,b,c)能夠構(gòu)成三角形則計算其面積
' 否則提示用戶"不能構(gòu)成三角形"
_______________
End Sub
教師小結(jié):條件一般為關(guān)系表達式,如活動1中的兩個程序,以及活動2中的程序①;也可為邏輯表達式,如活動2中的程序②。
設(shè)計意圖:活動2能使學(xué)生對雙分支If語句有了較為清晰的理解之后實現(xiàn)完整的應(yīng)用,學(xué)生要考慮的不再只是選擇結(jié)構(gòu)中各個分支的內(nèi)容,而是站在一個更高的層面考慮整個選擇結(jié)構(gòu)的設(shè)計,在思維深度上與前面的活動呈遞進關(guān)系。同時,此活動的兩個問題分別通過關(guān)系表達式和邏輯表達式實現(xiàn)條件判斷,幫助學(xué)生進一步拓展對條件表達式的認知。
5.拓展應(yīng)用
活動3:身體質(zhì)量指數(shù)(BMI)是目前國際上常用的衡量人體胖瘦程度的標(biāo)準(zhǔn),WHO組織設(shè)定中國人的參考標(biāo)準(zhǔn)為:BMI<18.5表示偏瘦;BMI介于18.5~23.9表示正常;BMI>=23.9表示偏重。學(xué)生借助數(shù)軸(如圖3)分析問題,形成算法:①先判斷x<18.5是否成立,成立則輸出“偏瘦”;②否則判斷x<23.9是否成立,成立則輸出“正?!保駝t輸出“偏重”。
Private Sub cmdbmi_Click()
Dim w As Single,h As Single,bmi As Single
w = Val(InputBox("輸入體重(公斤):"))
h = Val(InputBox("輸入身高(米):"))
bmi = w / h / h
If bmi < 18.5 Then
Print "偏瘦"
Else
_______________
End If
End Sub
教師小結(jié):在第一次判斷的基礎(chǔ)上,進行再次判斷。這種在一個If語句的內(nèi)部又出現(xiàn)了另一個If語句,稱為If語句的嵌套。實際上,VB對程序有多個分支的問題,有一種專門的If語句形式簡化嵌套的問題。
多分支選擇結(jié)構(gòu):
If 條件1 then
語句塊1
ElseIf 條件2 then
語句塊2
Else
語句塊3
End If
多分支的If語句實現(xiàn)BMI值判斷,代碼如下:
Private Sub cmdbmi_Click()
Dim w As Single,h As Single,bmi As Single
w = Val(InputBox("輸入體重(公斤)"))
h = Val(InputBox("輸入身高(米)"))
bmi = w / h / h
If bmi < 18.5 Then
Print "偏瘦"
ElseIf bmi < 23.9 Then
Print "正常"
Else
Print "偏重"
End If
End Sub
教師小結(jié):多分支選擇結(jié)構(gòu)首先測試條件1,如果它為假,就測試條件2,依此類推,直到找到一個為真的條件,并執(zhí)行相應(yīng)的語句塊;如果條件都不為真,執(zhí)行Else后的語句,然后再執(zhí)行End If后面的代碼。
設(shè)計意圖:學(xué)生通過“數(shù)軸分析法”分析出第二次判斷“BMI<23.9”是以第一次判斷“BMI<18.5”為前提,是在第一次條件判斷為“假”的基礎(chǔ)上再次進行判斷。教師在完善程序的過程中,幫助學(xué)生理解嵌套的緣由,理清嵌套的脈絡(luò),并在此基礎(chǔ)上提出多分支If語句,分析其執(zhí)行過程。這樣的設(shè)計既重過程又重結(jié)論,讓學(xué)生在問題解決的過程中,輕松愉快地完成知識的建構(gòu)。
6.思維導(dǎo)圖,復(fù)習(xí)鞏固
筆者用思維導(dǎo)圖對知識點進行鞏固(如圖4)。
點 評
傳統(tǒng)的編程學(xué)習(xí)總是與編寫代碼、設(shè)計算法和生成可運行的程序緊密聯(lián)系在一起,教師常會選擇一些“經(jīng)典”的數(shù)學(xué)題作為例題,如雞兔同籠、百錢百雞、找素數(shù)、求水仙花數(shù)等,內(nèi)容缺少趣味性和綜合性。本節(jié)課設(shè)計的例題和練習(xí)與學(xué)生的學(xué)習(xí)和生活息息相關(guān),把解決“真實”問題作為編程學(xué)習(xí)的首要任務(wù),這樣既能使學(xué)生有一個愉快的學(xué)習(xí)過程,又能激發(fā)他們加倍投入到編程學(xué)習(xí)中。
程序設(shè)計的學(xué)習(xí)主要圍繞環(huán)境、語言和應(yīng)用三個方面的知識和內(nèi)容展開,語言視圖學(xué)習(xí)的核心主要是語言規(guī)則本身。從教學(xué)方式來看,以往的程序設(shè)計語言規(guī)則的學(xué)習(xí)常采用三步走的形式,即提出問題,給出解答,再加點解釋。特別是“解釋”,往往過多地糾纏于程序設(shè)計語言的語法知識的細枝末節(jié)之中,學(xué)生很少能體驗到成功解決問題的喜悅。本節(jié)課姚老師運用了案例教學(xué)法,先為學(xué)生提供了一個需要解決的生活中的具體任務(wù)——計算兩個數(shù)的商,讓學(xué)生在分析解決這個問題的程序、嘗試補充程序模板中關(guān)鍵代碼的過程中,逐步認識If選擇結(jié)構(gòu),并引導(dǎo)他們提取出If語句的基本格式,再應(yīng)用到類似問題的解決中,最終得到功能強大的If語句指令集。
同時,程序設(shè)計是一種高強度的腦力勞動,學(xué)生不是聽會的,也不是看會的,而是自己練會的。在這節(jié)課中,學(xué)生通過模仿嘗試、獨立解決等方式,完成了6個以上的程序,在有限的課堂教學(xué)時間內(nèi),較好地達到了“量”的要求。
(點評人:江蘇省鹽城市教育科學(xué)研究院 曹恒來)