● 教學(xué)內(nèi)容分析
本節(jié)內(nèi)容是學(xué)校校本課程《算法與程序設(shè)計(jì)》模塊中的一節(jié)內(nèi)容。要求學(xué)生在掌握順序結(jié)構(gòu)程序設(shè)計(jì)的基礎(chǔ)上進(jìn)行分支結(jié)構(gòu)的程序設(shè)計(jì)。學(xué)生通過三種基本表達(dá)式的學(xué)習(xí)與條件語句的實(shí)際運(yùn)用,能較靈活地實(shí)現(xiàn)分支結(jié)構(gòu)的程序設(shè)計(jì)。
● 學(xué)情分析
本課程的教學(xué)對(duì)象為高中一年級(jí)學(xué)生,這些學(xué)生在了解學(xué)校所開設(shè)的各選修模塊內(nèi)容的基礎(chǔ)上自愿選擇該課程學(xué)習(xí),對(duì)程序設(shè)計(jì)有較強(qiáng)的興趣。同時(shí),學(xué)生正在學(xué)習(xí)數(shù)學(xué)必修(三)中的《算法初步》,對(duì)于算法與程序設(shè)計(jì)有初步的了解,認(rèn)知能力相對(duì)較強(qiáng)。通過前幾周的學(xué)習(xí),學(xué)生已掌握順序結(jié)構(gòu)的程序設(shè)計(jì),為本課學(xué)習(xí)打下扎實(shí)的基礎(chǔ)。
● 教學(xué)目標(biāo)
知識(shí)與能力目標(biāo):掌握程序設(shè)計(jì)中“算術(shù)表達(dá)式”、“關(guān)系表達(dá)式”和“邏輯表達(dá)式”的含義及使用;掌握VB程序設(shè)計(jì)中條件語句的使用,能進(jìn)行簡單的程序設(shè)計(jì)。
過程與方法目標(biāo):通過分析問題、繪制分支結(jié)構(gòu)的流程圖加深對(duì)算法的理解;通過VB程序設(shè)計(jì)實(shí)踐,深入理解分支結(jié)構(gòu)語句的使用。
情感、態(tài)度與價(jià)值觀目標(biāo):培養(yǎng)對(duì)程序設(shè)計(jì)的興趣。
● 教學(xué)重、難點(diǎn)
重點(diǎn):程序設(shè)計(jì)中表達(dá)式的三種形式及其IF語句的兩種格式。
難點(diǎn):IF語句的程序?qū)崿F(xiàn)。
● 課時(shí)安排
2課時(shí)(90分鐘)。
● 教學(xué)過程
一、游戲引入:“腕力擂臺(tái)賽”(5分鐘)
由他薦或自薦的形式推選3名全班公認(rèn)力氣最大的學(xué)生進(jìn)行“腕力擂臺(tái)賽”。通過兩輪角逐最終產(chǎn)生班級(jí)的“腕力大力士”。
二、用程序解釋“擂臺(tái)賽”(25分鐘)
師:剛才我們選出3名同學(xué)參加腕力擂臺(tái)賽,經(jīng)過兩輪比賽最終產(chǎn)生了“腕力大力士”。這種比較方式我們在數(shù)學(xué)中也經(jīng)常用到。下面請(qǐng)同學(xué)們看這樣一個(gè)問題。
提出問題:輸入3個(gè)數(shù),求它們的最大數(shù)。
分析問題:教師在剛才游戲的基礎(chǔ)上與學(xué)生一起分析解決該問題的算法,并最終獲得該問題的自然語言描述與流程圖描述(見表1)。
師:通過流程圖,我們可以很方便地進(jìn)行程序設(shè)計(jì)了,但今天的流程圖中出現(xiàn)了前面程序設(shè)計(jì)中沒有碰到過的菱形框(條件判斷框)。在代碼編寫時(shí),該怎么辦呢?這就需要我們補(bǔ)充有關(guān)程序語言設(shè)計(jì)方面的知識(shí)。
教師以幻燈片的形式解釋三種表達(dá)式的作用、使用和兩種簡單分支結(jié)構(gòu)語句的使用,并簡單舉例說明。
1.基礎(chǔ)知識(shí)學(xué)習(xí)
?。?)表達(dá)式。算法表達(dá)式:由+、-、*、/等算術(shù)運(yùn)算符和數(shù)值型常量、變量、括號(hào)等組成。關(guān)系表達(dá)式:也叫比較運(yùn)算符,用來對(duì)兩個(gè)表達(dá)式的值進(jìn)行比較,比較的結(jié)果是一個(gè)邏輯值(布爾值),VisualBasic提供了6個(gè)常用的關(guān)系運(yùn)算符(>、<、>=、<=、<>、=)。邏輯表達(dá)式:也稱布爾運(yùn)算。用邏輯運(yùn)算符連接兩個(gè)或多個(gè)關(guān)系式,組成一個(gè)布爾表達(dá)式。VisualBasic的常用邏輯運(yùn)算符有3種:and、or、not。
?。?)單分支結(jié)構(gòu)語句(見表2)。
?。?)雙分支結(jié)構(gòu)語句(見表3)。
2.程序?qū)崿F(xiàn)
教師提供部分程序代碼,學(xué)生完成“條件語句”的編寫,實(shí)現(xiàn)輸入3個(gè)數(shù),求最大數(shù),見圖1。
三、實(shí)踐進(jìn)階——體型計(jì)算器(30分鐘)
師:“條件判斷”無論是日常生活還是解決數(shù)學(xué)問題經(jīng)常會(huì)碰到,下面我們來看這樣一個(gè)問題。
教師提出問題:通過計(jì)算體重與身高比系數(shù),可以判斷出一個(gè)人的體型。接下來我們來實(shí)現(xiàn)這樣一個(gè)簡單程序,通過鍵盤輸入某人的體重與身高,判斷他的體型。求體重與身高比系數(shù)的公式為:t=體重/(身高×身高),其中體重的單位為千克,身高的單位為米。判斷當(dāng)t≤18時(shí)為較瘦體型;當(dāng)t≥30時(shí)為較胖體型;其他情況為正常體型。
分析問題:師生共同分析確定程序的輸入、輸出數(shù)據(jù)和問題解決的方法。體重(x)與身高(y)是程序的輸入數(shù)據(jù),通過公式計(jì)算體重與身高比系數(shù)t,接著根據(jù)系數(shù)t判斷體型并輸出。為了使程序更具直觀性和趣味性,輸出結(jié)果可設(shè)為文字輸出與圖像輸出兩種。程序的核心是根據(jù)系數(shù)t判斷體型,可以運(yùn)用剛學(xué)習(xí)的分支結(jié)構(gòu)程序設(shè)計(jì)實(shí)現(xiàn)。
1.設(shè)計(jì)算法
根據(jù)前面的分析,由教師主筆、學(xué)生分析討論共同繪制出流程圖??紤]到學(xué)生第一次接觸分支結(jié)構(gòu)程序設(shè)計(jì),所以算法設(shè)計(jì)以順序結(jié)構(gòu)為主線用簡單的分支結(jié)構(gòu)實(shí)現(xiàn)(見下頁表4)。當(dāng)然,對(duì)于算法能力較強(qiáng)的學(xué)生,教師鼓勵(lì)他們自行完成流程圖的設(shè)計(jì)并直接進(jìn)行程序設(shè)計(jì),只要算法正確允許出現(xiàn)不同的流程圖描述和程序設(shè)計(jì)。
?。?編寫代碼
學(xué)生進(jìn)行程序設(shè)計(jì)。為了增加程序的可讀性、趣味性,教師準(zhǔn)備了三種體型的動(dòng)漫人物圖片,鼓勵(lì)學(xué)生在程序設(shè)計(jì)中通過增加圖像控件將其輸出實(shí)現(xiàn)。接著,學(xué)生按VB程序設(shè)計(jì)的一般步驟“新建工程→窗體設(shè)計(jì)→添加控件→對(duì)象屬性設(shè)置→編寫程序代碼→調(diào)試運(yùn)行”完成該問題的求解。
教師選擇兩個(gè)比較有特色的程序作品進(jìn)行全班演示,對(duì)程序進(jìn)行評(píng)價(jià)。
四、實(shí)踐升華——IF語句的嵌套(25分鐘)
師:“體型計(jì)算器”的程序?qū)崿F(xiàn),其實(shí)是數(shù)學(xué)中的分段函數(shù)問題。第1次判斷“系數(shù)≤18”時(shí),條件滿足即可知體型為“偏瘦”,如果條件不滿足也就意味著隱含了另一種情況“系數(shù)>18”;在“系數(shù)>18”的情況下進(jìn)行第2次判斷“系數(shù)≥30”,條件滿足即可知體型為“偏胖”,條件不滿足也就知道系數(shù)在18至30之間,那么體型“正?!薄_@樣的話,可以減少實(shí)際的比較次數(shù)。這種情況在程序設(shè)計(jì)中稱為“分支結(jié)構(gòu)的嵌套”。
教師展示分支結(jié)構(gòu)的嵌套語法格式和該程序IF語句的嵌套流程圖算法描述,鼓勵(lì)學(xué)有余力的學(xué)生帶領(lǐng)其他同學(xué)一起完成(程序?qū)崿F(xiàn)效果見圖2)。
五、課堂小結(jié)(5分鐘,略)
● 教學(xué)反思
《算法與程序設(shè)計(jì)》學(xué)到這兒,學(xué)生的接受能力、學(xué)習(xí)效率都產(chǎn)生了分歧,所以,在教學(xué)內(nèi)容與教學(xué)設(shè)計(jì)上也采用了“分支結(jié)構(gòu)”。
學(xué)習(xí)過程的“分支結(jié)構(gòu)”。由于學(xué)生邏輯思維能力的不同,完成程序設(shè)計(jì)的步驟也會(huì)不同。在進(jìn)行“體型計(jì)算器”程序的編寫時(shí),鼓勵(lì)有基礎(chǔ)的學(xué)生自主完成流程圖的繪制并按照所設(shè)計(jì)的流程圖進(jìn)行程序設(shè)計(jì)。
學(xué)習(xí)內(nèi)容的“分支結(jié)構(gòu)”。學(xué)生之間算法思維能力和編程能力的差異,使“好”學(xué)生出現(xiàn)了“吃不飽”的現(xiàn)象。所以,在“體型計(jì)算器”的程序設(shè)計(jì)中,以“實(shí)踐升華”的形式補(bǔ)充“分支結(jié)構(gòu)的嵌套”,要求學(xué)生對(duì)程序進(jìn)行修改實(shí)現(xiàn)。使不同能力的學(xué)生均能在課堂中掌握基本的分支結(jié)構(gòu)程序設(shè)計(jì)。
點(diǎn)評(píng)
看這一節(jié)課前,我們先要明確,這是“校本課程中的一節(jié)課”。即,它并非屬于高中必修課程。明確的目的是,要知道對(duì)高一學(xué)生在必修課中此部分的技術(shù)要求不必這么深,那是在選修課中的要求。但是,從這一節(jié)課我們可以得到至少兩方面的啟發(fā)。
第一,與技術(shù)相對(duì)應(yīng)的思想方法。分支程序的重點(diǎn)是條件的構(gòu)成,條件正是用于“判斷”。把找最大值放在“比力氣”的事件中就很容易明白了最基本的判斷方法;把多條件判斷放在“判斷體型”中就很有層次地體現(xiàn)出多重條件的解構(gòu)。不過,在“比力氣”之后,適當(dāng)啟發(fā)學(xué)生根據(jù)自己的判斷方式轉(zhuǎn)換到計(jì)算機(jī)判斷實(shí)現(xiàn)的不同,了解機(jī)器判斷的特點(diǎn)也是必要的。因?yàn)?,生活中少量的?shù)據(jù)是人判斷時(shí)一看就知道的。怎樣是“多看”才知道的呢?如果這3個(gè)成績記錄在紙上,放在盒里,一個(gè)一個(gè)拿出來比較呢?計(jì)算機(jī)就是這樣“笨”式的聰明。
第二,教學(xué)過程的層次性遞進(jìn)。程序教學(xué)是比較困難的,從本案例,我們進(jìn)一步體會(huì)到要盡快讓學(xué)生上手的優(yōu)勢。即,先給學(xué)生一點(diǎn)嘗試(簡單的判斷),然后逐步提高意識(shí);先給學(xué)生一些興趣,然后引導(dǎo)應(yīng)用。先易后難,總比按住一個(gè)大任務(wù)去完成要順心、順手。
當(dāng)然,本節(jié)課也有一些需要提高的地方,如任務(wù)的多樣性、自主性,以及問題的思考量也需要加強(qiáng)。即,程序解決問題的先期問題需求和算法分析應(yīng)多重視,以便培養(yǎng)學(xué)生的算法思想,避免程序的簡單模仿。