/********
题目:编写一个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", &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;
}