兩個表達式分別用兩個遞歸函數(shù)來實現(xiàn)。
目前成都創(chuàng)新互聯(lián)已為近1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計、鄰水網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
所以,題目中兩個表達式的描述,就是告訴你不同情況下的函數(shù)返回值。
之后根據(jù)題意,主函數(shù)通過函數(shù)指針調(diào)用,函數(shù)指針就是指向函數(shù)的指針。把兩個函數(shù)分別賦值給指針,再通過指針調(diào)用函數(shù)。
下面是代碼:
#include stdio.h
int fn1(int n);
int fn2(int n);
int main()
{
int k=3,n=-1,(*p)(int n);
while(n0)
? printf("請輸入n的值(大于等于0):"),scanf("%d",n);
while(k!=1 k!=2)
? printf("請選擇表達式(輸入1或者2):"),scanf("%d",k);
switch(k)
{
? case 1:p=fn1;break;
? case 2:p=fn2;break;
}
printf("通過表示式%d計算得第N項值為:%d\n",k,p(n));
return 0;
}
int fn1(int n)
{
if(n==0) return 1;
if(n==1) return 2;
return 2*fn1(n-1)+fn1(n-2);
}
int fn2(int n)
{
if(n==0) return 0;
if(n==1) return 1;
return fn2(n-1)+2*fn2(n-2);
}
在程序中出現(xiàn)函數(shù)名時,要注意區(qū)分以下三種情況:
1. main函數(shù)中的int?max(int?x,int?y);?是函數(shù)的聲明,一般格式為?返回值?函數(shù)名(參數(shù)類型?參數(shù));
2. max(a,b)為函數(shù)的調(diào)用,一般格式為?函數(shù)名(參數(shù));
3. 后面的max(int?x,int?y){?...}是函數(shù)的定義,一般格式為?返回值?函數(shù)名(參數(shù)類型?參數(shù)){函數(shù)體}
c語言規(guī)定,在一個函數(shù)定義之前調(diào)用它,需要提前進行聲明。
原因是,如果沒有聲明函數(shù),當(dāng)程序運行到max(a,b)時,由于后面的函數(shù)定義還沒有被讀到,所以計算機并不知道m(xù)ax是個什么東西,程序就會出錯。
如果將函數(shù)定義提到main函數(shù)的前面,就無需進行聲明了,程序也不會報錯。
#include?stdio.h
double?f(double?x,double?y)
{?if(x=y)
return?(x+y)/2.0;
else
return?f(f(x+2,y-1),f(x+1,y-2))?//這里不知道怎么運算,求解答,是不是把5和7帶入兩個式子中,條件都滿足,為什么結(jié)果是6而不是5,謝謝
}
int?main()
{
printf("%.1f",f(5.0,7.0));
}
來,開始了:主程序中,函數(shù)參數(shù)為 5.0,7.0.看回函數(shù)體:
double?f(double?x,double?y)//第一次從程序調(diào)用函數(shù)時,x=5.0,y=7.0
{?if(x=y)???//xy成立嗎?不成立,跳過下面一步,轉(zhuǎn)到else部分
return?(x+y)/2.0;
else??//執(zhí)行這里
return?f(f(x+2,y-1),f(x+1,y-2))?//這里返回什么?返回函數(shù)f(f(x+2,y-1),f(x+1,y-2))的結(jié)果,將前面x=5.0,y=7.0代入,化簡,即要返回f(f(7.0,6.0),f(6.0,5.0)).這個結(jié)果包含兩個函數(shù)參數(shù):f(7.0,6.0),f(6.0,5.0).也就是說,這個結(jié)果要用這兩個函數(shù)的結(jié)果去做參數(shù)進行調(diào)用自身,得出的結(jié)果才能返回給主程序.
//先看第一個參數(shù):f(7.0,6.0),將x7.0,y=6.0代入調(diào)用函數(shù)體,明顯,符合xy,執(zhí)行if部分的內(nèi)容返回(x+y)/2.0=6.5
//第二個參數(shù):f(6.0,5.0),同樣,滿足xy,執(zhí)行if內(nèi)容,返回(x+y)/2.0=5.5
//即第一次運行函數(shù)時,返回f(6.5,5.5).再代入函數(shù)體,又有xy成立,執(zhí)行if部分
//結(jié)果是,返回??(x+y)/2.0=(6.5+5.5)/2.0=6.0
}
//重點是遞歸函數(shù).建議好好理解一下遞歸的意義
C/C++語言中,默認(rèn)情況下,函數(shù)時可以從文件外部調(diào)用的。因此,函數(shù)存儲類型 extern 可以省略,表示是外部函數(shù)。static 用來表示函數(shù)存儲類型時,表示內(nèi)部函數(shù),不能從外部文件調(diào)用。
新聞標(biāo)題:c語言中的函數(shù)問題 c語言函數(shù)經(jīng)典題目
網(wǎng)頁URL:http://jinyejixie.com/article26/ddoigcg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、、網(wǎng)站排名、手機網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)