两个表达式分别用两个递归函数来实现。
目前成都创新互联已为近1000家的企业提供了网站建设、域名、网络空间、网站托管、服务器租用、企业网站设计、邻水网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
所以,题目中两个表达式的描述,就是告诉你不同情况下的函数返回值。
之后根据题意,主函数通过函数指针调用,函数指针就是指向函数的指针。把两个函数分别赋值给指针,再通过指针调用函数。
下面是代码:
#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);
}
在程序中出现函数名时,要注意区分以下三种情况:
1. main函数中的int max(int x,int y); 是函数的声明,一般格式为 返回值 函数名(参数类型 参数);
2. max(a,b)为函数的调用,一般格式为 函数名(参数);
3. 后面的max(int x,int y){ ...}是函数的定义,一般格式为 返回值 函数名(参数类型 参数){函数体}
c语言规定,在一个函数定义之前调用它,需要提前进行声明。
原因是,如果没有声明函数,当程序运行到max(a,b)时,由于后面的函数定义还没有被读到,所以计算机并不知道max是个什么东西,程序就会出错。
如果将函数定义提到main函数的前面,就无需进行声明了,程序也不会报错。
#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带入两个式子中,条件都满足,为什么结果是6而不是5,谢谢
}
int main()
{
printf("%.1f",f(5.0,7.0));
}
来,开始了:主程序中,函数参数为 5.0,7.0.看回函数体:
double f(double x,double y)//第一次从程序调用函数时,x=5.0,y=7.0
{ if(x=y) //xy成立吗?不成立,跳过下面一步,转到else部分
return (x+y)/2.0;
else //执行这里
return f(f(x+2,y-1),f(x+1,y-2)) //这里返回什么?返回函数f(f(x+2,y-1),f(x+1,y-2))的结果,将前面x=5.0,y=7.0代入,化简,即要返回f(f(7.0,6.0),f(6.0,5.0)).这个结果包含两个函数参数:f(7.0,6.0),f(6.0,5.0).也就是说,这个结果要用这两个函数的结果去做参数进行调用自身,得出的结果才能返回给主程序.
//先看第一个参数:f(7.0,6.0),将x7.0,y=6.0代入调用函数体,明显,符合xy,执行if部分的内容返回(x+y)/2.0=6.5
//第二个参数:f(6.0,5.0),同样,满足xy,执行if内容,返回(x+y)/2.0=5.5
//即第一次运行函数时,返回f(6.5,5.5).再代入函数体,又有xy成立,执行if部分
//结果是,返回 (x+y)/2.0=(6.5+5.5)/2.0=6.0
}
//重点是递归函数.建议好好理解一下递归的意义
C/C++语言中,默认情况下,函数时可以从文件外部调用的。因此,函数存储类型 extern 可以省略,表示是外部函数。static 用来表示函数存储类型时,表示内部函数,不能从外部文件调用。
新闻标题:c语言中的函数问题 c语言函数经典题目
网页URL:/article26/ddoigcg.html
成都网站建设公司_创新互联,为您提供响应式网站、、网站排名、手机网站建设、网站导航、网站制作
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联