魚濤 黃宏博 方煒煒
摘 要:文章根據(jù)作者多年的教學經(jīng)驗,對C語言程序設計中函數(shù)實驗教學設計進行研究探討,闡述了函數(shù)實驗的設計思想、實驗要求、實驗輔導、實驗成績的評定以及實驗目的,便于培養(yǎng)學生邏輯思維能力和綜合編程能力。同時研究了函數(shù)實驗應用,設計了實驗題目,更好地為學生全面學習掌握函數(shù)實驗的程序設計提供了編程思路。
關(guān)鍵詞:函數(shù)實驗教學設計;實驗應用;提高編程能力
中圖分類號:G642 文獻標志碼:A 文章編號:2096-000X(2018)03-0095-03
Abstract: This paper explores the experiment teaching in C language programming according to the author's teaching experience, analyzing the design idea, experimental requirements, experimental guidance, evaluation of experimental results and experimental purposes of functional experiments so as to effectively cultivate students' logical thinking and programming ability. Meanwhile, the application of the function experiment and the experiment topic is discussed, providing an idea for students to better learn the program design of function experiment.
Keywords: function experiment teaching design; experimental application; improve programming ability
《C語言程序設計》課程是一門實踐性很強的課程,其教學目標是要求學生掌握設計程序的思路,學會C語言編寫程序,以實現(xiàn)所需處理的任務。在C語言程序設計中函數(shù)是后續(xù)內(nèi)容的一個基礎,是教學的重點之一,也是難點之一。首先,在實驗題目設置上,以學生掌握基本知識為基礎,應精心設置必做與選做題,以滿足各個層次學生的需要;其次在設計符合學生實際教學及實驗重點方面應放在學生的解題的思路上,通過大量的實驗讓學生學會怎樣設計一個算法,構(gòu)造一個程序,從而較好地實現(xiàn)教學目標,幫助提高學生編程能力,使學生盡快掌握函數(shù)編程。
一、設計思想
函數(shù)實驗是C語言程序設計實驗教學中的一個難點,絕大部分學生對函數(shù)編程無從下手,首先,實驗內(nèi)容的設計應滿足不同專業(yè)的需求,并符合我校學生的實際,太高或太低的要求以及用同一個實驗要求學習情況不同的學生都將導致實驗教學的失敗。所以應在C語言實驗教學中啟發(fā)并訓練學生的編程思維,在程序結(jié)構(gòu)、算法設計方面循循善誘、深入淺出,才能收到較好的效果。另外在實驗教學設計中應考慮如何充分調(diào)動學生的學習積極性和主動性,激發(fā)學生的學習興趣。
1. 制定指導性實驗。引導學生完成實驗內(nèi)容。既從已知到未知,從易到難,循序漸進。
2. 實驗形式多樣化。應有驗證性實驗、設計性實驗和綜合提高實驗。
3. 實驗的設計應盡可能使實驗結(jié)果多樣化。在實踐環(huán)節(jié)中,我們只對學生提出目標,提供指導性意見,不限定學生的實現(xiàn)方法,鼓勵學生用不同的方法實現(xiàn),從而拓寬學生的思路,提高學生創(chuàng)新意識。
4. 實驗內(nèi)容模塊化。將實驗分為基礎實驗和提高實驗。實驗內(nèi)容應豐富,教師根據(jù)不同專業(yè)和學生的實際情況規(guī)定必做內(nèi)容和選做內(nèi)容。學生也可根據(jù)自己的實際在課外選做。但要對學生提出明確的實驗要求。
二、實驗要求
實驗分為三個步驟:
1. 上機前的準備。分析題目,選擇適當算法編寫程序,仔細檢查程序直到找不到錯誤。準備幾組測試程序的數(shù)據(jù)和預期的正確結(jié)果,以便發(fā)現(xiàn)程序中可能存在的錯誤。
2. 上機輸入和編輯程序,并調(diào)試運行程序。除了編輯、編譯、運行外,特別要求學生要在單步跟蹤程序時會設置并觀察變量,并要求學生記錄實驗結(jié)果。
3. 整理上機實驗結(jié)果,寫出實驗報告。實驗結(jié)束后,要整理實驗結(jié)果并認真分析和總結(jié),根據(jù)教師要求寫出實驗報告。實驗報告一般包括實驗目的、實驗內(nèi)容、程序清單、運行結(jié)果、分析與思考。
三、實驗輔導
不同的學生采用不同的輔導方法,對掌握較好的學生主要輔導算法思想,在邏輯思維上進行指導,并引導他們一題多解,以拓展思路,鞏固知識;對掌握一般的學生,思考問題不夠全面,調(diào)試程序的能力也較弱,應幫助他們避免因一個小小的錯誤而浪費很多時間;對掌握較差的學生,應主動關(guān)心、鼓勵他們,并在學習方法上給予耐心指導,讓他們大膽的提問,幫助他們盡快入門。另外組織并鼓勵學生共同探討解決問題,形成良好的編程氛圍以提高學生的學習興趣和自主學習的能力。
四、實驗成績的評定
實驗課的成績應從三方面給出:
1. 實驗前的準備。實驗前的準備是做好實驗的關(guān)鍵,通過檢查學生實驗前準備的程序清單,并給出成績,可督促學生積極準備。
2. 實驗課上給出程序調(diào)試能力的成績。根據(jù)學生實驗任務完成情況、了解完成效果、回答問題、規(guī)范性及創(chuàng)新性以及在上機輔導過程中對學生的學習情況及學習態(tài)度的了解等方面當堂課給出上機成績。實踐證明,在實驗課上評定學生成績,可以調(diào)動學生調(diào)試程序的積極性、主動性,并加快學生調(diào)試程序的速度。
3. 實驗報告成績。批改實驗報告,給出成績,作為實驗成績的一部分。
五、實驗目的
掌握C程序函數(shù)的定義和調(diào)用方法,學會編寫通用程序模塊,掌握程序設計的基本方法并編寫出具有清晰模塊結(jié)構(gòu)的C程序。
六、實驗應用
實驗題1:
設計目的:
對已經(jīng)解決的問題,因勢利導,來解決與之相關(guān)聯(lián)的問題。并引導學生從分析程序過渡到修改程序再到編寫程序。學會歸納并掌握同一類問題的解題方法,培養(yǎng)學生在程序設計方面的發(fā)散思維,提高程序設計中的應變能力。讓學生明白:問題是活的,但程序是有章可循的。
實驗題目:
1. 讀懂并編輯、調(diào)試如下程序。要求掌握函數(shù)的設計框架:a函數(shù)的定義 b函數(shù)的聲明 c函數(shù)的調(diào)用 。
題目:編寫函數(shù)求m~n的累加和。在主函數(shù)中完成輸入、輸出。
#include
void main()
{
int s,m,n;
int sum(int m,int n); //函數(shù)的聲明
scanf("%d%d",&m,&n);
s=sum(m,n);//函數(shù)的調(diào)用
printf("%d~%d的累加和為:%d\n",m,n,s);
}
|int sum(int m,int n)//函數(shù)的定義
{
int i,su=0;
for(i=m;i<=n;i++)
su=su+i;
return su;//返回結(jié)果
}
2. 修改以上程序求m~n的乘積。(即:m*(m+1)*(m+2)*…*n)
3. 修改以上程序,求1!~m!的和。(即:1!+2!+3!+…+m!)
實驗題2:
設計目的:
在1中,給出了程序的整體框架,可使初學者對函數(shù)設計的關(guān)鍵問題有清晰的認識,可培養(yǎng)學生的全局思維和算法的整體設計能力,并體現(xiàn)了程序設計“逐步求精”的思路。本題4為分析并修改錯誤的題型。對初學編程時容易出現(xiàn)的典型錯誤,以錯例分析的形式引出,可加深學生對程序的理解,并培養(yǎng)正確的編程理念。
實驗題目:
1. 編程判斷一個數(shù)是否為素數(shù)。判斷素數(shù)用函數(shù)完成。
main( )
{
int n;
讀入n;
if(prime(n)返回1)
n是素數(shù);
否則
n不是素數(shù)
}
int prime(int x)
{
設標志位flag;
如x是素數(shù)
flag=1;
否則
flag=0;
返回flag;
}
2. 修改上述程序找出區(qū)間p~q之間的素數(shù)。
3. 修改上述程序驗證區(qū)間p~q的正偶數(shù)都能分解為兩個素數(shù)之和。
提示:
判斷一個數(shù)m是否為素數(shù)的方法是用2到sqrt(m)的值依次去除m,若能整除,即余數(shù)為0,則m除了1和它自身之外,還有其它的因子,m不是素數(shù),標志變量為0,否則m是素數(shù),標志變量為1。
4. 調(diào)試下列程序,使之具有如下功能:fun函數(shù)是一個判斷整數(shù)是否為素數(shù)的函數(shù),使用該函數(shù)求1000以內(nèi)的素數(shù)平均值。指出所給程序的錯誤并寫出正確的源程序。
#include "stdio.h"
#include "math.h"
void main( )
{
int a=0,k; /* a保存素數(shù)之和 */
int fun(int n);
float av; /* av保存1000以內(nèi)素數(shù)的平均值 */
for(k=2;k<=1000;k++)
if(fun(k)) /* 判斷k是否為素數(shù) */
a+=k;
av=a/1000;
printf("av=%f\n",av);
}
int fun(int n)/* 判斷輸入的整數(shù)是否為素數(shù) */
{
int i,y=0;
for(i=2;i
實驗題目:
若開發(fā)一個學生成績管理系統(tǒng),該系統(tǒng)包括很多模塊,其中要求編寫一個學生成績統(tǒng)計和初步處理程序。
程序的功能要求如下:
1. 從鍵盤輸入學生成績數(shù)據(jù)到程序中;
2. 對輸入的學生成績進行降序排序、輸出;
提示:
2.1 從鍵盤輸入學生人數(shù);
2.2逐個輸入學生成績放在數(shù)組中;
2.3將剛剛輸入的學生成績,輸出給用戶;
2.4對學生成績進行降序排序,要求將實現(xiàn)排序算法的函數(shù)單獨聲明和編碼;
2.5輸出排序后的學生成績;
選做題:
設計目的:
選做題主要引導學生用多種方法求解問題,開拓思路,鞏固知識,激發(fā)興趣,培養(yǎng)學生嚴密的邏輯思維能力、自學能力和創(chuàng)新意識,并為進一步學習計算機專業(yè)知識打下基礎。
選做題1:
編寫程序?qū)崿F(xiàn):從鍵盤輸入10個數(shù),查找某一給定值。編寫一函數(shù),實現(xiàn)查找,并寫出主函數(shù)調(diào)用該函數(shù)。(可用多種方法實現(xiàn))
提示:
算法1:順序查找:
數(shù)據(jù)從下標為1的單元開始存放,要查找的數(shù)據(jù)放在下標為0的單元中,從最后一個數(shù)據(jù)開始向前比較,若相等則返回下標,當下標為0時,查找失敗,否則查找成功。
算法2:折半查找:(要求10個數(shù)必須遞增有序)
將要查找的數(shù)據(jù)與當前查找范圍內(nèi)位置居中的數(shù)據(jù)的值進行比較,若相等,則查找成功,給出被查到數(shù)據(jù)在數(shù)組中的位置,查找結(jié)束。若要查找的數(shù)據(jù)小于位置居中的數(shù)據(jù),則到當前查找范圍的前半部分重復上述查找過程,否則,到當前查找范圍的后半部分重復上述查找過程,直到查找成功或者失敗。若查找失敗,則給出信息0。
選做題2:
編寫程序?qū)崿F(xiàn):從鍵盤輸入10個數(shù),按由大到小的順序排序。排序算法用函數(shù)完成。(用多種方法實現(xiàn))
提示:
算法1:
冒泡法排序的思想是:將相鄰的兩個數(shù)進行比較,小的冒泡浮上去,大的沉下來,即將小的調(diào)到前頭去。若有5個數(shù)(8、5、9、3、1),第一次比較8和5,對調(diào)后為5和8;第二次比較8和9,不對調(diào);第三次比較9和3,對調(diào)后為3和9;第四次比較9和1,對調(diào)后為1和9,則第一輪比較結(jié)束后的順序為(5、8、3、1、9),則大的9沉到底,小的1上浮一個位置,得到最大的數(shù)。第二輪比較對余下的4個數(shù)進行操作,方法一樣。
算法2:
選擇排序法的思想:第一輪先找出10個數(shù)中的最小值,然后與第一個數(shù)a[0]進行交換,即a[0]中存入最小值;第二輪找出剩余9個中的最小值,與第二個數(shù)a[1]進行交換,即a[1]中存入次小值;依此類推,直到按從小到大的順序排好。用外層for循環(huán)控制9輪比較,內(nèi)層循環(huán)控制每一輪比較,將每一輪比較得到的最小值的對應下標先存放在變量k中,再將a[k]與a[I]比較,將較小的放在a[I]中。
五、結(jié)束語
通過函數(shù)實驗教學設計的研究探討和實驗編程的應用,從易到難,逐步深化,使學生循序漸進地掌握了函數(shù)編程,提高了學生綜合編程的能力,提高了學生解決實際問題的能力,更好地掌握編程思想,實現(xiàn)教學目標。
參考文獻:
[1]王培培,劉芳.計算機課程的“任務驅(qū)動教學法”研究[J].新課程研究,2009,6:64-66.
[2]牛熠,董阿妮.C語言教學中學生興趣的培養(yǎng)[J].東莞理工學院學報(自然科學版),2006(1).
[3]譚浩強.C語言程序設計教程[M].北京:清華大學出版社,2005.