郑州轻工业大学oj题解(c语言)1053:|郑州轻工业大学oj题解(c语言)1053: 正弦函数
好几天没写题解了,今天难得没事,就回归下正途吧~1053是一道相对比较困难的题目,错误率是比较高的,那么就以这道题目来作为今天的题解吧
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,需要我们在循环中完成。
- 循环次数因固定为10次,因为题目只要计算前10项的和。
- y的初始值都为1,我们需要给他赋值。
- y的变化是在计算完毕后,所以我们在循环最后才完成增加。
- 每次循环都需要把这一项的值加入总和,也就是sum。
- 符号每次计算都会变化,或+ 或- ,我们这里用可以用1或者-1来代替符号,方便计算。
- 另外,分子是会不断变化的,所以我们输入的x是不能直接用于计算的,要赋值于第一个分子。
至于deno = deno *(2 * i) * ( 2 * i + 1); 是阶乘的公式,如果不了解数学概念的可以看一下百科→https://baike.so.com/doc/5636551-5849178.html
推荐阅读
- 螃蟹和这些食物同吃,轻则腹泻、重则中毒!要小心哦~
- 慢煮岁月,浅思淡行
- 年轻人,干了孤独这杯酒
- 松软可口易消化,无需烤箱超简单,新手麻麻也能轻松成功~
- 年轻人对未来迷茫时该怎么办()
- 私有化轻量级持续集成部署方案--03-部署web服务(下)
- 生命中最迷人的部分轻拿轻放
- 知若不知
- 年轻的我们应该享受还是奋斗()
- 医生随笔(232)不要轻易得罪底层人