您的位置:首页 > 编程语言 > C语言/C++

<C语言>函数作实参传递给另一函数

2017-08-15 22:39 501 查看
/********
题目:编写一个transform()函数,它接受4个参数:包含double类型数据的源数组名,double类型的目标数组名,
表示数组元素个数的int变量以及一个函数名(或者等价的指向函数的指针)。transform()函数把指定的
函数作用于源数组的每个元素,并将返回值放到目标数组中。
作者:wsg
时间:2017年8月15日
********/
//版本一:transform()函数接受函数名

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

double transform(double x[], double y[], int a, double func()); //申明transform函数
double squ(double x);  //申明squ函数
double cub(double x);  //申明cub函数

int main(void)
{
int a;
printf("请输入数组x元素个数:\n");
scanf("%d", &a);

//定义数组x和y
double x[a];
double y[a];

//输入数组x[]的元素
printf("请输入%d个数组元素(小数):\n", a);
for(int j=0; j<a; j++)
{
scanf("%lf", &x[j]);
}

//传递sin函数
transform(x, y, a, sin);//调用transform函数
printf("sin输出结果为:\n");
for(int i=0; i<a; i++)
{
printf("y[%d]=sin(x[i])%lf\n", i, y[i]);
}

//传递cos函数
transform(x, y, a, cos);
printf("cos输出结果为:\n");
for(int i=0; i<a; i++)
{
printf("y[%d]=cos(x[i])%lf\n", i, y[i]);
}

//传递自定义平方函数
transform(x, y, a, squ);
printf("squ输出结果为:\n");
for(int i=0; i<a; i++)
{
printf("y[%d]=squ(x[i])%lf\n", i, y[i]);
}

//传递自定义立方函数
transform(x, y, a, cub);
printf("cub输出结果为:\n");
for(int i=0; i<a; i++)
{
printf("y[%d]=cub(x[i])%lf\n", i, y[i]);
}

return 0;
}

double transform(double x[], double y[], int a, double func())  //定义transform函数
{
int i;
for(i=0; i<a; i++)
{
y[i] = func(x[i]);
}
return y[i];
}

double squ(double x) //定义squ函数
{
return x*x;
}

double cub(double x)  //定义cub函数
{
return x*x*x;
}




/********
版本二:transform()函数接受指向函数的指针(函数指针)
********/

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

double transform(double x[], double y[], int a, double (*func)()); //申明transform函数
double squ(double x);  //申明squ函数
double cub(double x);  //申明cub函数

int main(void)
{
int a;
printf("请输入数组x元素个数:\n");
scanf("%d", &a);

//定义数组x和y
double x[a];
double y[a];

//输入数组x[]的元素
printf("请输入%d个数组元素(小数):\n", a);
for(int j=0; j<a; j++)
{
scanf("%lf", &am
4000
p;x[j]);
}

//传递sin函数
transform(x, y, a, sin);//调用transform函数
printf("sin输出结果为:\n");
for(int i=0; i<a; i++)
{
printf("y[%d]=sin(x[i])%lf\n", i, y[i]);
}

//传递cos函数
transform(x, y, a, cos);
printf("cos输出结果为:\n");
for(int i=0; i<a; i++)
{
printf("y[%d]=cos(x[i])%lf\n", i, y[i]);
}

//传递自定义平方函数
transform(x, y, a, squ);
printf("squ输出结果为:\n");
for(int i=0; i<a; i++)
{
printf("y[%d]=squ(x[i])%lf\n", i, y[i]);
}

//传递自定义立方函数
transform(x, y, a, cub);
printf("cub输出结果为:\n");
for(int i=0; i<a; i++)
{
printf("y[%d]=cub(x[i])%lf\n", i, y[i]);
}

return 0;
}

double transform(double x[], double y[], int a, double (*func)())  //定义transform函数
{
int i;
for(i=0; i<a; i++)
{
y[i] = func(x[i]);
}
return y[i];
}

double squ(double x) //定义squ函数
{
return x*x;
}

double cub(double x)  //定义cub函数
{
return x*x*x;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: