PTA | 习题2-3 求平方与倒数序列的部分和 (15分)

2021-06-09 23:59:01 浏览数 (1)

一、题目描述

本题要求对两个正整数m和n(m≤n)编写程序,计算序列和

{m^2}

1/m

{(m 1)^2}

1/(m 1) ⋯

{n^2}

1/n。

输入格式:

输入在一行中给出两个正整数m和n(m≤n),其间以空格分开。

输出格式:

在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。

输入样例:

5 10

输出样例:

sum = 355.845635

二、思路分析

博主刚看到题目,感觉有些不理解。多读了几遍,发现一点都没有难度,就是把公式:

{m^2}

1/m

{(m 1)^2}

1/(m 1) ⋯

{n^2}

1/n 转化成对应的代码罢了。转化代码如下:

代码语言:javascript复制
double sum=0.0;
int i;
for(i=m; i<=n; i  )
{
    sum =pow(i,2) 1.0/i;
}

其中,pow()为次幂函数,具体解释和使用请看这篇文章:《练习2-6 计算物体自由下落的距离 (5分)》

需要注意的是,公式中的 m 作为分母,如果在题目中没有说明 m 和 n 是正整数的话,就得保证 m,n 不为0。就像下面这样:

代码语言:javascript复制
double sum=0.0;
int i;
for(i=m; i<=n; i  )
{
    if(i != 0)
    {
        sum =pow(i,2) 1.0/i;
    }

}

当然本题中明确说明 m,n 是正整数,就不需要考虑分母可能会出现0的情况了。

三、参考代码

根据以上分析,给出参考代码如下:

代码语言:javascript复制
#include<stdio.h>
#include <math.h>
int main()
{
    int m,n;
    scanf("%d %d",&m,&n);
    double sum=0.0;
    int i;
    for(i=m; i<=n; i  )
    {
        sum =pow(i,2) 1.0/i;
    }
    printf("sum = %.6lfn",sum);
    return 0;
}

sum

0 人点赞