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