1 题目
编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n(利用指针函数)。
2 分析
首先判断n的奇偶性,通过if控制语句对2取余来判断,再根据n的奇偶性调用不同的计算方法,这里把两个计算方法写成两个函数,不难发现累加的规律为当n为偶数时,所有累加项都是以1为分子,分母是从2开始的偶数序列;当n为奇数时,所有累加项分子也是1,分母则是从1开始的奇数序列。
注:本题使用函数指针来实现。
3 实现
#include <stdio.h>
#include <stdlib.h>
double evenumber(int n);
double oddnumber(int n);
int main()
{
int n;
double sum;
double (*pfunc)(int); // 定义函数指针
printf("请输入n:");
scanf("%d", &n);
if (n % 2 == 0) { // 判断奇偶
pfunc = evenumber; // 偶数函数
} else {
pfunc = oddnumber; // 奇数函数
}
sum = (*pfunc)(n); // 通过指针调用函数
printf("%lf\n", sum);
return 0;
}
// 当n为偶数时
double evenumber(int n)
{
double s = 0; // 累加和
double a = 0; // 保存每一项的临时变量
for (int i = 2; i <= n; i += 2) {
a = (double)1/i; // 该除法会出现小数,所以要强制转换
s += a; // 累加
}
return s;
}
// 当n为奇数时
double oddnumber(int n)
{
double s = 0; // 累加和
double a = 0; // 保存每一项的临时变量
for (int i = 1; i <= n; i += 2) {
a = (double)1/i; // 该除法会出现小数,所以要强制转换
s += a; // 累加
}
return s;
}
4 运行结果
PS E:\C++WorkSpace> cd "e:\C++WorkSpace\" ; if ($?) { g++ FFF.cpp -o FFF } ; if ($?) { .\FFF }
请输入n:10
1.141667
PS E:\C++WorkSpace> cd "e:\C++WorkSpace\" ; if ($?) { g++ FFF.cpp -o FFF } ; if ($?) { .\FFF }
请输入n:51
2.610834
本文介绍了一个使用函数指针实现的C语言程序,根据输入的整数n,选择调用不同的函数来计算偶数序列或奇数序列的倒数和。程序通过判断n的奇偶性,调用相应的函数进行累加运算,展示了函数指针在实际编程中的应用。
1557

被折叠的 条评论
为什么被折叠?



