• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    算法為先的C語言教學模式探討

    2009-01-18 07:44:34吐爾根•依布拉音阿里甫•庫爾班
    計算機教育 2009年20期
    關(guān)鍵詞:教學模式

    于 清 吐爾根•依布拉音 阿里甫•庫爾班

    摘要:本文通過分析C語言教學中存在的問題,提出算法學習對學生學習語法和上機操作有著積極的作用,進而闡述算法為先的教學方法,實踐證明,該教學方法從根本上調(diào)動學生學習C語言的積極性和主動性。

    關(guān)鍵詞:C語言;算法為先;教學模式

    中圖分類號:G642 文獻標識碼:B

    1引言

    為適應(yīng)社會和經(jīng)濟的信息化需要,掌握計算機技術(shù)顯得尤為重要。C語言以它結(jié)構(gòu)化豐富、靈活性大、可移植性強、效率高等優(yōu)點,被廣大高校作為計算機專業(yè)基礎(chǔ)課,以及許多非計算機專業(yè)學習程序設(shè)計的首選課。但是又由于C語言涉及的概念復(fù)雜,規(guī)則繁多,數(shù)據(jù)類型和運算符豐富等特點,使許多初學者望而生畏。很多文獻致力于研究好的教學方法,幫助學生掌握C語言語法及上機技巧,這在一定程度上改善了教學效果,但是學生的學習熱情仍然缺乏積極主動。本文通過分析算法在C語言教學中的重要作用,進一步探討算法的教學方法,目的是從根本上激發(fā)學生的學習熱情,降低學習難度。

    2C語言教學中常見問題分析

    算法設(shè)計、基本語法規(guī)則、程序調(diào)試是C語言教學的核心內(nèi)容。算法注重解決某一問題采用的方法步驟,語法注重語言規(guī)范,用規(guī)范的C語言描述的算法必須通過上機調(diào)試才能實現(xiàn),三個核心內(nèi)容緊密聯(lián)系。然而在教學環(huán)節(jié)中,教材內(nèi)容基于語法體系,通常采用課堂講語法、上機調(diào)程序的教學模式,忽視了算法在教學中的積極作用,殊不知過細的語法知識易使學生失去興趣,靈活的編輯環(huán)境讓學生望而卻步,學生的學習熱情很難調(diào)動起來。

    2.1語法細節(jié)易使學生失去學習興趣

    通常C語言是學生接觸的第一門程序設(shè)計語言,任何程序主要由數(shù)據(jù)和操作兩部分組成,圍繞這一特點,C語言教學內(nèi)容可歸納為:算法,數(shù)據(jù)結(jié)構(gòu),程序結(jié)構(gòu)三部分。算法是編程的指導(dǎo)思路;數(shù)據(jù)結(jié)構(gòu)是數(shù)據(jù)的組織形式,可細分為基本數(shù)據(jù)類型,構(gòu)造類型,指針類型、位運算;程序結(jié)構(gòu)是操作語句的組織形式,具體包括預(yù)處理,函數(shù),順序結(jié)構(gòu),選擇結(jié)構(gòu),循環(huán)結(jié)構(gòu)。雖然C語言知識結(jié)構(gòu)清晰,但是它是面向過程的編程語言,具有靈活的編程格式及豐富的運算符和函數(shù),如果對語法細節(jié)不熟悉,以及相關(guān)概念混淆不清,很難編出正確的程序。教師往往投入較多課時,講解C語言語法,而繁多的語法細則,不僅使學生難于記憶,而且容易誤導(dǎo)學生的編程思路。例如scanf函數(shù)的應(yīng)用:

    scanf函數(shù)的一般使用形式為:scanf(格式控制,地址表列)。

    格式控制是用雙撇號括起來的字符串,它包含兩種 信息:

    (1)%和格式字符,如%d,%c,%s等,它的作用是按指定的格式輸入數(shù)據(jù);

    (2) 普通字符,即在數(shù)據(jù)輸入時,需要原樣輸入的 字符。

    地址表列由若干個地址組成,通常是變量的地址或字符串的首地址。輸入多個數(shù)據(jù)時,空格,回車鍵,跳格鍵為默認分隔符。

    如:“scanf(“%d%d%d”,&a,&b,&c);”語句,運行時輸入:6└┘8└┘9↙,可得到變量a,b,c的值。如果輸入語句變?yōu)?“scanf(“%d,%d,%d” ,&a,&b,&c);”,僅添加了兩個逗號,仍按以上方式輸入,則會出錯。原因在于格式控制部分出現(xiàn)的普通字符“,”,在數(shù)據(jù)輸入時要原樣輸入,正確的輸入方式為:6,8,9↙??梢奀語言語法格式非常靈活。

    運用scanf函數(shù)輸入字符時,又出現(xiàn)特殊性。

    如:“scanf(“%c%c%c” ,&c1,&c2,&c3);”語句,運行時輸入:a└┘b└┘c↙,目的是將a賦給c1,b賦給c2,c賦給c3。用“printf(“%c,%c,%c”, c1,c2,c3);”語句輸出,結(jié)果卻為a,└┘,b。出錯原因在于:%c格式字符不需要空格作為輸入字符的間隔。正確的輸入為:abc↙。

    然而,用scanf函數(shù)輸入多個字符串時,空格又成為有效的分隔符。

    如:“scanf(“%s%s%s” ,c1,c2,c3);”語句,其中c1,c2,c3為字符數(shù)組名,若輸入數(shù)據(jù):How are you? ↙,則c1數(shù)組的數(shù)據(jù)是“How”; c2數(shù)組是“are”;c3數(shù)組是“you?”。若將語句改為“scanf(“%s”,c1);”,輸入字符串:How are you? ↙,用“printf(“%s”,c1);”輸出,則只顯示How,與原意不同。如果一定要將帶空格的字符串輸入到字符數(shù)組c1,需要用到另一個輸入函數(shù),如“gets(c1) ;”。

    雖然任何一個C程序輸入數(shù)據(jù),都可能用到scanf函數(shù),但是它靈活的編程格式,往往使初學者在具體運用時舉棋不定,忘卻抓住編程題目的實質(zhì)性要求。教材中還有許多值得注意和思考的語法細節(jié),學生編程時,如果缺乏解題思路的引導(dǎo),常因語法的困擾而失去編程興趣。

    2.2編程環(huán)境易讓學生望而生畏

    上機操作是學習程序設(shè)計的必備環(huán)節(jié),學生可以驗證語句的正確性,測試程序的功能,進一步增強對語法知識的理解和記憶。但是C語言編輯環(huán)境的一些特點,又讓學生望而生畏。

    首先,編輯環(huán)境基于DOS,不像其它可視化語言有友好的交互界面,加之初學者對語法知識不熟悉,編程時稍有不慎就會出錯。如經(jīng)常字母大小寫不分;語句末尾忘加“;”;關(guān)系運算符“= =”誤用為賦值運算符“=”等。初學者對出錯提示缺乏了解,不知道錯在哪里,更無從改正,經(jīng)常一個小小的錯誤導(dǎo)致整個程序無法運行。

    其次,C語言編譯程序?qū)φZ法檢測不像其它高級語言那么嚴格,這種風格雖然給編程留下“靈活的余地”,卻常導(dǎo)致一些非語法性和非算法性的隱型錯誤。比如程序:

    main ( )

    {

    int a,b;

    a = 32767;

    b = a+1;

    printf(“%d”,b);

    }

    運行結(jié)果為-32768,不正確,原因在于發(fā)生了溢出。系統(tǒng)運行時并不報錯,程序中潛伏的隱型錯誤,給編程帶來很多麻煩,增加了調(diào)試難度,對編程者提出更高要求,只有他們較全面地掌握了計算機知識,才可能檢查出錯誤。然而初學者往往只懂得編程的一部分知識,這使他們感到C語言編程即抽象又復(fù)雜。如果沒有濃厚的興趣驅(qū)動,很容易在不知所措中放棄編程。

    2.3算法為先,激發(fā)學習熱情

    “C語言”課程長期沿襲傳統(tǒng)教學模式,以語法體系為脈絡(luò)展開教學,重視語法細節(jié)和操作技巧,忽視算法對編程的指導(dǎo)作用,學生見木不見林,容易失去興趣,經(jīng)過一個學期的學習,除了掌握一些零星的語法外,收獲甚微,面對具體的編程問題,無從下手。從事軟件開發(fā)的人都知道,軟件開發(fā)過程包括:可行性研究,需求分析,概要設(shè)計,詳細設(shè)計,編碼,測試,維護等幾個階段。重點在于先設(shè)計,后編碼,并且整個開發(fā)環(huán)節(jié)需要不斷查閱資料,反復(fù)調(diào)試修改,最終才能設(shè)計出可運行的軟件,單靠記憶和背誦一些語法知識,根本無法適應(yīng)實際需要。

    在教學過程中,正確處理語法與算法的關(guān)系,是提高編程能力的關(guān)鍵。算法是程序設(shè)計的靈魂,沒有正確的算法,計算機解決不了任何問題,語言只是實現(xiàn)算法的工具,要從算法實現(xiàn)的角度來介紹語言,而不是用語言來套用算法。程序設(shè)計課程本身是綜合性較強的一門課,注重由設(shè)計算法到書寫程序并進行調(diào)試的整個過程,它要求學生首先明晰結(jié)構(gòu)化程序設(shè)計思路,知道怎么做,其次要求學生用扎實的語法知識實現(xiàn)編程,最后通過上機調(diào)試保證程序正確運行。然而,這個過程并非一帆風順,會遇到許多意想不到的困難,需要耐心與毅力,只有具備真正的興趣和強烈的好奇心,才容易完成。

    經(jīng)過研究與實踐,教師在教學中如果注重算法為先,從算法實現(xiàn)的角度來介紹語法,那么不僅可以加深學生對語法知識的理解,增強語言應(yīng)用能力,而且通過構(gòu)造算法,培養(yǎng)了學生的邏輯思維,增強了學生分析和解決問題的實踐能力。學生面對新的問題,會從程序設(shè)計思想的角度出發(fā),先設(shè)計算法,在迫切想要實現(xiàn)的好奇心下,克服學習語法和調(diào)試程序的各種困難,變被動為主動。著名計算機科學家Dijkstra曾提到:“學編程是一個由新奇到熟悉循序漸進的過程”,繼而又說:“在這種激進的新奇中含有愉悅的嘗試”。

    3算法教學建議

    由上分析可知,C語言教學目標不僅僅是要求學生掌握語法規(guī)則或再現(xiàn)簡單程序,更重要的是要求學生具備編程實踐能力。傳統(tǒng)教學方式,學生形成以語言為中心的思維模式,編程能力差。教師應(yīng)引導(dǎo)學生逐步形成以算法為中心的思維模式,提高編程能力。但是算法的學習和掌握并不是一蹴而就,必須依靠平時訓練和知識積累,以下提幾點學習建議。

    3.1以結(jié)構(gòu)化程序設(shè)計思想為核心,開拓算法設(shè)計思路

    學習的認知規(guī)律是將復(fù)雜問題簡單化,以便于初學者理解和接收。C語言程序設(shè)計遵循結(jié)構(gòu)化程序設(shè)計方法,該方法提高了程序的可讀性,方便了程序的調(diào)試和維護,最重要的是該方法不拘泥于算法多變的外觀形式,總結(jié)出算法結(jié)構(gòu)的內(nèi)在規(guī)律。學生掌握了這種規(guī)律,面對新的問題,很容易進行知識結(jié)構(gòu)的遷移,復(fù)雜的編程問題將變得簡單。

    結(jié)構(gòu)化程序設(shè)計包括結(jié)構(gòu)化算法設(shè)計和結(jié)構(gòu)化編程。由順序、選擇、循環(huán)三種基本結(jié)構(gòu)(或基本結(jié)構(gòu)的簡單變形),按由上到下的順序排列,組成的算法稱為結(jié)構(gòu)化算法。已經(jīng)證明,結(jié)構(gòu)化算法可以解決任何問題。對于特別復(fù)雜的編程項目,可以先采用自頂向下、逐步細化的分析方法,或采用模塊化設(shè)計方法,把大任務(wù)分解為容易求解的若干子任務(wù),分而治之。對于非結(jié)構(gòu)化算法,還可以用等價的結(jié)構(gòu)化算法替換。在設(shè)計好一個結(jié)構(gòu)化算法之后,就可以進行結(jié)構(gòu)化編程,C語言提供了與三種基本結(jié)構(gòu)相對應(yīng)的語句,進行結(jié)構(gòu)化編程也并非難事。

    由上可知,既然基本結(jié)構(gòu)的順序組合,可以表示任何復(fù)雜的算法結(jié)構(gòu),并且基本結(jié)構(gòu)易于用C語句實現(xiàn),那么學生只要深刻理解并熟練掌握這三種基本結(jié)構(gòu),就會提高設(shè)計算法和編寫程序的能力。表1對算法的三種基本結(jié)構(gòu)進行了總結(jié)。

    說明:算法的表示方法很多,其中N-S流程圖最適于表示結(jié)構(gòu)化算法。表1列出了算法的三種基本結(jié)構(gòu)以及相應(yīng)的N-S流程圖和語句的主要表示形式,學生通過該表很容易理解算法,N-S圖,編程三者之間的關(guān)系。

    教師要向?qū)W生說明,任何復(fù)雜算法都是由這三種基本結(jié)構(gòu)構(gòu)成,構(gòu)造算法其實很容易,大家之所以覺得困難,是因為沒有深刻理解A、B代表的含義。正如表中提到:A、B較靈活,既可以代表選擇結(jié)構(gòu)也可以代表循環(huán)結(jié)構(gòu),選擇結(jié)構(gòu)中還可以再套用一個循環(huán),循環(huán)結(jié)構(gòu)中還可以再嵌套循環(huán)或選擇……由于A、B代表含義不同,可能構(gòu)造出各種各樣不同的N-S圖,教師邊闡述,邊在黑板上繪制,開拓學生的思維空間。最后總結(jié):能構(gòu)造多少N-S圖,就可能存在多少算法;順序、選擇、循環(huán)是三塊基本的積木,形式多樣的算法是由它們搭建而成,用于解決實際問題。這種教學方式,以簡單的N-S圖為切入點,學生很容易發(fā)現(xiàn)N-S圖的多樣性,算法的多樣性,實際問題的多樣性之間的聯(lián)系,從而激發(fā)設(shè)計算法的濃厚興趣。

    正確的解題算法將減少程序的邏輯錯誤,算法用N-S圖描述出來后,利用相應(yīng)的C語句,學生很容易編寫出程序的主體代碼,至于其它編程細節(jié),可以引導(dǎo)學生查閱資料。這樣,學生對語法的學習由被動變?yōu)橹鲃印>呐嘀驳挠酌?一定期盼開花結(jié)果,學生經(jīng)過一番努力,編寫出的程序代碼,也一定希望能用計算機實現(xiàn),于是上機調(diào)試也變得既有目的性,挑戰(zhàn)性又有趣味性。

    3.2案例式教學,一題多解,培養(yǎng)設(shè)計算法的邏輯思維

    C語言是實踐性很強的一門課程,學生除了掌握結(jié)構(gòu)化程序設(shè)計方法外,還必須進行大量編程訓練。通常情況下,一個程序是用哪種語言實現(xiàn)的并不重要,關(guān)鍵在于算法設(shè)計的優(yōu)劣。計算機科學家N. Wirth教授提出了一個著名公式:算法+數(shù)據(jù)結(jié)構(gòu)=程序,由此可見程序設(shè)計的本質(zhì)在于先設(shè)計出解決問題的算法。

    教學初期,學生對語法知識了解甚少,教師可以根據(jù)每節(jié)課的教學目標和內(nèi)容,精選程序例題,將重點放在算法的設(shè)計思路和方法上,逐步培養(yǎng)學生建立正確的思維模式。學生設(shè)計算法時,常犯的錯誤是,不會從計算機角度出發(fā),分析實際問題內(nèi)在的邏輯關(guān)系,而習慣于按照人的思維方式設(shè)計求解過程,算法往往無法用計算機操作實現(xiàn)。因此改變學生思維習慣,培養(yǎng)邏輯分析能力,尤為重要。

    實踐證明,對同一問題,設(shè)計多種有效算法,并對算法進行優(yōu)化選擇,有利于培養(yǎng)學生邏輯思維。通過一題多解,既拓展了學生的解題思路,增強了學生對同類問題求解的熟練程度,同時又潛移默化地培養(yǎng)了學生思維的科學性、嚴謹性。通常,不同問題間存在某種共性,一些基本算法掌握熟練后,學生很容易舉一反三解決不同問題,樹立起編程的信心。

    例如通過一題多解,讓學生熟練三個數(shù)由大到小排序的算法,進而引導(dǎo)學生對一組無序數(shù)據(jù)進行排列,用N-S圖描述算法,更能反映出不同問題之間的聯(lián)系和區(qū)別。

    再如典型例題:用100元錢買100只雞,每只公雞5元,每只母雞3元,每3只小雞1元,要求每種雞至少買一只,而且必須是整只,問各種雞各買多少只?

    對該問題設(shè)計多種算法,既幫助學生熟悉了循環(huán)語句,同時通過對各種算法進行評價,學生又深刻體會到算法設(shè)計的優(yōu)劣對程序執(zhí)行效率的影響。經(jīng)過這種長期訓練,學生求解問題時,不僅會注意算法的正確性,也會注重思維的嚴謹性。一題多解既培養(yǎng)了學生創(chuàng)造性思維,又訓練了邏輯思維,是提高算法設(shè)計能力的有效方法。

    3.3算法帶動語法學習,全面提高編程能力

    在編程訓練過程中,學生不僅要積累設(shè)計正確,高效算法的經(jīng)驗,而且隨著課程內(nèi)容的不斷豐富,還要能將各種算法轉(zhuǎn)化為可執(zhí)行程序,完成整個結(jié)構(gòu)化程序設(shè)計過程。

    以往教學模式過多重視語句命令格式,教學內(nèi)容繁瑣,學生需要識記的知識多,并且不易體會其用途,容易失去學習興趣。如果在教學過程中,教師采用一些方法,充分利用學生對算法的理解和掌握,激發(fā)學習語法的興趣,將取得好的教學效果。

    首先,面對編程問題,如果學生明晰解題思路,在結(jié)構(gòu)化程序設(shè)計思想的指導(dǎo)下,會很快設(shè)計出算法的N-S圖。由前可知,算法是由順序、選擇、循環(huán)三種基本結(jié)構(gòu)構(gòu)成,表1只是簡單地列出了三種基本結(jié)構(gòu)的C語句實現(xiàn),教師應(yīng)廣泛搜集并認真挑選典型例題,幫助學生全面掌握三種基本結(jié)構(gòu)的各種語法表示。這樣,學生根據(jù)算法的N-S圖,就會很容易編寫出程序的主體代碼。

    其次,教學初期,采用案例式教學,注重培養(yǎng)學生的算法設(shè)計能力,學生的語法知識比較薄弱,若要求他們將算法的N-S圖完全轉(zhuǎn)換成計算機語言,會遇到較多困難。如果教師能認真解析C語言知識,將教學內(nèi)容有機組織起來(見2.1所述),再現(xiàn)在學生面前,那么學生在迫切想要實現(xiàn)算法的心理之下,借助腦海中的知識體系,會很容易尋找到相關(guān)章節(jié),查閱還未曾系統(tǒng)學習的語法內(nèi)容,獨自完成編程過程。這樣既增強了學生的學習自主性,學生在解決問題的同時,又深刻體會到語句的用途和功能,從而激發(fā)出強烈的編程興趣。

    最后,建議教師按照總體教學目標組織教學,制定每節(jié)課的語法教學任務(wù),針對教學任務(wù)挑選例題,通過對案例的分析講解,一方面幫助學生積累設(shè)計算法的經(jīng)驗;另一方面,加強學生對算法所涉及語法內(nèi)容的理解,掌握和應(yīng)用,學生只有正確理解并熟練掌握每一個基本概念,編程時才會少犯語法錯誤,從而減少不必要的程序調(diào)試,逐漸樹立編程的信心。

    4結(jié)束語

    C語言是計算機基礎(chǔ)教育的重要組成部分,教學目標在于培養(yǎng)學生的編程能力。多年來,教學模式一直圍繞語法體系,學生學習興致不高,分析和解決實際問題的能力差。經(jīng)過多年教學與實踐,本文倡導(dǎo)算法為先的教學模式,以結(jié)構(gòu)化程序設(shè)計思想為指導(dǎo),通過案例式教學,提高學生算法設(shè)計能力;利用學生對算法的理解和掌握促進語法學習,進而提高學生將算法轉(zhuǎn)換為計算機語言的能力;算法和編程能力的提高,將有效減少程序中的邏輯錯誤和語法錯誤,降低調(diào)試難度。由此可見,算法為先的教學模式,有利于提高學生的程序設(shè)計水平。

    參考文獻:

    [1] 譚浩強. C語言程序設(shè)計[M]. 北京:清華大學出版社,2000.

    [2] Edsger W. Dijkstra. On the Cruelty of Really Teaching Computing Science[J]. Comm.ACM,1989(32):1398-1404.

    [3] 鐘頻. 高級語言程序設(shè)計的精髓—算法設(shè)計[J]. 株洲師范高等??茖W校學報,2005(5):51-53.

    [4] 陳元琰. 程序設(shè)計過程中“循環(huán)結(jié)構(gòu)”一節(jié)的教學方法[J]. 高教論壇,2004(1):76-78.

    猜你喜歡
    教學模式
    群文閱讀教學模式探討
    “思”以貫之“學、練、賽、評”教學模式的實踐探索
    體育教學(2022年4期)2022-05-05 21:26:58
    關(guān)于應(yīng)用型復(fù)合人才培養(yǎng)的教學模式探討
    遼寧絲綢(2022年1期)2022-03-29 00:59:06
    特殊教育學校在線教學模式探索與實踐
    “以讀帶寫,以寫促讀”教學模式的實踐探索
    甘肅教育(2020年12期)2020-04-13 06:25:48
    “認知-遷移”教學模式在高年級閱讀教學中的應(yīng)用
    “一精三多”教學模式的探索與實踐
    “導(dǎo)航杯”實踐教學模式的做法與成效
    學習月刊(2015年18期)2015-07-09 05:41:22
    5E教學模式對我國中學數(shù)學教學的啟示
    高中生物教學模式改革之我見
    散文百家(2014年11期)2014-08-21 07:17:00
    龙州县| 桃江县| 田阳县| 探索| 界首市| 滨海县| 彭泽县| 开封市| 武汉市| 汨罗市| 汝南县| 寻乌县| 仙桃市| 当阳市| 五家渠市| 龙川县| 长武县| 商水县| 松江区| 柳河县| 巴彦县| 卓资县| 民和| 德格县| 乐平市| 山阴县| 丰台区| 江达县| 三门县| 泽州县| 田林县| 苗栗市| 连平县| 读书| 富源县| 湖州市| 工布江达县| 登封市| 洪湖市| 灵山县| 军事|