编写一个函数,输入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_number
或is_odd_number
函数,这取决于我们想要计算哪个序列的和。
is_even_number
函数检查一个数是否为偶数,而is_odd_number
函数检查一个数是否为奇数。这两个函数都返回一个整数,如果传入的数是偶数或奇数,则返回非零值,否则返回0。
在main
函数中,我们首先读入一个正整数n
,然后使用条件判断来调用calculate_sum
函数,并将适当的奇偶判断函数作为参数传递。calculate_sum
函数则遍历序列并累加符合条件的项,最终返回序列的和。
请注意,这段代码没有处理n
小于或等于0的情况,也没有处理可能的整数溢出问题。在实际应用中,你可能需要添加额外的错误检查和边界条件处理。