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

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

  • 【郑州轻工业大学oj题解(c语言)1053:|郑州轻工业大学oj题解(c语言)1053: 正弦函数】题目描述

    郑州轻工业大学oj题解(c语言)1053:|郑州轻工业大学oj题解(c语言)1053: 正弦函数
    文章图片
    image.png 输入x,计算上面公式的前10项和。
  • 输入
    输入一个实数x。
  • 输出
    输出一个实数,即数列的前10项和,结果保留3位小数。
  • 参考代码:
#include 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

    推荐阅读