求注一道 C 语言题目 我想问 一些 细节 求大神解答

发布网友

我来回答

3个回答

热心网友

#include<stdio.h>
#include<math.h>

float fun(int,int);//函数定义在主调函数之后,需要在主调函数前加声明
int m(int);

int main()
{
int n,x,a;
scanf("%d%d",&n,&x);//scanf里不要加\n !!
a=2*n-1;
printf("%f\n",fun(a,x));//输出为%f
return 0;
}

float fun(int a,int x)
{
float t;

if(a==1)
t=x;
else
t=pow(x,a)/m(a)+fun(a-2,x);

return t;
}

int m(int a)
{
//不需要设置一个变量,浪费空间
if(a==1)
return 1;//1的时候返回的应是1,1!=1
else
return a*m(a-1);
}

你在fun函数中使用t=x,但你并未把x传递给fun函数,这个时候你有两个选择,第一,将x设为全局变量,第二,给fun函数增加一个形参,把x传递给它。


求x的a次方不能用a*x,也不能用a^x,必须使用pow函数,使用pow函数需要加上头文件<math.h>。


函数返回变量会自行创建副本,不需要额外设置一个变量用来返回特定值。


另外这里float fun(int a,int x)如果觉得float精度不够可以改成double,你讲代码中的float全改成double就可以了。


没有实验数据,无法验证程序是否有逻辑错误,楼主自行验证,如有问题,可Hi我。


2013 6 17 6:22

唐明Cpp

热心网友

把你的程序改好如下:
#include <stdio.h>
double fun(double a,double x);
double m(double a);
int main()
{
double n,x,a;
scanf("%lf%lf",&n,&x);
a=2*n-1;
printf("%lf\n",fun(a,x)/m(a));
}
double fun(double a,double x)
{
double t;
if(a==1||a==0)t=x;
else t=x*fun(a-1,x);
return t;
}
double m(double a)
{
double d;
if(a==1||a==0) d=1;
else d=a*m(a-1);
return d;
}

热心网友

你的代码中没有看呀?我按照自己的理解把代码重写了一下:
double fun(int a)
{
double t;
if(a==1)
t=(double)x;
else
t=x^a/(double)m(a)+fun(a-2);
return t;
}
long m(int a)
{
long d;
if(a==1)
d=1;
else
d=a*m(a-1);
return d;
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com