黃昌軍+李顯峰+柴榮軍
【摘要】教學(xué)過(guò)程中同一問(wèn)題反復(fù)出現(xiàn)可以有效降低學(xué)習(xí)難度,提升學(xué)習(xí)效果。本文總結(jié)分析了斐波納契數(shù)列問(wèn)題在C語(yǔ)言的循環(huán)、數(shù)組、函數(shù)這三個(gè)典型知識(shí)點(diǎn)的中的應(yīng)用,三種應(yīng)用可以進(jìn)行精心設(shè)計(jì),制作成為相應(yīng)的三段微課視頻放在互聯(lián)網(wǎng)上,方便學(xué)生使用移動(dòng)終端進(jìn)行訪問(wèn),隨時(shí)隨地進(jìn)行泛在學(xué)習(xí)。
【關(guān)鍵詞】C語(yǔ)言;斐波那契數(shù)列;應(yīng)用;泛在學(xué)習(xí)
【中圖分類號(hào)】TP312.1-4 【文獻(xiàn)標(biāo)識(shí)碼】B 【文章編號(hào)】2095-3089(2017)09-0012-02
斐波那契數(shù)列由中世紀(jì)的意大利數(shù)學(xué)家列昂納多·斐波那契提出,起初僅僅是用來(lái)研究兔子繁殖問(wèn)題,但是隨著時(shí)間的推移,斐波那契數(shù)列的重要性日益凸顯,在混沌學(xué)、化學(xué)、晶體結(jié)構(gòu)學(xué)、數(shù)學(xué)、生物學(xué)、經(jīng)濟(jì)學(xué)等多個(gè)跨度極大的領(lǐng)域得到了十分廣泛的應(yīng)用。
由于其突出的重要性,斐波那契數(shù)列經(jīng)常被稱為“神奇的斐波那契數(shù)列”,其特征簡(jiǎn)而言之就是,數(shù)列的前兩項(xiàng)都為1,從第三項(xiàng)開(kāi)始,數(shù)列的每一項(xiàng)都等于其前兩項(xiàng)之和,即數(shù)列的前若干項(xiàng)分別為1,1,2,3,5,8,13,21,34,55等等。從1963起,美國(guó)數(shù)學(xué)學(xué)會(huì)開(kāi)始出版名為《斐波納契數(shù)列季刊》的數(shù)學(xué)雜志,專門發(fā)表斐波那契數(shù)列方面的研究成果。
在C語(yǔ)言的教學(xué)過(guò)程中,斐波那契數(shù)列問(wèn)題在循環(huán)、數(shù)組、函數(shù)等章節(jié)多次出現(xiàn),以下對(duì)斐波那契數(shù)列問(wèn)題在各章節(jié)的具體應(yīng)用加以總結(jié)分析。
一、斐波那契數(shù)列在for循環(huán)中的應(yīng)用
使用迭代法,結(jié)合C語(yǔ)言中使用頻率最高的for循環(huán),實(shí)現(xiàn)計(jì)算輸出菲波那契數(shù)列的前20項(xiàng)的程序代碼如下:
#include
void main()
{ int fib1,fib2,i;
fib1=1;fib2=1;
for(i=1;i<=10;i++)
{ printf(″%d \t%d \t ″,fib1,fib2);
if(i%2==0) printf(″\n″);
fib1=fib1+fib2;
fib2=fib2+fib1;}
}
這種方法的程序代碼很簡(jiǎn)短,但是要讓學(xué)生真正理解其實(shí)現(xiàn)過(guò)程還是比較難的。授課過(guò)程中需要把迭代法的實(shí)現(xiàn)過(guò)程,即“fib1=fib1+fib2;fib2=fib2+fib1;”這兩條語(yǔ)句的執(zhí)行過(guò)程給學(xué)生講得很詳細(xì),讓學(xué)生深入領(lǐng)會(huì)其中的編程技巧才能達(dá)到比較好的效果,
二、斐波那契數(shù)列在數(shù)組中的應(yīng)用
數(shù)組的每個(gè)元素可以對(duì)應(yīng)數(shù)列中的一項(xiàng),因此使用數(shù)組也可以計(jì)算輸出菲波那契數(shù)列。以下是使用數(shù)組,計(jì)算輸出該數(shù)列的前20項(xiàng)的具體代碼:
#include
void main()
{
int i,fib[21];
fib[1]=1;
fib[2]=1;
for(i=3;i<=20;i++)
fib[i]=fib[i-2]+fib[i-1];
for(i=1;i<=20;i++)
{
printf("%d\t",fib[i]);
if (i%4==0) printf("\n" );
}
}
程序中,數(shù)組長(zhǎng)度定義為21,為了編程方便,只使用其中下標(biāo)1到20的數(shù)組元素。可以發(fā)現(xiàn),第一個(gè)for循環(huán)中的賦值語(yǔ)句和菲波那契數(shù)列的通項(xiàng)公式非常類似,因此,學(xué)生理解起來(lái)難度不高,明顯要比第一種方法簡(jiǎn)單,不需要太多的編程技巧,體現(xiàn)出了數(shù)組的優(yōu)點(diǎn)。另外使用這種方法時(shí),數(shù)列的每一項(xiàng)都保存在對(duì)應(yīng)的數(shù)組元素中,可以隨時(shí)使用數(shù)列的任意一項(xiàng),顯然第一種方法是做不到這一點(diǎn)的。
三、斐波那契數(shù)列在函數(shù)中的應(yīng)用
C語(yǔ)言是一種函數(shù)型的語(yǔ)言,C程序的基本組成單位就是一個(gè)個(gè)的函數(shù)。其中有一種函數(shù)叫做遞歸函數(shù),遞歸函數(shù)的突出特征是自己調(diào)用自己。菲波那契數(shù)列的自身特征決定了它很適合用遞歸函數(shù)來(lái)實(shí)現(xiàn)。
我們可以編寫一個(gè)遞歸函數(shù)計(jì)算菲波那契數(shù)列任意一項(xiàng)的值,然后在main函數(shù)中寫一個(gè)for循環(huán),在循環(huán)體中調(diào)用這個(gè)遞歸函數(shù)計(jì)算輸出數(shù)列的前20項(xiàng)。
完整的程序代碼如下,:
#include
long fib(int n)
{ long f;
if (n==1 || n==2)
f=1;
else
f=fib(n-1)+fib(n-2);
return(f);
}
void main(void)
{ int i;
for (i=1;i<=20;i++)
{ printf(“%ld\t”,fib(i));
if (i%4==0)
printf(“\n”);
}
printf(“\n”);
}
在第三種方法中,數(shù)列任意一項(xiàng)的計(jì)算和第二種方法類似,難度不高。在這段程序中,函數(shù)的返回值定義為long型,以使其可以計(jì)算的值更大一些,適用面更廣一些。
從運(yùn)行結(jié)果看,以上三個(gè)程序?qū)崿F(xiàn)了完全相同的效果,都計(jì)算輸出了斐波納契數(shù)列的前20項(xiàng),并且都是輸出五行,每行輸出四個(gè),但是其實(shí)現(xiàn)過(guò)程完全不同。
以上總結(jié)分析了斐波納契數(shù)列在C語(yǔ)言的三個(gè)典型知識(shí)點(diǎn)的中的應(yīng)用,三種應(yīng)用可以進(jìn)行精心設(shè)計(jì),制作成為相應(yīng)的三段微課視頻放在互聯(lián)網(wǎng)上,方便學(xué)生使用移動(dòng)終端進(jìn)行訪問(wèn),隨時(shí)隨地進(jìn)行泛在學(xué)習(xí)。
參考文獻(xiàn)
[1]黃昌軍,李音,柴榮軍. 素?cái)?shù)問(wèn)題在C語(yǔ)言教學(xué)中的應(yīng)用[J]. 考試周刊,2015(89):118.
[2]黃昌軍,柴榮軍,張婷曼. 泛在學(xué)習(xí)典型應(yīng)用平臺(tái)探討[J]. 現(xiàn)代商貿(mào)工業(yè),2016(29):171.
[3]申云成,顧慶傳. 用C語(yǔ)言程序?qū)崿F(xiàn)斐波拉契數(shù)列的微課教學(xué)探討[J]. 福建電腦,2014,30(6):147-149.
[4]孫義欣,宋大偉. 斐波那契數(shù)列問(wèn)題的C語(yǔ)言教學(xué)實(shí)施探討[J]. 電腦編程技巧與維護(hù),2012(16):151-152.
[5]柴榮軍,黃昌軍,張婷曼. 基于智能終端的泛在學(xué)習(xí)個(gè)性化系統(tǒng)設(shè)計(jì)[J]. 新教育時(shí)代電子雜志:學(xué)生版,2016(1).