摘要:轉型期的民辦高校要始終注重學生能力的培養,貫徹授之以漁的教育理念,逐步實現課堂教學開放互動的教學模式,激發學生共同討論問題的興趣,增強其分析和解決問題的能力。本文將結合高校計算機類通識課程中的面向過程語言編程實例,剖析排序算法分析,引領學生掌握解決此類題目的方式方法。
關鍵詞:教學模式;實踐;舉一反三
中圖分類號:G642.4 文獻標志碼:A 文章編號:1674-9324(2018)24-0274-02
首先,課前教師要精心準備教學實例并指導學生提前閱讀。已知數據文件IN.DAT中存有200個四位數,并已調用讀函數readDat()把這些數存入數組a中,請學生編制一函數jsVal(),其功能是:如果四位數各位上的數字均是0或2或4或6或8,則統計出滿足此條件的個數cnt,并把這些四位數按從大到小的順序存入數組b中。最后main()函數調用寫函數writeDat()把結果cnt以及數組b中符合條件的四位數輸出到OUT.DAT文件中。
通過閱讀題目,我們首先可以得出:有200個四位數存儲在數組a中,那么,學生該如何引用這批數據呢?C語言規定:數組的下標從0開始記,即a[0]、a[1]、a[2]、……、a[199]。
其次,我們要通過編輯jsVal()函數體中的語句,來實現該函數的功能。“如果四位數各位上的數字均是0或2或4或6或8”,請學生認真思考:如何獲取一個四位數(例如:6482)的千位、百位、十位、個位上的數字呢?我們不妨進行下面的一組演算:
6482/1000,所得商即為千位上的數字6。
6482/100%10,所得余數即為百位上的數字4。
6482/10%10,所得余數即為十位上的數字8。
6482%10,所得余數即為個位上的數字2。
通過觀察上述的演算過程,我們可以整理出關于獲取四位數各位上的數字的算法來,也就是,千位上的數字:四位數/1000,百位上的數字:四位數/100%10,十位上的數字:四位數/10%10,個位上的數字:四位數%10。同樣,我們也可以以此類推出獲取三位數各位上的數字的算法來,即百位上的數字:三位數/100,十位上的數字:三位數/10%10,個位上的數字:三位數%10。
接下來,請學生對已拆分出各位上的數字“均是0或2或4或6或8”進行仔細分析。我們不難發現,其實具有這類特征的數值都是偶數,但千位上的數字卻不能為0。對此,我們通過選擇結構來完成上述結論的邏輯分析,即if(千位上的數字%2==0&&百位上的數字%2==0&&十位上的數字%2==0&&個位上的數字%2==0&&千位上的數字!=0)。可在此題目中,我們要對數組a中200個元素去重復執行該項條件的判定,為此,我們需要借助循環結構來遍歷數組a中全部元素,即for(i=0;i<200;i++)。
再接下來,“則統計出滿足此條件的個數cnt”,值得強調的是,如果不存在滿足條件的數據,那么,此時cnt的值就是0。換言之,cnt的初始值應置為0。當條件滿足時,cnt的值加1,即cnt++。“并把這些四位數按從大到小的順序存入數組b中”,請學生仔細思考,究竟有多少個被篩選出來的數組a中元素會存入到數組b中,是200個嗎?不,是cnt個。我們要將滿足上述if表達式的數組a中的元素,逐一地賦值到數組b中,即b[cnt++]=a[i];實際上,我們也正是要對它們進行從大到小的排序。下面,我們就通過對一組無序數列:78、29、86、54來加以分析,從而整理出能夠完成指定排序的算法來。分析過程如下所示:
第一趟操作是從第一個位置上的數值開始,進行兩兩比較。
在第一趟操作中,我們依次將第一個位置上的數值與其后各個位置上的數值作比較。如果后者較大,則交換二者位置上的數值;否則,對應位置上的數值不變。經過4-1次比較后,我們得出四個數中最大數86。如此進行下去,在第二趟操作中,對應位置上的數值共進行4-2次比較,我們得出三個數中最大數78。
第二趟操作是從第二個位置上的數值開始,進行兩兩比較。以此類推,第三趟操作是從第三個位置上的數值開始,進行兩兩比較。值得注意的是,在第三趟操作中,共進行了4-3次兩兩比較,我們得出兩個數中的最大數54。以此類推,如果有cnt個數,則要進行cnt-1趟操作,也就是要用外層循環去控制趟數,即for(i=0;i 綜上,授課教師要及時并認真地帶領學生梳理解題思路,把握正確灌輸學生算法分析的火候,舉一反三,觸類旁通,樂此不疲。有200個正整數,且每個數均在1000至9999之間。編制函數,要求按每個數的后三位的大小進行升序排列,然后取出滿足此條件的前10個數依次存入數組bb中,如果后三位的數值相等,則按原先的數值進行降序排列。 在題目的閱讀中,請大家仔細推敲。第一點,“有200個正整數,且每個數均在1000至9999之間”,它實際上等同于“有200個四位數”的說法。第二點,“要求按每個數的后三位的大小進行升序排列”,這其中,我們該如何獲取“每個數的后三位”呢?例如:6482%1000,所得余數即為百位、十位、個位上的數字482。第三點:無論是說升序排列,還是在說降序排列,那其實都是在暗示我們,要按照從小到大或者從大到小進行排列。接下來,我們將分析重點落在如何完成指定要求的排序上去。一種情況是,如果原四位數的后三位數不同時,則將原四位數按照它們的后三位大小進行從小到大排列,即if(當前元素%1000>后序元素%1000)。另一種情況是,如果原四位數的后三位數相同時,則直接按照原四位數的大小進行從大到小排列,即if(當前元素%1000==后序元素%1000&&當前元素<后序元素)。而兩種情況的邏輯關系應該是:if(一種情況||另一種情況)。 通過上述對案例教學逐層遞進式地設計與實踐,要積極倡導授課教師優化案例教學理念,創新教改思路,正確載入先進的教育教學方式方法,引領學生溫故而知新,構建師生默契的教學模式,讓授課教師有備而來,學生滿載而歸,實現寓教于樂。 參考文獻: [1]王一美.新時期創新創業教育的實踐與研究[J].西部素質教育,2017,(13):74-76. [2]王一美.創新創業視角下人才培養模式研究[J].教育觀察,2017,6(9):69-70. [3]王一美.轉型期民辦高校信息類專業實踐教學改革與創新研究[J].寫作,2016,(12):95-96.