易百教程

编写程序来实现算术和数组函数

实现原型函数:

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()函数时,该函数将元素与交替符号组合在一起。因此,对于具有四个元素x1x2x3x4的数组,它计算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