淺談信息學奧賽程序設計算法的教學

2021-01-10 有意思電影

【摘 要】青少年信息學奧林匹克競賽作為一項面向青少年普及計算機科學知識的競賽活動,主要是培養和提高青少年的思維能力、分析判斷能力和應用計算機解決問題的能力。信息學奧賽教學的最終目標就是讓學生從給定的問題出發,設計解決問題的算法,並能初步使用一種程序設計語言編製程序實現算法解決問題。本文談談我近幾年來在信息學奧賽程序設計算法教學中採取的一些方法和策略。

【關鍵詞】程序設計 算法 興趣 形象化 交流 錯誤資源 教學網站

【正文】

程序設計算法教學就是要使學生在已有相關知識結構的基礎上進一步體驗算法思想,了解算法在解決問題過程中的地位和作用;能從簡單問題出發,設計解決問題的算法,並能初步使用一種程序設計語言編製程序實現算法解決問題。由於算法具有高度的抽象性和嚴密的邏輯性;不僅需要學生具有一定的動手實踐能力,更需要具有一定的數學知識和邏輯思維判斷能力;學生入門比較難。因此在程序設計算法的教學中應特別注意與學生已有相關知識的銜接,從學生出發,要強調理論與實踐的結合,要激發他們的學習興趣,充分調動他們的積極性。我在程序設計算法教學過程中做了以下嘗試和探索。

一、藉助遊戲教學法,激發學生學習興趣

興趣是培養學生學習程序設計算法的前提。心理學研究表明:人們對自己感興趣的事物總是力求探索它,認識它。在學生剛剛介入程序設計算法的學習時,一般會從心理上產生一種新奇感,這是學生在接觸新事物時的一般反應。然而隨著知識難度的加深,學生的學習積極性很可能會下降,甚至對那些抽象難懂的程序設計算法產生牴觸和畏難情緒。因此,教師應該運用策略使學生保持初學階段的興趣和積極性。

在講算法概念時,我讓學生先玩預先設計好的FLASH小遊戲《農夫過河》:農夫要把羊、狼和青菜帶過河去,而每次只能攜帶一件物品,又不能讓狼吃羊或者羊吃青菜,請問農夫該如何過河?學生的興趣一下子被激發起來,紛紛提出自己的方案,課堂非常活躍。在學生玩農夫過河遊戲時,通過不同的方法過河成功。當幾種方法匯總好以後可以自然而然引出算法的定義:為解決某一個問題而設計的確定的有限的步驟就稱為算法,同時也可以讓學生了解到一個問題的算法可能不止一種。又如,在講算法的優劣性時,我引用了成語典故「田忌賽馬」。學生饒有興趣地分析出了田忌賽馬的六種方案,接著我要求他們選出孫臏的方案,並點出算法具有優劣性。通過玩小遊戲、引用典故來學習程序設計算法可以激發學生興趣,使他們充分享受成功的喜悅。學習內驅力得到了淋漓盡致的挖掘,學習效率也得以明顯提高,學生樂在其中!

二、從學生出發,精選教學案例使教學形象化

算法是解決問題的方法和步驟,計算機解決問題,必須嚴格的按步驟進行,這和學生平時解決問題是有區別的。因此在算法設計中,應將平時解題中沒有想清楚的每一步都想清楚,這對學生的邏輯思維能力要求較高,不藉助一定生活案例,學生也難以理解。因而在教學中注意引導學生利用已有知識結構,從他們日常生活中熟悉的或感興趣的問題出發,精心設計教學案例將程序設計算法的過程步驟具體化、形象化,變抽象思維為形象思維,促進學生理解。通過實踐舉例,理論升化,實踐應用,即實踐—理論—實踐三步驟,使學生理解理論同時也能應用這些理論。

例如順序結構中最經典的問題:交換a、b兩個變量的值。很多同學的答案是a=b,b=a,因為大家對變量還不夠認識。這個時候我先用生活中的例子來解釋變量的含義:變量就像一間單人房間,每次只能住一個人,當第二個人住進來的時候之前一個人就要被擠走。然後我把這個例題換了一種說法:我左手拿了玻璃杯,裡面放了水,右手拿了塑料杯,裡面放了可樂,怎麼讓玻璃杯裡變成可樂而塑料杯裡變成水呢?於是在七嘴八舌中便有了交換的方法。我又用了同桌互換作為比喻,讓學生描述如何來交換座位,得出「我讓開,你過來,我過去」的過程,而非「你過來,我過去」這麼簡單,還需要一個空地方讓我先待著,這就是交換的關鍵所在。而後我只是說了一句話「再加個容器」,學生馬上就理解了物品互換的原理,然後再導出如下知識點:

