利用sinx,计算sinx的值,直到最后一项的绝对值小于时为止。
首先,分析一下这个题。题目要求得出sinx的近似值,如果对C语言的数学函数有所了解的话,第一时间想到的应该是C语言中已经有了求sinx的函数,函数名为asin,函数模型为double asin(double x)来计算sinx的值。但是应该注意,要在源文件中包含头文件<math.h>且x的范围应在-1到1内。
#include <stdio.h>
#include <math.h>
int main(void)
{
double x;
sin(x);
printf("%lf",sin(x));
return 0;
}
然而这个题目要求我们用循环控制结构的知识来作答,所以我们的思路应该是首先循环计算出1,3,5,7……的阶乘然后表示出每一项的值,再将每一项的值相加得出sinx的近似值。需要解决以下难点:
每一项都需要变换正负
最后一项作为循环终止条件的表示
数学函数的正确运用
下面是我自己思路来编写的程序,希望各位大佬或者同学能给我提出意见*~*
运行后程序有点问题,希望大家可以帮我看看
#include <stdio.h>
#include <math.h>
int main(void)
{
int n=1,i,y=0;//n为内循环循环控制变量,s表示为阶乘
long int s=1;
double x,sum=0,term;//x可能为小数,故将x定义为双精度的浮点数
printf("please input x:");
scanf("%lf",&x);
//printf("%lf\n",x);
while(fabs(pow(x,n)/s)>=1e-5)//循环结束条件为最后一项的绝对值小于10^-5
{
for(i=1;i<=n;i++)//用for循环来求每一项的阶乘
{
s=i*s;
//printf("s=%ld\n",s);
}
//printf("s=%d\n",s);
term=(pow(-1,y))*pow(x,n)/s;//每一项值term
//printf("term=%lf\n",term);
sum+=term;// 记每一项的和
//printf("sum=%lf",sum);
n=n+2;
y++;
s=1;
}
printf("sinx=%lf",sum);
//sin(x);
//printf("%lf", sin(x));
return 0;
}
然后运行后就变成这样了,回车后也不出结果,有点迷茫,小白求指导***
![](https://i-blog.csdnimg.cn/blog_migrate/9402d0f603e503fc22da9c21d5f2d720.png)
下面附上例解供大家一起学习
#include <stdio.h>
#include <math.h>
int main(void)
{
int n=1,count=1;
double x;
double sum,term;
printf("Input x:");
scanf("%lf",&x);
sum=x;
term=x;
do{
term=-term*x*x/((n+1)*(n+2));
sum=sum+term;
n=n+2;
count++;
}while(fabs(term)>=1e-5);
printf("sin(x)=%f,count=%d\n",sum,count);
return 0;
}
本人也是C语言菜鸟一枚,所以非常感谢各位大佬的意见和帮助(还有指出我的错误)!
纯手打,创作不易,感谢大家的支持!
我们共同进步!