这段代码完美编译,但是当我运行它时,在第二个'scanf'上它将始终返回提示,就像它期望无限量的值一样。我在Linux上使用Clang。我本周五参加考试时真的需要你的帮助。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
int fatorial(int n){
int f=1, t;
for(t=n;t>1;t--){
f=f*t;
}
return f;
}
float sen(float x, float tol){
float res=0, aux=0;
int n=0;
for(n=1;res-aux!=tol||aux-res!=tol; n++){
res=aux;
res=res+(pow(-1,n+1))*((pow(x,2*n-1))/fatorial(2*n-1));
}
return res;
}
int main(){
float yo, tol, res;
printf("What's the value of x? ");
scanf(" %f", &yo);
printf("What's the tolerance? ");
scanf(" %f", &tol);
res=sen(yo, tol);
printf("The sin of %.2f is %f.\n", yo, res);
return 0;
}
答案 0 :(得分:1)
根据您的链接屏幕截图,您的程序不会询问以获取更多输入。它正在计算答案。在Linux中,您仍然可以在程序运行时将内容输入终端,这就是您正在做的事情。
您可以使用top
或其他CPU监视器来查看您的进程使用的是100%CPU。问题是sen()
中的算法正在运行无限循环,并且永远不会达到其目标容差值。
答案 1 :(得分:0)
试试这个
float sen(float x, float tol){
float res=0, aux=tol+1;
int n;
for(n=0;fabsf(res-aux)>tol; n++){
aux=res;
res=res+pow(-1, n)*pow(x, 2*n+1)/fatorial(2*n+1);
}
return res;
}