程妮,景運革
(運城學院數(shù)學與信息技術(shù)學院,運城 044000)
《C語言程序設計》課程是一門應用性極強的結(jié)構(gòu)化程序設計語言,是全院非計算機專業(yè)理工科學生的通識教育課程。結(jié)構(gòu)化程序設計主要使用三種基本結(jié)構(gòu)來構(gòu)造程序,其中循環(huán)結(jié)構(gòu)是最為重要且最難掌握的一種,尤其是其中的循環(huán)嵌套,一些學生就會出現(xiàn)“上課聽不懂,實驗不會做”的情況,所以常規(guī)的講授法學生很難理解、掌握和消化?;诖?,根據(jù)筆者多年的教學實踐經(jīng)驗,在精選教學案例的基礎上,以問題為引導,層層深入地分析講解案例,一步步引導學生理解循環(huán)嵌套的執(zhí)行過程,并靈活應用循環(huán)嵌套解決實際問題。教學實踐表明,案例教學法的實施,調(diào)動了學生學習的積極性,培養(yǎng)學生分析和解決問題的能力,從而達到教學目標和效果。
案例教學法是教師根據(jù)學生的理解程度和教學需要,將知識點加工成一些典型的案例,并引導學生一起思考、分析、討論案例[1],并最終掌握所學知識和技能的一種開放式、互動式的教學模式。
在C語言的循環(huán)嵌套教學中實施案例教學法,從教學內(nèi)容和教學目標來看都是可行的。循環(huán)嵌套是C語言循環(huán)結(jié)構(gòu)章節(jié)中的難點內(nèi)容,所以本節(jié)內(nèi)容的知識性、邏輯性、抽象性較強,內(nèi)容相對枯燥,學生很難理解。教師通過選取生動有趣的典型案例,吸取了學生的注意力,提高學生學習的積極性,讓學生參與到案例學習的各個環(huán)節(jié)中,從而讓學生在完成實例的過程加強對循環(huán)嵌套的概念、結(jié)構(gòu)和執(zhí)行過程的理解,掌握類似案例的編程規(guī)律,使學生能夠舉一反三,提高學生的動手操作能力和編程能力,以及解決實際問題的能力。
在案例教學法中,案例的選取十分關(guān)鍵,教師要根據(jù)學生的實際情況以及教學目標、內(nèi)容的需要,選擇有針對性的典型案例。而且案例既要突出本節(jié)課的重難點,還要和學生的日常生活相適應[2]。同時,教學中使用的案例要由易到難、層層深入,這樣可以循序漸漸地啟發(fā)學生,培養(yǎng)學生的邏輯思維能力,達到教學目標和效果。
在C語言的三種基本結(jié)構(gòu)中,循環(huán)結(jié)構(gòu)最為重要,而且應用也最為廣泛。其中循環(huán)嵌套是循環(huán)結(jié)構(gòu)章節(jié)中的難點內(nèi)容,是本門課程的難點與核心。循環(huán)嵌套的內(nèi)容難度高且相對抽象,學生接受起來有些困難,所以教師要綜合考慮學生的實際情況、教學內(nèi)容和需要等,運用各種教學方法來調(diào)動學生學習的積極性。
循環(huán)嵌套結(jié)構(gòu)的教學目標是:①理解循環(huán)嵌套的含義、基本結(jié)構(gòu)和語句格式;②掌握循環(huán)嵌套的執(zhí)行過程;③應用循環(huán)嵌套結(jié)構(gòu)設計程序的方法;④培養(yǎng)學生分析、解決問題的能力以及解決實際問題的能力。
循環(huán)嵌套結(jié)構(gòu)的教學重點:①循環(huán)嵌套的含義、基本結(jié)構(gòu);②平面圖形的輸出;③循環(huán)嵌套結(jié)構(gòu)的應用。
循環(huán)嵌套結(jié)構(gòu)的教學難點:應用for循環(huán)嵌套,編寫程序解決實際問題。
大二的理工科學生已具備一定的邏輯思維能力和學習能力,而且上一節(jié)課已經(jīng)學習了循環(huán)的概念,實現(xiàn)循環(huán)的三種語句以及使用循環(huán)編寫簡單的程序,這些為本節(jié)課內(nèi)容的學習奠定一定的基礎。但是,由于內(nèi)容的抽象性和應用性較強,受學習和思維能力等因素的影響,學生在學習過程中很難完全理解和掌握循環(huán)嵌套的相關(guān)概念和執(zhí)行過程,因此激發(fā)學生興趣,增強學生學習的積極性十分重要。
循環(huán)嵌套的教學主要采用案例教學法,通過問題的方式引入案例,進而引導學生分析案例,將知識分解,然后通過具體案例分析、掌握循環(huán)嵌套的執(zhí)行過程和應用,最后編程解決案例中的問題。
教師活動:
提出問題1:當循環(huán)次數(shù)確定時,使用哪種循環(huán)結(jié)構(gòu)更方便?其基本格式如何?
提出問題2:如何輸出一行*?
學生活動:
學生口述for循環(huán)的語句格式和循環(huán)的三要素等。師生共同分析輸出一行*時,循環(huán)變量的初值、終值和步長,然后教師板書程序。
通過問題引導是學生回顧已學知識,熟悉for循環(huán)的三要素及語句格式;教師通過板書for循環(huán)基本格式可以進一步加深學生的直觀印象,為引入for循環(huán)嵌套做鋪墊。
教師活動:
提出問題:使用for循環(huán)可以輸出一行*,那如果要打印4行7列的*,該如何解決?那如果要打印一百行*呢?
學生活動:
學生能回答出上面輸出一行*的程序段將要被執(zhí)行4次。
在此基礎上,教師進一步引導,展開對該實例的講解。
課件展示:循環(huán)嵌套的應用——平面圖形的輸出(板書)
【實例1】輸出4行7列的*。
算法分析過程:
(1)對行的輸入:平面圖形的每一行輸出7個*,需要重復進行4次。輸出一行*將作為循環(huán)結(jié)構(gòu)的循環(huán)體,而行數(shù)則是循環(huán)結(jié)構(gòu)的循環(huán)控制變量。
(2)對列的輸入:每一行需要重復輸出7個*,也用循環(huán)結(jié)構(gòu)來實現(xiàn)。
(3)循環(huán)嵌套:for循環(huán)的循環(huán)體又被另一個for循環(huán)語句替代,則形成了循環(huán)的嵌套結(jié)構(gòu)。
C程序代碼如下:
教師提問:
語句printf(“ ”);能否不寫?
在輸出平面圖形時,在每一行符號輸入完成后,要加一條換行顯示語句,否則所有的符號會在一行中顯示。
結(jié)論:
有規(guī)律的平面圖形,一般使用雙重循環(huán),逐行輸出。
外循環(huán)控制行,內(nèi)循環(huán)控制列。
(1)循環(huán)嵌套的含義和結(jié)構(gòu)
在一個循環(huán)體內(nèi)完整地包含另一個循環(huán)結(jié)構(gòu),稱為循環(huán)嵌套。
其中外層的循環(huán)稱為外循環(huán),嵌套在循環(huán)體內(nèi)的循環(huán)稱為內(nèi)循環(huán)。嵌套可以有很多層,一般使用雙重或三重循環(huán)。
(2)實現(xiàn)循環(huán)嵌套的方式
三種循環(huán)結(jié)構(gòu)while、do-while、for可以互相嵌套,這節(jié)課我們主講for循環(huán)的嵌套結(jié)構(gòu)。而且循環(huán)語句之間只存在并列和嵌套兩種關(guān)系。
循環(huán)嵌套的設計要點:在使用循環(huán)嵌套結(jié)構(gòu)實現(xiàn)行列輸出時,首先要找出循環(huán)體,其次要確定控制循環(huán)的次數(shù)。其中,循環(huán)體的次數(shù)一般由循環(huán)控制變量來實現(xiàn),需要明確三要素[3]。
(3)循環(huán)嵌套的執(zhí)行過程
循環(huán)嵌套的執(zhí)行規(guī)律是外循環(huán)執(zhí)行一次,內(nèi)循環(huán)要執(zhí)行多次。即在每次執(zhí)行外循環(huán)的循環(huán)體時若遇到內(nèi)循環(huán),應將內(nèi)循環(huán)體的全部循環(huán)結(jié)束后再執(zhí)行下一次的外循環(huán),直到外循環(huán)也全部結(jié)束為止[4]。
結(jié)合課件上的流程圖,教師引導學生分析循環(huán)嵌套的執(zhí)行過程。
圖1 循環(huán)嵌套的執(zhí)行流程
【實例2】輸出右圖的平面圖形。
教師提問:
共輸出幾行*?每一行輸出幾個*?
教師引導學生分析規(guī)律,共4行*,所以外循環(huán)執(zhí)行4次,循環(huán)體的次數(shù)用i表示,三要素分別為i=1;i<=4;i++;外循環(huán)的循環(huán)體是輸出*,通過觀察,可得出每一行輸出*個數(shù)不同,第i行輸出i個*,如果內(nèi)循環(huán)由j來控制,j的變化應為1到i;另外注意,每一行符號輸完后要換行[5]。
通過實例1的學習,學生在理解循環(huán)嵌套后都能完成實例2的這個平面圖形的輸出,教師及時給于鼓勵和反饋,可以大大提高學生的自信心。
【實例3】輸出右圖的平面圖形。
●教師提問:行和列的關(guān)系是什么?
●學生回答,教師分析并板書行和列的規(guī)律,課件呈現(xiàn)程序代碼。
【拓展實例】輸出右圖的平面圖形。教師提問:
●每行輸出的空格數(shù)有什么特點?
●外循環(huán)的循環(huán)體是什么?
●如何輸出空格?
結(jié)合課件,教師引導學生一起分析平面圖形的規(guī)律,得出答案:
●學生討論分析每行空格數(shù)的特點。
●外循環(huán)的循環(huán)體應包括兩部分:即每一行先輸出空格,再輸出*并換行。
●觀察平面圖形,分析得出第i行要先輸出4-i個空格,再輸出2*i-1個*。
C程序代碼如下:
教師提問:
●外循環(huán)的循環(huán)體包括了兩個for語句,這兩個for語句的關(guān)系是什么?
通過以上案例的學習,學生進一步了理解for循環(huán)嵌套的語句格式和執(zhí)行過程,并通過幾個案例的逐層深入,可以做到舉一反三,從而利用循環(huán)嵌套解決實際問題。
通過上面幾個實例的學習,學生基本上掌握了循環(huán)的嵌套結(jié)構(gòu)了,對循環(huán)嵌套的概念和執(zhí)行過程也有了深入的理解。為了更好地掌握和應用for循環(huán)嵌套,利用循環(huán)嵌套解決實際問題,教師進一步講解幾個應用實例。
【應用實例1】利用循環(huán)嵌套結(jié)構(gòu)編程,輸出九九乘法表。
圖2 九九乘法表
教師活動:
●提出問題1:參考課件上的九九乘法表,思考如何輸出?
●提出問題2:每行輸出幾個式子?行與列有什么關(guān)系?
教師引導學生分析,這個例子與實例2比較相似,一共要打印9行,所有外循環(huán)變量i的值應為1到9,第i行打印出i個式子,所以內(nèi)循環(huán)變量j的取值應為1到i[6]。另外,第i行第j列要輸出的式子為:printf("%d*%d=%2d",j,i,i*j);有了上面幾個實例的基礎,學生可以寫出如下程序:
強調(diào):
●講解行和列的規(guī)律,強調(diào)j<=i
●式子的表示和輸出
●%2d的用意
【應用實例2】求1!+2!+….+10!
結(jié)合課件,教師引導學生分析:
(1)外循環(huán):累加求和 循環(huán)變量i1~10
根據(jù)以上分析,學生對于該實例的求解過程很清晰了。學生可以在紙上編寫程序。教師適時地給以引導,最后通過課件程序該程序的完整代碼,并做總結(jié)。
完整C程序代碼為:
【思考】輸出100以內(nèi)所有的素數(shù)。
提示:循環(huán)嵌套程序設計還常出現(xiàn)在使用枚舉法解決實際問題的程序中,例如,該題和“尋找水仙花數(shù)”等問題。
實例結(jié)束后,給學生留下思考題,學生可以在課下,利用所學知識編程實現(xiàn)。
本節(jié)課我們通過平面圖形的輸出的一個案例,引出循環(huán)嵌套,講解了循環(huán)嵌套的概念,分析了其結(jié)構(gòu)和執(zhí)行過程;并通過多個案例的講解,進一步鞏固了循環(huán)嵌套的相關(guān)知識,主要是for循環(huán)嵌套的應用;最后結(jié)合總結(jié)的規(guī)律,在屏幕上輸出九九乘法表等,并給學生留下思考題目以供學生課下學習,鞏固新知。
針對學生的實際情況和教學需要,結(jié)合多年的教學經(jīng)驗,在C語言循環(huán)嵌套教學實踐摸索出一套適合學生的案例教學法,教學實踐表明,案例教學改變了傳統(tǒng)以理論知識為中心的教學模式,將復雜抽象的知識貫穿于一些典型案例中,并通過問題引導層層深入地分析、講解案例,調(diào)動了學生學習的積極主動性,學生的邏輯思維能力和編程能力也得到了明顯提高,取得了良好的教學效果。