提问:C编程找错,求大佬帮忙
请问大佬哪里有问题?运行几次了,都不对,两个答案不一样,求哪位大佬帮忙看看是哪里出问题了?#include #include int mysin(float x){ float sum=0; int i,j; float a[100]; for (i=0;pow(x,2*i+1)/fact(i)>pow(10,-5);i++) { a[i]=(float)(pow(x,2*i+1)/fact(i)); }for (j=0;j<=i;j++) { sum+=pow(-1,j)*a[j]; } printf ("mysin(x)=%fn",sum);}float fact (int i){ float j; float sum=1; for (j=1;j<=2*i+1;j++) { sum=sum*j; } return sum;}int main(){ float m,x;printf("请输入x:"); scanf ("%f",&x); m=sin(x); printf ("sin(x)=%fn",m); mysin(x); return 0;}
网友回答:
你的问题是,你的函数声明没有在使用的前面
在int mysin(float x)中
你的 for (i=0;pow(x,2*i+1)/fact(i)>pow(10,-5);i++)
调用了fact,而此时fact还没有定义,它会缺省它的值为int
结果肯定不对了
你要么将fact定义放在mysin前面.,要么在mysin前面加声明
float fact (int i);
另外,考虑效率
float fact (int i)中的float j 可改为int j(循环变量只要整形就可以了)
还有就是你的pow(10,-5);是常量,改为1e-5就可以了
测试 (箭头所指3个地方是我改的)