实现原型函数:
double add(double a, double b); // Returns a+b
double subtract(double a, double b); // Returns a-b
double multiply(double a, double b); // Returns a*b
double array_op(double array[], size_t size, double (*pfun)(double,double));
array_op()
函数的参数是:
- 要操作的数组,
- 数组中元素的数量,
- 指向定义要在连续元素之间应用的操作的函数的指针。
当传入subtract()
函数时,该函数将元素与交替符号组合在一起。因此,对于具有四个元素x1
,x2
,x3
和x4
的数组,它计算x1 - x2 + x3 - x4
的值。
例如,对于乘法,它只是元素x1 * x2 * x3 * x4
的乘积。
实现代码
#include <stdio.h>
double add(double a, double b); // Returns a+b
double subtract(double a, double b); // Returns a-b
double multiply(double a, double b); // Returns a*b
double array_op(double array[], size_t size, double(*pfun)(double, double));
int main(void)
{
double array[] = { 11.0, 10.0, 9.0, 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0 };
int length = sizeof array / sizeof(double);
printf("The value of:\n");
for (int i = 0; i < length; i++)
{
printf("%.2lf%s", array[i], (i < length - 1 ? " + " : "\n"));
}
printf(" is %.2lf\n", array_op(array, length, add));
printf("\n它们的值如下:\n");
for (int i = 0; i < length; i++)
{
printf("%.2lf%s", array[i], (i < length - 1 ? (i % 2 == 0 ? " - " : " + ") : "\n"));
}
printf(" is %.2lf\n", array_op(array, length, subtract));
printf("\nThe value of:\n");
for (int i = 0; i < length; ++i)
{
printf("%.2lf%s", array[i], (i < length - 1 ? " * " : "\n"));
}
printf(" is %.2lf\n", array_op(array, length, multiply));
return 0;
}
// 计算 a+b 的值
double add(double a, double b)
{
return a + b;
}
// 计算 a-b 的值
double subtract(double a, double b)
{
return a - b;
}
// 计算 a*b 的值
double multiply(double a, double b)
{
return a * b;
}
// 在连续的元素对之间应用操作 pfun 的函数
double array_op(double array[], size_t size, double(*pfun)(double, double))
{
double result = array[size - 1];
size_t i = 0;
//从最后一个到第一个,以适应减去的交替标志
for (i = size - 1; i > 0; i--)
result = pfun(array[i - 1], result);
return result;
}
执行上面示例代码,得到以下结果:
The value of:
11.00 + 10.00 + 9.00 + 8.00 + 7.00 + 6.00 + 5.00 + 4.00 + 3.00 + 2.00 + 1.00
is 66.00
它们的值如下:
11.00 - 10.00 + 9.00 - 8.00 + 7.00 - 6.00 + 5.00 - 4.00 + 3.00 - 2.00 + 1.00
is 6.00
The value of:
11.00 * 10.00 * 9.00 * 8.00 * 7.00 * 6.00 * 5.00 * 4.00 * 3.00 * 2.00 * 1.00
is 39916800.00