c语言的函数问题?

编写两个函数,分别求两个数列的第N项的值,请在主函数中使用指向函数的指针调用这两个函数,以实现接口的一致性。这两个数列的数学表达分别是:① f(0)=1,f(1)=2,f(n)=2*f(n-1)+f(n-2) ②f(0)=0,f(1)=1,f(n)=f(n-1)+2*f(n-2)

两个表达式分别用两个递归函数来实现。

所以,题目中两个表达式的描述,就是告诉你不同情况下的函数返回值。

之后根据题意,主函数通过函数指针调用,函数指针就是指向函数的指针。把两个函数分别赋值给指针,再通过指针调用函数。

下面是代码:

#include <stdio.h>

int fn1(int n);

int fn2(int n);

int main()

{

    int k=3,n=-1,(*p)(int n);

    while(n<0)

        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个回答  2020-05-23
可以不写,但是要把你的自定义函数写在主函数前面才行。
就是说把Z的值返回到主函数,本例中就是把Z的值返回给C。
第2个回答  2020-05-03
不能不写的,否则当编译器编译到你main函数时,由于还没编译到下面的max定义。
所以它找不到max到底是什么符号。
一般申明都写在函数后面的,否则,出了main外,其他函数看不到max的申明的。
return(z)有什么不了解的吗
return
(z)就是max返回给调用者的,c
=
max(a,b)表示c接收了max的返回值z,这里相当于c=z
第3个回答  2020-05-01
{
float
y;
if(z==0)
y=1;
else
y=sin(z)/z
;
return(y);
}
在其中Y为float型,而z为double型,运算过程中发生强制转换
第4个回答  2020-04-28
因为你这样处理的话,(2*i-1)/(2*n)这个会变成整形处理,所以会是0。如果你想输出的是f(0.5)要强制类型转换
#include<stdio.h>
#include<math.h>
void
main()
{
int
i,n;double
sum;
double
f(double
z);
sum=0;
n=1;for(i=1;i<=n;i++)
sum+=f((2*(double)i-1)/(2*(double)n));
printf("%e",sum);
}
double
f(double
z)
{
float
y;
if(z==0)
y=1;
else
y=sin(z)/z
;
return(y);
}
这样就能输出f(0.5)了
相似回答