在該案例教學過程中,沒有直接提出兩數交換問題,而是通過容器互換、座位互換將問題具體化,形象化激發學生的興趣,培養了學生的思維能力,促進學生理解。

三、加強生生交流和師生交流,促進教學相長

交流活動在程序設計算法教學中有著重要地位。一方面,生生之間的交流可以給學生提供表達自己成果的機會,同他人分享學習成果,體驗成功快樂。通過與他人的討論、互助等形式的合作學習,學生可以超越自己的認識,更加全面深刻的理解事物。另一方面,師生之間的交流,可以促進師生之間的感情交流,營造和諧的師生關係。它同時也是圍繞學生學習的需要來組織安排的,能使學生主動地學習算法知識,而不是被動地接受灌輸。

例如在學生已經掌握了s=1+2+3+4+……+99+100的循環結構程序基礎上,來做1-2+3-4+……+99-100這個程序設計示例的時候,在給予學生充分的空間和時間,讓他們交流想法,自主編寫之後,我驚喜的發現學生編寫出了多種方法。(1)有學生直接指出了我預先設計的代碼過於複雜,可以用初始值n=-1,然後在每次的循環體內取n=-n;s=s+n*i,這樣就可以將代碼寫的更為簡潔,我及時的將這部分同學的想法給予肯定;(2)部分學生通過對原始代數式的分析,寫出s=s+(i-(i+1)),i=i+2。將這個例子拿出來給全班同學看的時候,我特意指出了程序的循環次數少了一半,算法上更為優化,希望能夠引導學生今後儘量想出優化的程序;(3)部分學生交流之後採用了循環+分支的結構,通過條件的判斷來決定正負號:if i mod 2=0 then s=s-i else s=s+i ,這是一個非常好的方法,結合了循環和分支結構,來完善和增強自己程序的功能。教師通過自己的教學行為來積極引導學生交流,同時也參與到學生的交流之中,從而引起學生學好算法的積極態度,激發並滿足學生的情感需要,特別是對知識的渴望與興趣,從而達到教學相長的效果。

四、充分利用學生錯誤資源,培養學生反思能力

在程序設計算法教學中,錯誤總是伴隨著學生的學習過程。心理學家蓋耶認為:「誰不考慮嘗試錯誤,不允許學生犯錯誤,就將錯過最富成效的學習時刻。」學生出現的錯誤自有它的特有之處,我們要容「錯」、用「錯」、誘「錯」、最後糾「錯」,這樣才能讓「錯誤」美麗起來。第一:建立「語法錯誤」資源庫,提升「錯誤」價值。在課堂中我把學生每次上機犯的語法錯誤都記錄下來,放到錯誤共享資源庫,學生在調試程序時,如果發現錯誤,可以從資源庫裡「檢索」。一段時間下來,學生的語法錯誤逐漸減少了。第二:利用「邏輯錯誤」突破教學重難點。有時候程序運行後結果並不是所期望的,這說明程序可能存在邏輯錯誤。造成邏輯錯誤的常見原因有:運算符使用不正確、語句的次序不對、循環語句的初值、終值不正確等等。通常,邏輯錯誤不會產生錯誤提示信息,故錯誤較難排除,而且邏輯錯誤的產生往往是學生沒有理解某些重要知識點而造成的。鑑於此,我們要在課堂中因勢利導,利用這些「邏輯錯誤」來突破重點或分散難點,達到較好的教學效果。如在教學「循環語句」時,在用DO和FOR語句編寫程序時,學生最容易出現三種邏輯錯誤:一是語句次序顛倒使結果不符合要求;二是條件表達式寫錯使循環沒有執行;三是初值設置錯誤。而這些問題恰恰是教學重難點需要解決的問題的具體體現。我們要充分利用這些課堂生成資源引導學生對這些典型錯誤進行討論和自我總結,從而促進學生科學知識結構的建立或完善。第三:以「隱性錯誤」為契機,培養學生反思能力。在程序運行過程中,有時候會出現兩種情況:一是程序運行結果正確但程序有錯,二是程序運行有結果,但結果是錯誤的,學生卻沒有發現結果有錯。這兩種很難感覺到的錯誤,可稱其為「隱性錯誤」。學生一般很難察覺隱性錯誤,教師發現此類錯誤後,最好不要直接指出,而是要引導學生多觀察、多思考、多比較,讓「錯誤」逐步浮出水面。而且學生往往對自己的隱性錯誤有很大的興趣,找到錯誤後也會很興奮,教師可藉此機會讓學生積極開展自我反思。

