摘要:本文從三個例子入手,說明在《C語言程序設計》教與學的過程中,可根據實際問題的情況,不斷挖掘教材中的程序里的育人素材,在教書的同時也加強育人工作。
關鍵字:程序設計;育人素材;育人工作
中圖分類號:TP312 文獻標志碼:A 文章編號:1674-9324(2013)46-0091-03
C語言是一種國際上廣泛流行的計算機高級語言,具有用途廣泛、功能強大、使用靈活的特點。數學系在2011版人才培養方案中將《C語言程序設計》課程列為數學系共同學科課程,總課時為90,包括36課時的實踐操作。目前使用的教材為譚浩強著,清華大學出版社2010年7月出版的《C程序設計(第四版)》。該課程的教學除了與程序代碼、計算機打交道,在教學中,教師可以深入挖掘教材育人素材,加強學生的思想道德教育工作。
一、做人要有“底線”
結構化程序設計的思想是自頂向下,逐步細化,模塊化設計,結構化編碼。核心的理念就是層次。良好的代碼要有層次感,先做好“頂層設計”,然后一步一步細化,這樣做可使編碼工作有條不紊地進行。在教材第291頁有這樣的題目[1]:有n個人圍成一圈,順序排號。從第1個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位。文獻[2]在第104頁給出如下的參考解答[2]:
這段代碼從頭到尾只有一個main()函數,根本就不符合結構化程序設計的思想要求。把所有的代碼都堆在main()函數中,就如同在一個硬盤中存放了很多文件,卻沒有使用任何文件夾來進行管理一樣;也如同買了一套房子,并沒有用墻把房子分隔成臥室、客廳、廚房、餐廳、衛生間,而是將一切生活用品都堆放在房子的地上,吃喝拉撒都在一個大房間里進行。一個源程序由若干個函數組成,猶如用墻把房子分隔成一個個房間一樣。模塊化設計就是把一個大任務分為若干個相對簡單的子任務,每個子任務用函數來實現。解決一個問題首先要從大處著手,做好“頂層設計”,站在高處來看,解決這個問題需要四個步驟[3]:輸入人數;數組初始化;“從1到3報數”n-1次;輸出最后剩下的那個人的編號。而每一步都可以簡單地用函數或基本的控制語句來實現。在向下一層展開之前應檢查本層設計是否正確,只有上一層設計是正確的才能向下細化。良好的程序設計應該是把復雜的問題分解為簡單的問題,然后各個擊破,一件一件有條不紊地完成。“自頂向下,逐步求精”的層次理念是每個編程人時刻都要堅持的,就像做人要守好自己的“底線”一樣,不能輕易發生動搖。
二、做人要誠實守信
誠實守信是做人的一個基本原則。文獻[4]中形象地給出了一個“狼來了的故事”。一個人第一次撒謊,他的可信度會由原來的0.8下降為0.444,再撒謊一次,可信度就降為0.138了[4]。在教材第168頁有這樣的題目[1]:用篩法求100之內的素數。文獻[2]在第54頁給出如下的參考解答[2]:
篩法是公元前250年由古希臘數學家埃拉托斯特尼(Eratosthenes)提出的一種求出不超過自然數n范圍內所有素數的一種簡單的古老算法[3]。方法是:首先寫出1~n的全部自然數,然后逐個判斷它們是否是素數,找出一個非素數,就把它挖掉,最后剩下的就是素數。具體做法是:1.先將1(不是素數)挖掉;2.找到第一個素數2,把2的倍數挖掉;3.找到第二個素數3,把3的倍數挖掉,這個過程一直進行到除數后面的數已全部被挖掉為止。上面的算法可表示為[2]:①挖去1;②用下一個未被挖去的數p除p后面的各數,把p的倍數挖掉;③檢查p是否小于等于■的整數部分,如果是,則返回(2)繼續執行,否則,就結束;4.剩下的數就是素數。例如n=9時:1 2 3 4 5 6 7 8 9;首先挖掉1:① 2 3 4 5 6 7 8 9;然后挖掉2的倍數4,6,8:① 2 3 ④ 5 ⑥ 7 ⑧ 9;最后挖掉3的倍數9:① 2 3 ④ 5 ⑥ 7 ⑧ ⑨。由于3<=■成立,因此剩下的數:2,3,5,7就是素數。如果只用小于■的素數去“篩”這張表,則得到的結果是不正確的。因此,該程序中“i for (i=2;i ?搖for (j=i+1;j<=100;j++) ?搖?搖?搖{if(a[i]!=0 a[j]!=0) ?搖?搖?搖if (a[j]%a[i]==0) ?搖?搖?搖?搖?搖a[j]=0; ?搖?搖?搖} 所用的方法根本就不是篩法!因為篩法的核心思想是:每確認一個素數就“篩”去這個素數的倍數。而“篩”去該素數的倍數既不需要通過“j++”對數組中該數后面的數逐個檢查,也不需要進行求余運算(a[j]%a[i])。因為,只要根據下標就可以判斷出某數是否是某個素數的倍數。例如,若a[2]的值為2是一個素數,那么a[2+a2]],a[2+a[2]+a[2]],…就一定是2的倍數。所以,即使按照原來不合理的數據結構(int a[101];),這段代碼也應該這樣寫: for (i=2;i*i<=100;i++) ?搖?搖if(a[i]!=0) ?搖?搖?搖?搖for (j=i+a[i];j<=100;j+=a[i]) ?搖?搖?搖?搖?搖a[j]=0; 這樣才稱得上是篩法[3]。這里j并不是每次加1,而是加[ai],而且不需要費時的“%”運算,在效率方面與原來的寫法有天壤之別。編寫程序與做人一樣,要誠實守信,程序的編寫要體現真正的方法,名副其實,不能撒謊。 三、做人要勤儉節約 勤儉節約是一種美德,黨中央嚴令取消公宴,前一段時間興起的“光盤”行動,就是反對鋪張浪費,主張勤儉節約的良好說明。每一個編程的人不僅生活中要勤儉節約,而且在編寫程序時也要注意勤儉節約的問題。在教材第168頁有這樣的題目[1]:輸出以下的楊輝三角形(要求輸出10行)。 1 1 1 1 2 1 …… …… …… 文獻[2]在第60頁給出如下的參考解答[2]: 楊輝三角形的每一行都可以根據前一行得到,若只是輸出楊輝三角形,則求得一行的數據后,前一行的數據也就沒有用處了。這樣一來該問題最多只需要兩個具有10個元素的一維數組就足夠了:一個存儲某行楊輝三角形數據,另一個存儲其備份,用來計算下一行數據。因此參考解答中定義10*10的二維數組太浪費了[3]。如果是從后向前計算楊輝三角形數據,那么連備份的數組也用不到,只需一個數組就可以了[3]: 這里只是略舉幾例,《C語言程序設計》課程中的育人素材還很多,可以深入挖掘,并充分利用這些素材,在教書的同時做一些育人工作。 參考文獻: [1]譚浩強著.C程序設計(第四版)[M].北京:清華大學出版社,2010. [2]譚浩強著.C程序設計(第四版)學習輔導[M].北京:清華大學出版社,2010. [3]薛非.拋棄C程序設計中的謬誤與惡習[M].北京:清華大學出版社,2012. [4]茆詩松,程依明,濮曉龍編著.概率論與數理統計教程[M].北京:高等教育出版社,2011:50-51. 作者簡介:劉鵬(1973-),男,副教授,主要從事信息與計算科學專業的課程教學。