C语言经典例76-根据n的奇偶性累加

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
发布了125 篇原创文章 · 获赞 199 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/syzdev/article/details/104390283