《C语言入门经典》Ivor Horton第九章练习题

</pre><pre name="code" class="cpp">//习题9.2 实现函数原型:
//double add(double a,double b);      //Returna a+b
//double subtract(double a,double b); //Returna a-b
//double multiply(double a,double b); //Returna a*b
//double array_op(double array[],size_t size,double(*pfun)(double,double));
//array_op().函数的参数是:要运行的数组、数组元素数目以及一个函数指针
//,该函数指针指向的函数定义了在连续几个元素上应用的操作。在实现array_op()函数时,
//将subtract()函数传送为第三个参数,subtract()函数会用交替符号组合这些元素。
//因此,对于有4个元素x1、x2、x3、x4的数组,subtract()函数会计算x1-x2+x3-x4的值。
//乘法运算则得到这些元素之积x1*x2*x3*x4。
//		用适当的main()版本演示这些函数的运作。
#include<stdio.h>
double add(double a,double b);
double subtract(double a,double b);
double multiply(double a,double b);
double array_op(double array[],size_t size,double (*pfun)(double,double));
int k=0;
int main(void)
{
	double a=0.0;
	double b=0.0;
	size_t size=0;
	double result=0.0;
	int i=0;
	int j=1;
	char y;
	double(*pfun)(double,double);
	double *array=NULL;
	array=(double*)malloc(j*8);
	do
	{
		printf("\n1");
		if(i>=j)
		{
			j++;
			array=(double*)realloc(array,j*8);
		}
		printf("\n2");
		scanf("%lf",&array[i++]);
		printf("\n3");

	}while((y=getchar())!='\n');
	for(int j=0;j<i;j++)
		printf("\n%lf",array[j]);
	pfun=add;
	
	result=array_op(array,i,pfun);
	printf("\nin add result=%lf",result);
	pfun=subtract;

	result=array_op(array,i,pfun);
	printf("\nin subtract result=%lf",result);
	pfun=multiply;

	result=array_op(array,i,pfun);
	printf("\nin multiply result=%lf",result);
	return 0;
}
double add(double a,double b)
{
	
	return b+a;
}
double subtract(double a,double b)
{
	
	return b-a;
}

double multiply(double a,double b)
{
	
	return b*a;
}
double array_op(double array[],size_t size,double (*pfun)(double ,double))
{
	--size;

	if(size<=0)
	{
	
		return array[size];
	}
	
	return pfun(array[size],array_op(array,size,pfun));
}

你可能感兴趣的:(函数,递归,C语言)