C Primer Plus 第十四章 编程练习11

作者在 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);
}
文章评论,共0条
游客请输入验证码
浏览39534次