學生的錯誤是課堂最原生態的「資源」,我們不能忽視這些資源,而應充分利用這些錯誤帶給我們的教學契機,化錯為寶。課堂錯誤也只有在不斷地改正中行進,在教師的良好駕馭中轉化提升,才能迸發無窮的魅力。

五、開設自主學習網站,引導學生自主學習

「教讓學動」——讓學生自學,體驗成功的樂趣。信息學奧賽內容繁多,課堂教學時間有限,教師不可能面面俱到,要讓學生能夠獲取更多的知識,就必須改變傳統的「教師講多少,學生學多少」的模式,努力培養學生積極主動地去獲取知識、彌補自己的不足之處的能力。程序設計算法涉及到很多概念性知識,學生也會接觸到大量的例題,在這種情況下,學生要麼忙於作筆記而忽略了問題的分析與解決,要麼忙於考慮問題而來不及作筆記,為了讓學生兩頭都不落下,並且保證教學的效率,我覺得開發自主學習網站是很有必要的。由於學生個體差異,部分學生能很快吸收、消化課堂知識,但是他們還不滿足於此,為了延續這些學生的學習熱情,在自主學習網站上為他們開闢一個專欄,對程序設計作深入介紹,同時將一些競賽信息也放置其中,在滿足這些學生需求的基礎上充分調動他們的學習積極性。對於不能在課堂上及時吸收和消化的學生,課後可以通過訪問自主學習網站再現上課內容,根據掌握程度選擇學習知識點,逐步掌握課堂知識。這種做法克服了傳統教學中學生「吃不飽」與「吃太飽」的問題。對於網站的更新,每堂課結束以後,我會將本堂課的知識點、上課用到的例題及算法、拓展延伸部分放到網頁中去。為學生開闢網站,讓學生自主學習培養了他們的自學能力,同時在自主學習中遇到問題並能與同學們一起探討、解決,培養了學生的合作精神。

程序設計算法教學一直是突破信息學奧賽的門檻,這是由於程序設計算法教學本身抽象、枯燥,邏輯思維性強,學生不易入門。怎樣培養學生的好奇心、求知慾,保持學生對算法課的興趣,提高學生思維能力和自主學習能力,使學生樂於學習,這是值得我們探討的。

