作业帮 > 综合 > 作业

求余弦函数的近似值 求纠错

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/12 15:59:21
求余弦函数的近似值 求纠错
请纠错,不要给出一大段别人的正确的代码……
输入一个正整数 repeat (0
#include "stdio.h"
#include "math.h"
double fact(int n)
{
 double i,sum=1;
 for(i=2;i<=n;i++) 
  sum*=i;
 return sum;
}
double funcos(double e, double x)
{
     int i,m=1;//加一个标志位,在1和-1之前变换
     double sum=0,fenzi,fenmu,t;//这儿,你的sum没初值,结果必然是错的,初始化为0
     for(i=0;;i+=2)
     {
          fenzi=pow(x,i);
          fenmu=fact(i);
          t=m*fenzi/fenmu;
          if(fabs(t)<e)   // 由于存在负号,所以求绝对值 if(t<e) 
           break;
          sum+=t;
          m=-m;
          //加正项去负项的做法有问题 if((i+4)%4==0) sum+=t;
          // else sum-=t;
    }             
    return sum;
}
int main(void)
{
 int repeat, ri;
 double e, sum, x; 
 
 scanf("%d", &repeat);   
 for(ri = 1; ri <= repeat; ri++)
 {
      scanf("%lf%lf", &e, &x);//double类型最好用%lf 格式控制scanf("%le%le",&e,&x);
      sum=funcos(e,x);
      printf("sum = %f\n", sum);
 }
}
结果:


 你的样例1输出是错的
cos(0)==1
sin(0)==0才是对的哦
 
       
再问: ���Ǹ�������������ݣ����= =��1��û�б�����ʼ����ȷ��©�ˣ�����ʵ��������û��Ӱ������2������Ҫ����ֵ�ģ���Ϊ��ʽ��ȫ��ż��η�����Դ��ڵ���0��3��������ȥ���������������������أ�����i��0.2.4.6.....�������0.4.8.12...����2.6.10...�Ǹ������mod4Ӧ���ǿ��Ե���4����������������Ŀ�и����������ճ�����׷��50��
再答: 改一个地方,如果你想全输入完再全输出,还需要动态分配内存的做法#include "stdio.h"#include "math.h"double fact(int n){     double i,sum=1;     for(i=2;i<=n;i++)       sum*=i;     return sum;}double funcos(double e, double x){     int i,m=1;     double sum=0,fenzi,fenmu,t;     for(i=0;;i+=2)     {          fenzi=pow(x,i);          fenmu=fact(i);          t=m*fenzi/fenmu;          if(fabs(t)<e)             {                sum+=t;//中止循环前,再加一次。               break;           }              sum+=t;          m=-m;     }                   return sum;}int main(void){     int repeat, ri;     double e, sum, x;           scanf("%d", &repeat);         for(ri = 1; ri <= repeat; ri++)     {          scanf("%lf%lf", &e, &x);          sum=funcos(e,x);          printf("sum = %.6lf\n", sum);     }} 动态内存分配,改main就行:#include "stdio.h"#include "math.h"#include "stdlib.h"int main(void){           int repeat, ri,co;          double e, sum,x,**input,*output;            scanf("%d", &repeat);             input=(double **)malloc(sizeof(double *)*repeat);      for(co=0;co<repeat;co++)          input[co]=(double *)malloc(sizeof(double)*2);      output=(double *)malloc(sizeof(double)*repeat);      for(ri=0;ri<repeat;ri++)         for(co=0;co<2;co++)            scanf("%lf", &input[ri][co]);      for(ri=0;ri<repeat;ri++)      {          *(output+ri)=funcos(input[ri][0],input[ri][1]);          printf("sum = %.6lf\n", *(output+ri));      }      free(output);      free(input); }