2014-11-17 2 views
0

이 코드는 완벽하게 컴파일되지만 두 번째 실행시에는 무한한 값을 기대하는 것처럼 항상 프롬프트가 반환됩니다. 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; 
} 
+1

당신이 "항상 프롬프트를 반환"무슨 뜻인지 설명 할 수하려고? 그게 무슨 뜻인지는 분명치 않습니다. –

+0

확실히^-^기본적으로 "무엇이 관용입니까?"라고 묻습니다. 그리고 숫자를 입력 한 다음 Enter 키를 누르면 새 줄에 번호를 묻습니다. –

+0

어떤 입력 값을 사용하고 있습니까? 아마도 당신은 당신이 보는 것에 대한 스크린 샷을 보여줄 수 있습니까? 코드의 입력 부분에는 루프가 없으므로 두 번 이상 요청할 수있는 방법이 명확하지 않습니다. –

답변

1

, 프로그램이 더 입력을 요구 없습니다. 대답을 계산 중입니다. 리눅스에서는 프로그램 실행 중에 터미널에 계속 입력 할 수 있습니다.

top 또는 다른 CPU 모니터를 사용하여 프로세스가 100 % CPU를 사용하고 있는지 확인할 수 있습니다. 문제는 sen()의 알고리즘이 무한 루프를 실행하고 목표 허용 오차 값에 도달하지 못하는 것입니다.

+0

-_- 정말요?! 그?! 그것의 항상 작은 것들 ... 근본적으로 나는 보조제를 놓았을 때 보조제를 넣었다. –

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; 
} 
관련 문제