按要求完成正弦函数和平方根函数的编写(输入一个大于等于0小于30的数进行验证): (a)SIN()函数:根据级数公式sin (x)= ∑(-1)^n*x^(2k+1)/(2k+1)!,求正弦函数值,当 求和项的绝对值小于精度eps的时候即 |(-1)^n*x^(2k+1)/(2k+1)!|<eps,停止求和。(x绝对值比较大的时候,可能会产生溢出,感兴趣的同学可以查找原因并进行修改。) (b)SQRT()函数:根据迭代公式X(n+1)=1/2[X(n)+a/X(n)],求x的平方根,当相邻两项差的
时间: 2023-06-10 18:05:47 浏览: 63
绝对值小于精度eps的时候停止迭代。(注意:如果输入的数不是大于等于0小于30的数,要输出提示信息并重新输入)
以下是我为您准备的代码:
```
#include <stdio.h>
#include <math.h>
#define eps 1e-6
double sin(double x); //声明sin函数
double sqrt(double a); //声明sqrt函数
int main()
{
double x;
int choice;
printf("请选择要计算的函数:1.SIN函数 2.SQRT函数\n");
scanf("%d", &choice);
if (choice == 1) //计算sin函数
{
printf("请输入一个大于等于0小于30的角度值:");
scanf("%lf", &x);
if (x < 0 || x >= 30)
{
printf("输入的数值不在指定范围内!\n");
return 0;
}
printf("sin(%lf) = %lf", x, sin(x));
}
else if (choice == 2) //计算sqrt函数
{
printf("请输入一个大于等于0的数:");
scanf("%lf", &x);
if (x < 0)
{
printf("请输入非负数!\n");
return 0;
}
printf("sqrt(%lf) = %lf", x, sqrt(x));
}
else //选择错误
{
printf("选择错误!\n");
return 0;
}
return 0;
}
double sin(double x)
{
double sum = x, term = x, t = -1;
int n = 1;
while (fabs(term) > eps)
{
t = -t;
n += 2;
term = pow(x, n) / factorial(n);
sum += t * term;
}
return sum;
}
double sqrt(double a)
{
double xn = a / 2, xn1;
do
{
xn1 = 0.5 * (xn + a / xn);
if (fabs(xn - xn1) < eps)
break;
xn = xn1;
} while (1);
return xn1;
}
double factorial(int n)
{
double result = 1;
for (int i = 2; i <= n; i++)
{
result *= i;
}
return result;
}
```
请注意,上述代码中我使用了一个叫做 factorial 的函数,它的作用是计算阶乘。如果您不熟悉阶乘的概念,可以简单理解为:
n! = 1 * 2 * 3 * ... * n
在代码中,我使用一个 for 循环来计算阶乘。如果您有更好的计算阶乘的方式,请随时替换上述代码中的 factorial 函数。