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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值