999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

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

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

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

關鍵詞:C語言;算法為先;教學模式

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

1引言

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

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

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

2.1語法細節易使學生失去學習興趣

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

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

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

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

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

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

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

運用scanf函數輸入字符時,又出現特殊性。

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

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

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

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

2.2編程環境易讓學生望而生畏

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

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

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

main ( )

{

int a,b;

a = 32767;

b = a+1;

printf(“%d”,b);

}

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

2.3算法為先,激發學習熱情

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

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

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

3算法教學建議

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

3.1以結構化程序設計思想為核心,開拓算法設計思路

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

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

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

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

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

正確的解題算法將減少程序的邏輯錯誤,算法用N-S圖描述出來后,利用相應的C語句,學生很容易編寫出程序的主體代碼,至于其它編程細節,可以引導學生查閱資料。這樣,學生對語法的學習由被動變為主動。精心培植的幼苗,一定期盼開花結果,學生經過一番努力,編寫出的程序代碼,也一定希望能用計算機實現,于是上機調試也變得既有目的性,挑戰性又有趣味性。

3.2案例式教學,一題多解,培養設計算法的邏輯思維

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

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

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

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

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

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

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

在編程訓練過程中,學生不僅要積累設計正確,高效算法的經驗,而且隨著課程內容的不斷豐富,還要能將各種算法轉化為可執行程序,完成整個結構化程序設計過程。

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

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

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

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

4結束語

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

參考文獻:

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

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

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

[4] 陳元琰. 程序設計過程中“循環結構”一節的教學方法[J]. 高教論壇,2004(1):76-78.

猜你喜歡
教學模式
群文閱讀教學模式探討
“思”以貫之“學、練、賽、評”教學模式的實踐探索
體育教學(2022年4期)2022-05-05 21:26:58
關于應用型復合人才培養的教學模式探討
遼寧絲綢(2022年1期)2022-03-29 00:59:06
特殊教育學校在線教學模式探索與實踐
河北農機(2020年10期)2020-12-14 03:14:40
“以讀帶寫,以寫促讀”教學模式的實踐探索
甘肅教育(2020年12期)2020-04-13 06:25:48
“認知-遷移”教學模式在高年級閱讀教學中的應用
“一精三多”教學模式的探索與實踐
“導航杯”實踐教學模式的做法與成效
學習月刊(2015年18期)2015-07-09 05:41:22
5E教學模式對我國中學數學教學的啟示
高中生物教學模式改革之我見
散文百家(2014年11期)2014-08-21 07:17:00
主站蜘蛛池模板: 福利片91| 夜夜操天天摸| 丁香六月激情综合| 欧美国产精品不卡在线观看| 55夜色66夜色国产精品视频| 国产亚洲精品97AA片在线播放| 成人自拍视频在线观看| 国产熟女一级毛片| 免费毛片全部不收费的| 国内精品久久久久久久久久影视| 91小视频在线观看免费版高清| 欧美一级视频免费| 久久国产V一级毛多内射| 日本不卡在线| 亚洲精品成人片在线观看| 这里只有精品国产| 最新亚洲人成网站在线观看| 亚洲 日韩 激情 无码 中出| 亚洲精品男人天堂| 啊嗯不日本网站| 91无码网站| 小13箩利洗澡无码视频免费网站| 国产成人你懂的在线观看| 久久久噜噜噜久久中文字幕色伊伊| 亚洲无线视频| 欧美一级在线| 狠狠亚洲五月天| 久久国产亚洲欧美日韩精品| 九九热免费在线视频| 国产区在线观看视频| 国产真实乱人视频| 精品视频一区二区三区在线播| 欧美啪啪精品| 国产一区二区三区在线精品专区 | 在线观看欧美国产| 欧美国产综合色视频| 国产特级毛片| 免费不卡视频| 国产91在线|中文| 国产一在线| 亚洲日韩AV无码精品| 亚洲色欲色欲www在线观看| 色综合久久久久8天国| 精品国产Ⅴ无码大片在线观看81| 欧美午夜视频| 国产丰满大乳无码免费播放| 久久精品一品道久久精品| 成人福利在线视频免费观看| 首页亚洲国产丝袜长腿综合| 欧美伊人色综合久久天天| 91久久夜色精品国产网站| 最新精品久久精品| 久久99精品国产麻豆宅宅| 成年人福利视频| 国产精品思思热在线| 欧美日韩国产精品va| 女人18毛片一级毛片在线| 欧美日韩另类国产| 爆乳熟妇一区二区三区| 午夜福利亚洲精品| 中文天堂在线视频| 欧美精品高清| 激情影院内射美女| 91色综合综合热五月激情| 亚洲成在人线av品善网好看| 日本欧美成人免费| 国产99免费视频| 国产成人艳妇AA视频在线| 99久久婷婷国产综合精| 亚洲AV无码久久精品色欲| 国产国产人在线成免费视频狼人色| 久久久久国产一区二区| 日韩色图在线观看| 国产亚洲精久久久久久无码AV| 精品国产网站| 成人在线不卡视频| 第一区免费在线观看| 激情亚洲天堂| 五月婷婷中文字幕| 欧美亚洲日韩不卡在线在线观看| 99re视频在线| 国产美女一级毛片|