来源|奔跑的键盘侠(ID:runningkeyboardhero)
转载请联系授权(微信ID:ctwott)
搬砖继续……
不过今天的题目有点升级,直接跳到了四年级,其实难度上都属于入门,只不过是题型变了。
年级只是代表题型,难度不做区分。规则简要做个说明吧:
一年级:选择题;
二年级:填空题;
三年级:阅读题;
四年级: 编程题。
这一期也是有点赶进度的味道,上周有小伙伴讨论到这个题目,我感觉有点吃力,毕竟刚学没多久,连变量类型都还没搞清楚,函数什么的就更别说了。
本想等过一两周再说,恰逢背到Taylor这个单词,一时兴起,那就搞起
第1题
说起泰勒,不禁遥想到当年的罗尔、拉格朗日、皮亚诺、麦克劳林等一干人物
总之,没一个好搞的。
关于这道题目,不难,但也不简单,需要足够的耐心,非常多的细节需要去注意。
比如变量类型,-7次方用float已经不够了,需要用double类型变量(其实变量类型的坑不止这个一个,写出来容易调试起来简直要炸了);
再比如正负项的系数变化;各项x的次数以及分母的阶乘;
最后一个多项式作为循环的分界点;
还有累计算了多少项要计数。
弧度这块没来及研究,暂时假设输入值为-pi到pi吧
#include <stdio.h>
#include <math.h>
int main()
{
int cnt=0;
double sign=1.0;
double sum=0.0;
double monomial;
double x;
printf("Please input the value of x:\n");
scanf("%lf",&x);
do{
int index=2*cnt+1;
long int factor=1;
int i;
for(i=1;i<=index;i++){
factor*=i;
}
monomial=sign*pow(x,index)/factor;
sign=-sign;
sum+=monomial;
cnt++;
}while(fabs(monomial)>1e-7);
printf("sin(%lf) = %.10lf\n",x,sum);
printf("There are %d monomials calculated in all.\n",cnt);
return 0;
}
上面可以作为题目的答案吧。
实际调试代码略有不同,因为用的sublime text,不能使用scanf输入,就直接给x赋值了pi/2,调试时多加了几个printf。截图如下:
欢迎各位大佬批评指点一二。
-END-