c语言中tran函数 c语言tro

c语言函数与指针;实现sin,cos,tan的求值这个需要用函数指针实现.
这几个函数都是 double sin(double)的形式, 所以函数指针为 double(*pfun)(double)
于是 结果如下:
#include math.h
double execute (double x, double (*func)(double))
{
double temp;
temp = 0;//这里的temp没有实际作用.
return ((*func)(x));
}
main()
{
double (*function[3])(double);
double x=1;
int i;
function[0]=sin;
function[1]=cos;
function[2]=tan;
for (i=0; i3; i++)
printf("func No: %d---%f\n", i+1, execute(x, function[i]));
}
c语言小白,求大神帮忙!void tran(int*);---- 声明tran函数,返回值是void,参数是int *类型
tran(a);-----调用tran函数,参数是数组a
c编程的一个不懂的地方,希望大家帮个忙前面的 tran
double tran(double (*)(double),double (*)(double),double);
是 tran 函数的声明 。告诉编译器有一个这样的函数 , 声明函数的格式
返回类型函数名( 参数1类型,参数2类型);
后边的';'是格式要求
后面的 tran
double tran(double (*f1)(double),double (*f2)(double),double x)
{return (*f1)(x)/(*f2)(x);}
是tran 函数的实现 。
这里 tran 函数 有三个参数,其中
第一个参数: 返回类型为 double指向 带有 一个 double 参数 的 函数的指针;
第二个参数: 返回类型为 double指向 带有 一个 double 参数 的 函数的指针;
第三个参数: double
参数1 参数2传递的不是普通的变量 而是一个函数的入口
调用
y=tran(sin,cos,v); //* *//
是说 tran 的 参数1 参数2 在函数的实现部分 形参1 *f1 形参2 *f2 分别用
double sin(double)和double cos(double) 两个实际的函数代替
(*f1)(x)/(*f2)(x) 实际计算的是 sin(v)/cos(v)
计算的结果是 tan(v)
如果要计算 cot(v)
y=tran(cos,sin,v)
你也可以编写自己的 函数作为实参调用 tran
double myfun1(double x)
{
return exp(-x);
}
double myfun2(double x)
{
return x*x;
}
调用
y=tran(myfun1,myfun2,v);
这个调用计算的是exp(-v)/(v*v)
x 是 一 double型 数值参数
C#中的sin cos不用加角度吗?(C语言 编程)首先要说明,你这个代码不是C#而是C++的,C#不做设置是不可以用指针的 。
其次,你要注意这个tran函数的定义,其中前两个参数是函数指针,而且是具有一个double参数的函数,返回也是double,即 f(x) 格式的函数 。
double tran(double (*f1)(double) , double (*f2)(double) ,double x)
主函数中 , 当执行 y=tran(sin,cos,v)时,sin和cos函数的地址与v一同被传递给tran,然后执行运算后返回给y 。
return (*f1)(x)/(*f2)(x)
注意函数地址传入后是如何被调用的 。进入tran后,sin函数的地址保存在f1 , cos函数地址保存在f2,使用星号取得f1所保存的地址,用括号将x当做f1的参数,此时x即主函数的v值,这就是通过函数指针调用函数的格式,非常有用 , 非常灵活,你要熟练掌握 。f2的调用也是一样,所以其等价与return sin(x)/cos(x) 。
现在理解了不?并非sin,cos不带参数,而是主函数中并没有直接去调用sin和cos,因为tran的前两个参数是函数指针,因此执行tran(sin,cos,v)时,是取sin和cos的函数地址然后传递给tran,在tran里面再将x传递给f1和f2,间接调用sin和cos 。
忘了说明了 , 程序语言中的三角函数的参数不是角度,而是弧度 , 如果你给出的是角度,调用前必须要转换成弧度 , 公式为 弧度=角度 * 3.14/180 。为什么不用角度,为了计算方便,那是数学问题了 。

推荐阅读