提高篇第2-5课第七题

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define pi 3.1415926
//第七题
double mysin(double x);
double myabs(double x);
int main( )
{
    printf("sin(π/2)的值为%.5f\n", mysin(pi/2));
    printf("sin(56°)的值为%.5f\n", mysin(56*pi/180));
    return 0;
}//下面定义mysin函数,求sin值

double mysin(double x)
{
    int i=3,n=-1;
    double t=x;
    double sin=x;
    double fact=1;
    printf("%lf\n",sin);
    while(myabs(t)>=1e-5)
    {
        fact*=i*(i-1);
        t*=(n*x*x)/fact;
        sin+=t;
        i+=2;
        n=-n;
    }
    return sin;
}

//下面定义myabs函数

double myabs(double x)
{
    double r;
    if(x>=0)
        r=x;
    else
        r=-x;
    return r;
}

上述代码存在着错误,编写的时候有点恍惚了,没有仔细调试,下面给出老师给出的标准代码

#include<stdio.h>
#define pi 3.1415926
double mysin(double x);
double myabs(double x);
int main( )
{
    printf("sin(π/2)的值为%.5f\n", mysin(pi/2));
    printf("sin(56°)的值为%.5f\n", mysin((56.0/180)*pi));
    return 0;
}
//下面定义mysin函数,求sin值
double mysin(double x)
{
    double sum=x,x_pow=x,item,fact=1;
    int n=1,sign=1;     //定义变量时赋初值,已经将第一项考虑到累加和sum中
    do
    {
        fact=fact*(n+1)*(n+2);  //fact用于表示阶乘,在公式中作分母
        x_pow*=x*x;             //x_pow是分子中用于表示阶乘,在公式中作分母
        sign=-sign;             //确定即将要累加的这一项的符号
        item =x_pow/fact*sign; //计算出要累加的项
        sum+=item;              //将该项累加上去
        n+=2;
    }while(myabs(item)>1e-5);
    return sum;
}

//下面定义myabs函数
double myabs(double x)
{
    return ((x>=0)?x:-x);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值