一道用C语言补充函数,要求求出正弦函数和平方根函数。里面有详细的要求。求助C语言的大佬们,急!

按要求完成正弦函数和平方根函数的编写(1)SIN()函数:根据级数公式sin (x)= ∑(-1)^n*x^(2k+1)/(2k+1)!,求正弦函数值,当 求和项的绝对值小于精度eps的时候即 |(-1)^n*x^(2k+1)/(2k+1)!|<eps,停止求和。(2)SQRT()函数:根据迭代公式X(n+1)=1/2[X(n)+a/X(n)],求x的平方根,当相邻两项差的绝对值小于精度,即|X(n+1)-X(n)|<eps的时候,停止迭代。
下面是函数,函数只能在begin和end之间填写,并且程序只能在里面有改动:
#include<stdio.h>
#include<math.h>
int main()
{
double SIN(double x,double eps);
double SQRT(double x,double eps);
double x,eps1=1.e-3,eps2=1.e-3;
printf("input x \n");
scanf("%lf",&x);
printf("SIN(%g)=%f \n",x,SIN(x,eps1));
printf("sin(%g)=%f \n",x,sin(x));
printf("SQRT(%g)=%f \n",x,SQRT(x,eps2));
printf("sqrt(%g)=%f \n",x,sqrt(x));
return 0;
}
double SIN(double x,double eps)
{
/**************begin*************/

/**************end***************/
}
double SQRT(double x,double eps)
{
/**************begin*************/

/**************end***************/
}

#include <stdio.h>
#include <math.h>

int main () {
double SIN (double x, double eps);
double SQRT (double x, double eps);
double x, eps1=1.0e-3, eps2=1.0e-3;

printf ("input x \n");
scanf ("%lf", &x);
printf ("SIN(%g)=%f \n", x, SIN(x,eps1));
printf ("sin(%g)=%f \n", x, sin(x));
printf ("SQRT(%g)=%f \n", x, SQRT(x,eps2));
printf ("sqrt(%g)=%f \n", x, sqrt(x));
return 0;
}

double SIN (double x, double eps) {
double sum = 0;
int sign = 1; /* 控制正负符号,初值为正 */
double f = 1; /* f = (2n+1)!,初值为1 */
double t = x; /* t = sign * x^(2n+1) / f,初值为x */
int i;
for (i=1; fabs (t)>=eps; i+=2) {
if (i>1) /* 第1项之后,f累乘i*(i-1) = i! = (2n+1)! */
f *= i*(i-1);
t = sign * pow (x, i) / f;
sum += t;
sign *= -1;
}
return sum;
}

double SQRT(double x, double eps) {
double x0, x1;
x0 = x / 2.0; /* x0取S/2 */
x1 = (x0 + x/x0) / 2.0;
do {
x0 = x1;
x1 = (x0 + x/x0) / 2.0;
}
while (fabs (x1-x0) >= eps);
return x1;
}

如有疑问,可点击头像联系我~~

温馨提示:答案为网友推荐,仅供参考
相似回答