相關焦點

  • 卓越課程丨59程序設計·用代碼連接世界
    很多同學都知道,我們學校有一門非常著名的課程叫「信息奧賽」,4次團體總分廣東省前十名。在全國信息學總決賽、亞太賽、冬令營、中國隊選拔賽中獲金牌4人次,銀牌2人次、銅牌6人次。2019年7人通過高校自主招生考試,其中楊明煒同學進入北大、劉彥瑩同學進入中大,查俊然同學進入加州大學伯克利分校。今天,我們帶你走進「程序」、「算法」的世界一探究竟。
  • 聽乖媽聊信息學奧賽
    第一部分:信息學競賽介紹NOPI全國奧林比克聯賽。10-11月份。初中高中,小學生也可以參加。分初賽(筆試)和複賽(程序設計),初賽到達分數線才能到複賽。第一,是觀察分析問題的能力,二是學習數學建模的能力,三是靈活運用算法的能力,四是編寫代碼,並且調試的能力,五是檢測程序是否正確的能力。計算機編程,利用算法解決實際問題。
  • 喜報:太原五中學子在信息學奧賽2020NOIP及CSP-J/S中創佳績!
    李憶雯這是一個美麗的「誤會」,最初我可能和大多數人一樣是個信息「小白」我以為這是個「興趣班」,進來後才發現,這裡是計算機算法的最高殿堂。這裡有最優秀的團隊,皇甫老師和程老師帶我開啟信息奧賽之旅。當我第一次用程序寫下A+B時,覺得也不過如此。可幾節課以後,「循環」、「分支」、「判斷」這些我從來沒聽過的詞語,這些從未在以前的任何一本課本上見過。
  • 山東膠州一中學子喜獲2020年全國信息學奧林匹克聯賽一等獎!
    捷報熱烈祝賀山東省膠州一中吳一豪同學榮獲全國信息學奧林匹克聯賽一等獎!相宏昌同學獲得二等獎。姜越、孫凱同學獲得山東省三等獎。學校領導與參賽師生合影全國信息學奧賽一等獎 吳一豪全國信息學奧賽二等獎 相宏昌信息學奧賽山東省三等獎 姜越 孫凱信息學奧賽作為全國中學生五大學科競賽之一,近年來受到廣泛的關注
  • 王顥:這位高二女生拿了信息學奧賽金牌被保送進清華大學
    今天跟一位朋友聊天,聊到專門做信息學奧賽的培訓。這位朋友說,他們那拿到比賽的獎項,可以保送上高中。王顥老師想著,既然可以保送上高中,應該也有保送上大學吧,就上網查查,果然有保送的例子。上圖是一個小姑娘,叫毛嘉怡,在上高二。
  • 宜昌童程童美信息學奧賽班地址在哪-宜昌好小子步行街童程童美少兒...
    怎麼選信息學奧賽培訓班呢?童程童美信息學奧賽培訓課程怎麼樣?童程童美凝聚美國上市公司16年編程教學經驗,專注 3-18歲少兒編程教育及服務,形成了以創意啟蒙課程、人工智慧編程、智慧機器人編 程、信息學奧賽編程等課程體系為核心,集國內外大型權威科技賽事、少兒資格認證 考試、科技主題的國內外遊學、冬夏令營、創客實驗室搭建等為一體的少兒教育平臺 。
  • 媒體聚焦│長郡中學酷似雙胞胎的同班同學齊摘國際信息學奧賽金牌
    楊懋龍休閒時喜歡看看動漫,「我要打破一個誤區,有人總是認為學信息的很會操作電腦,那玩遊戲也不在話下,事實上我的遊戲玩得並不好。」事實上「遊戲」是經常跟計算機打交道的長郡中學信息組的同學們面臨的「最大誘惑」,陳江倫說自己愛上信息,初始是當「課外放鬆娛樂」,「剛開始也設計一些簡單的遊戲,像俄羅斯方塊和貪吃蛇之類的。」
  • 聊城一中參加全國青少年信息學聯賽獲獎率62.5%
    在2016年11月舉行的全國青少年信息學聯賽上我校再獲佳績。
  • 雙十中學準高三學生施良致在全國信息學奧賽中奪金 拿到清華入場券
    在剛剛結束的2020年第37屆全國信息學奧林匹克競賽中,施良致獲得金牌,併入選50人的國家集訓隊,由此被保送清華大學。  信息學奧賽被稱為「指尖上的舞蹈」,就是要編寫程序來解決問題。施良致說,考了三場,第一場筆試,半個小時,重頭戲是後兩場的機考,每場五個小時,只考三道題。
  • 初三就被北大預錄取,高二正式保送北大,如今再獲信息學奧賽金牌
    不過對於少數熱衷於競賽的學子而言,他們還有其他的渠道,比如在全國乃至全球奧賽中獲得優異的名次。 每年因為奧賽而被保送清華北大的學生並不少,不過其中以高中生居多。因為大多數學子都是在高中階段參加競賽脫穎而出。而對於周雨揚而言他的北大之路從初中便已經有了眉目。
  • 2020年信息學奧賽國家隊4人成團 北大3名同學入選
    代表全國信息學青少年人才選拔最頂尖水平賽事,即第37屆全國信息學奧林匹克競賽(NOI 2020)及國家隊選拔賽落下帷幕。四位優秀學子入選2020年信息學國家隊,他們是紹興一中周雨揚、鎮海中學羅煜翔、成都七中蔣明潤、紹興一中王展鵬。
  • 大慶實驗中學學生獲信息學奧賽金牌,已保送清華大學
    大慶實驗中學高三4班曾慶之同學在第37屆全國青少年信息學奧林匹克競賽(NOI2020)中獲得金牌,進入國家集訓隊,保送清華大學(已經和清華大學籤訂2021年保送生預錄取協議)。此枚金牌不僅是黑龍江省2020年五大學科競賽中奪得的唯一金牌,同時也是信息學奧賽2020年東三省唯一金牌。
  • 信息學競賽初賽、複賽學習方法推薦
    一、信息學競賽初賽1、初賽內容初賽偏重於基礎知識。一部分是計算機的基礎知識。計算機基礎部分,內容多而雜,多以選擇題形式出現,所以不必要花太多時間去背,而是平時多積累,有意識地去記憶,留下印象。最後一部分是程序完成(也就是算法)。這部分完全是靠你的做題基礎,沒有捷徑,只能靠你平時多做題,掌握簡單算法。
  • 厲害了,東平高級中學,榮獲2020年全國中學生信息學奧賽金牌學校
    近日,中國計算機協會(CCF)公布了2020年全國中學生信息學奧林匹克競賽(NOIP)獲獎名單,在山東師範大學附屬中學舉行了隆重的總結表彰大會。東平高級中學校長趙景喜應邀出席本次表彰大會,並為獲獎選手頒獎。
  • 五大學科競賽之信息學奧林匹克競賽,一旦入門就會上癮的競賽項目
    01信息學奧賽是什麼?組織單位:中國計算機學會(CCF)及各省特派員考察內容:以程序設計為基礎,包括:動態規劃、數據結構、搜索、圖論、字符串算法、組合數學、數論等。國家級賽事出現的題目類型則更多,有複雜的圖論網絡流算法、後綴數組、隨機算法等內容。
  • 設計程序根本不知道如何下手,這就是編程初學者最常見的困惑
    由於發了一些教學視頻,近期經常有網友向於老師提出自己的困惑,希望給予解答。我摘取了一些有代表性的問題發出來,大家可以一起探討:網友問題:於老師您好,我不算是完全編程小白,但是也差不多,僅僅是知道一點點編程的東西,也寫過幾個最簡單的c++程序,但是自己去設計程序根本不知道如何下手,想系統的學習c++,數據結構,算法,您有什麼好的建議嗎?
  • 廣州六中學子信息學奧賽結碩果!聽聽他們有何感悟?
    2020年暑假,驕陽似火,受上半年疫情影響的信息學奧林匹克系列競賽都集中在暑假8月份舉行。廣州六中信息學奧賽小組的同學們刻苦拼搏,取得了紅火的成績。這次比賽的題目對我來說都很難,能幸運地取得銅牌,離不開老師對我的基礎算法和代碼實現能力的嚴格要求。這次比賽也讓我意識到, OI學習的路還很長。我會繼續努力學習,爭取下一次比賽能取得更好的成績。
  • 杭州學軍中學信息學奧賽創輝煌
    近日官方公布成績,杭州學軍中學信息學奧賽團隊「信友隊」取得輝煌成績:31名同學獲提高組一等獎,浙江省一等獎分數線(195分)之上的人數,名列全國第一;在高分段表現突出,周航銳同學成為浙江省唯一滿分學生,也是全國唯一獲滿分的高一學生。
  • 2020清華大學姚班智班76名學霸,其中25位信息奧賽選手
    清華「姚班」,全名叫「計算機科學實驗班」,由於是姚期智先生(他是第一位也是唯一一位獲得計算機領域最高榮譽——圖靈獎的華人計算機科學家,是公認的算法、密碼學及量子計算專家。)2005年回國主導創辦,所以也叫「姚班」。
  • 杭州二中學子在信息學奧賽中18人獲一等獎,比例高達66%
    喜報12月5日,中國計算機學會(CCF)主辦的全國青少年信息學奧林匹克聯賽(浙江賽區)(NOIP2020)落下帷幕。近日官方公布了獲獎名單,杭州二中信息學奧賽「夢之隊」再創佳績!(NOIP)是一項面向全國青少年的信息學競賽活動。