1099 分数数列求和(2)(用for和while循环)

题目描述

给定一个正整数n,计算1+1/3+1/5….的前n项之和。

输入要求

输入一个正整数n(n<100)

输出要求

输出前n项之和,保留2位小数。

输入样例

5

输出样例

1.79

思路:可转化为数学学过的数列,寻找分母的规律为2*n-1

解析:

1.方法一(用while循环)
#include<stdio.h> 
#include<math.h> 
 
int main() 

    int n,i=1; 
    double a,s=0; 
 
    scanf("%d",&n); 
    while(i<=(2*n-1)) //i表示每一项的分母,因为是在循环中递增,所以是小于等于2*n-1,到分母i=2*n-1时,循环结束这一步后停止,因为i大于2*n-1时,括号里为假,跳出循环
    { 
        a=1.0/i; //a表示数列第几项的值
        s+=a; //对应a是第几项的值,s表示前几项的和(初始赋值为0
        i=i+2; //根据数学数列推导出的分母递增规律(这一步也可以写成i+=2)
    } 
    printf("%.2f\n",s); //保留两位小数输出
    return 0; 
}

(math头文件应该加不加都行

2.方法二(用for循环)
#include<stdio.h>
int main(){
    int n,i;
    double s=0;
    scanf("%d",&n);
    for(i=1;i<=2*n-1;i++)//i表示数列每一项的分母
    {
        if(i%2!=0) //当i除以2取余不等于0时(这一步是为了寻找符合题意的分母)
        s+=1.0/i;//相加求和
    }
    printf("%.2f\n",s);
    return 0;
}

for循环没有多用一个字符a表示每一项的值,这一个字符有没有都行

(所以说白了,突然感觉好简单,就是这东西就是先把每个数对照着数学运算表示出来
(等等这个题好像也可以用递归,但是相对麻烦感觉,不过还是不要用递归了,,


类比推理,
如果是分母递减的数列,计算1/(2*n-1)+1/[2*(n-1)-1]+...+1/5+1/3+1的和
等等,这样的话其实还是把上面的倒过来了啊,颠倒了个个

参考代码:

1.方法一

#include<stdio.h> 
#include<math.h> 
 
int main() 

    int n,i=1; 
    double a,s=0; 
 
    scanf("%d",&n); 
    while(i<=(2*n-1)) 
    { 
        a=1.0/i;
        s+=a; 
        i=i+2; 
    } 
    printf("%.2f\n",s);
    return 0; 
}

2.方法二

#include<stdio.h>
int main(){
    int n,i;
    double s=0;
    scanf("%d",&n);
    for(i=1;i<=2*n-1;i++)
    {
        if(i%2!=0)
        s+=1.0/i;
    }
    printf("%.2f\n",s);
    return 0;
}

(如有错误请在评论区指出

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值