求余弦函数的近似值 求纠错
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/12 15:59:21
求余弦函数的近似值 求纠错
请纠错,不要给出一大段别人的正确的代码……
输入一个正整数 repeat (0
请纠错,不要给出一大段别人的正确的代码……
输入一个正整数 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); }
#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); }