作者在 2013-05-18 14:36:41 发布以下内容
/*
编写一个transform()函数
它接受4个参数:
double类型数据的源数组名,
double类型数据的目标数组名,
表示数组元素个数的int变量
一个函数名(或者,等价的指向函数的指针)
transform()函数把指定的函数作用于源数组的每个元素,
并将返回值放到目标数组中.
例如: transform(source, target, 100, sin);
这个函数调用把sin(source[0])赋给target[0],等等
共有100个元素.
在一个程序中测试该函数,
调用4次transform(),
分别使用math.h函数库中的两个函数以及自己设计的两适合的函数作为参数.
*/
#include <stdio.h>
#include <math.h>
#define SIZE 100
void transform(const double *, double *, int, double (*p)(double));
double test(double);
int main(void)
{
double source[SIZE];
double target[SIZE];
double (*p)(double) = sin;
int i;
for(i = 0; i < SIZE; i++)
source[i] = i + 1;
transform(source, target, SIZE, p);
for(i = 0; i < SIZE; i++)
{
printf("target[%2d] = %4.2lf\t", i, target[i]);
if((i + 1) % 3 == 0)
printf("\n");
}
printf("\n");
p = cos;
transform(source, target, SIZE, p);
for(i = 0; i < SIZE; i++)
{
printf("target[%2d] = %4.2lf\t", i, target[i]);
if((i + 1) % 3 == 0)
printf("\n");
}
printf("\n");
p = test;
transform(source, target, SIZE, p);
for(i = 0; i < SIZE; i++)
{
printf("target[%2d] = %4.2lf\t", i, target[i]);
if((i + 1) % 3 == 0)
printf("\n");
}
return 0;
}
void transform(const double * source, double * target, int size, double (*p)(double))
{
int i;
for(i = 0; i < size; i++)
target[i] = p(source[i]);
}
double test(double x)
{
const double pi = 3.1415926;
return (x * x * pi);
}