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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值