今天看啥  ›  专栏  ›  缘点点

郑州轻工业大学oj题解(c语言)1053: 正弦函数

缘点点  · 简书  ·  · 2020-01-02 21:29

好几天没写题解了,今天难得没事,就回归下正途吧~1053是一道相对比较困难的题目,错误率是比较高的,那么就以这道题目来作为今天的题解吧


1053: 正弦函数

  • 题目描述


    image.png

    输入x,计算上面公式的前10项和。

  • 输入
    输入一个实数x。
  • 输出
    输出一个实数,即数列的前10项和,结果保留3位小数。
  • 参考代码:
#include<stdio.h>
int main()
{
    int i;
    double x, flag, sum, deno, numerator;
    scanf("%lf",  &x);
    sum = 0.0;
    deno = 1.0; //第一项的分母
    numerator = x; //第一项的分子
    flag = 1.0;  //第一项的符号  
    for(i = 1; i <= 10; i++)
    {
        sum += numerator * flag / deno;  
    //为下一项的计算做准备
        flag = -flag;
        numerator = numerator * x * x;
        deno =  deno *(2 * i) * ( 2 * i + 1);
    } 
    printf("%.3f\n", sum);
    return 0;
}
  • 代码解析:
    这是一道类似数列找规律的题目,在开始做题前,我们要从公式出发进行分析。通过找规律,我们可以明显的分析出公式的规律是,x的y次方/y的阶乘,减或加,x的y+2次方/y+2的阶乘。x 是我们自己输入的实数,属于常量,而y是变量,会不断变化,每次+2,需要我们在循环中完成。

在开始写代码前,我们列出以下几点要素:

  1. 循环次数因固定为10次,因为题目只要计算前10项的和。
  2. y的初始值都为1,我们需要给他赋值。
  3. y的变化是在计算完毕后,所以我们在循环最后才完成增加。
  4. 每次循环都需要把这一项的值加入总和,也就是sum。
  5. 符号每次计算都会变化,或+ 或- ,我们这里用可以用1或者-1来代替符号,方便计算。
  6. 另外,分子是会不断变化的,所以我们输入的x是不能直接用于计算的,要赋值于第一个分子。

读懂以上几点要素,我们便可轻易写出上面的代码了。当然,为了大家阅读方便,我在相应的位置添加了注释。

至于deno = deno *(2 * i) * ( 2 * i + 1); 是阶乘的公式,如果不了解数学概念的可以看一下百科→ https://baike.so.com/doc/5636551-5849178.html




原文地址:访问原文地址
快照地址: 访问文章快照