跳到主要内容

编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n(利用指针函数) ?

参考答案:

下面是一个C语言实现的函数,它接受一个整数n作为输入,并使用指针函数来判断n的奇偶性,然后相应地计算并返回序列的和。

#include <stdio.h>

// 函数原型声明
double calculate_sum(int n, int (*is_even)(int));
int is_even_number(int num);
int is_odd_number(int num);

int main() {
    int n;
    printf("Enter a positive integer: ");
    scanf("%d", &n);

    // 根据n的奇偶性调用不同的函数
    if (is_even_number(n)) {
        printf("The sum for even numbers up to %d is: %f\n", n, calculate_sum(n, is_even_number));
    } else {
        printf("The sum for odd numbers up to %d is: %f\n", n, calculate_sum(n, is_odd_number));
    }

    return 0;
}

// 通用计算序列和的函数,通过指针传入判断奇偶性的函数
double calculate_sum(int n, int (*is_even)(int)) {
    double sum = 0.0;
    for (int i = 1; i <= n; i += 2) {
        if (is_even(i)) {
            sum += 1.0 / i;
        }
    }
    return sum;
}

// 判断一个数是否为偶数的函数
int is_even_number(int num) {
    return num % 2 == 0;
}

// 判断一个数是否为奇数的函数
int is_odd_number(int num) {
    return num % 2 != 0;
}

在这个程序中,calculate_sum函数是一个接受整数n和指向函数的指针is_even作为参数的函数。指针is_even可以指向is_even_numberis_odd_number函数,这取决于我们想要计算哪个序列的和。

is_even_number函数检查一个数是否为偶数,而is_odd_number函数检查一个数是否为奇数。这两个函数都返回一个整数,如果传入的数是偶数或奇数,则返回非零值,否则返回0。

main函数中,我们首先读入一个正整数n,然后使用条件判断来调用calculate_sum函数,并将适当的奇偶判断函数作为参数传递。calculate_sum函数则遍历序列并累加符合条件的项,最终返回序列的和。

请注意,这段代码没有处理n小于或等于0的情况,也没有处理可能的整数溢出问题。在实际应用中,你可能需要添加额外的错误检查和边界条件处理。