2014-09-11 1 views
0

방정식을 테스트 할 때 y을 해결할 때 -1.#IND00을 답으로 사용합니다. I 기본적y 방정식 해결

Y = Y/(3/17) -z + X/(a ​​% 2) + PI 다음 식을 제공 y 대한 해결 프로그램을 만들려고

#include <stdio.h> 
#include <math.h> 
#define PI 3.14 

int main (void) 
{ 
    int a=0; 
    double z=0,x=0,y=0; 

    printf("Values for x, z, and a:"); 
    scanf("%lf%lf%d", &x,&z,&a); 

    y = (((y/(double)(3/17)))-z + (x/(a%2))+PI); 
    printf("y = %lf\n", y); 

    return 0; 
} 
+11

'(double) (3/17)'의 캐스트가 너무 늦어서 아무것도 바꿀 수 없습니다. 나누기 전에 캐스팅하거나 "3.0"이라고 써야합니다. –

+0

@ T.C. 이중 캐스트가 너무 늦었다 고 말했다. C 스타일의 캐스트에 대해서'static_cast'를 사용하는 것도 고려하십시오. 또한'scanf'의 반환 값을 확인하여 3 개의 유효한 값을 읽었는지 확인하십시오. – Zaiborg

+1

이는'y'에 대한 방정식을 풀지 못합니다. 단지'y'에 값을 할당합니다. 제로를 0으로 고정하면 값은'-z + (x/(a ​​% 2)) + PI'가됩니다. 먼저 방정식을 풀어야합니다. – molbdnilo

답변

0

의문의 여지가 없기 때문에 "이 방정식을 풀 수있는 C++ 프로그램을 어떻게 작성합니까?"라고 가정합니다.

C++은 프로그래밍 언어이며 그 자체로 방정식을 풀 수 없습니다. 예를 들어, C++은 방정식을 변형하지 않고 y이 왼쪽면에서만 발생하고 오른편. 직접 또는 솔버를 사용하여 직접 변형해야합니다.

게시 된 코드는 어떻게됩니까?

괄호에 따라 내부에서 바깥 식 y/(double)(3/17)의 가장 좌측 부분에서 시작하자 :

  • 3/170 결과 정수 나누기로 해석되고;
  • (double)(0)00.0의 두 배로 변환합니다.
  • y/0.0은 설명 부분이 in this post 인 오류로 인해 0으로 나눈 값입니다. 하나가 (double)3/17처럼 첫 번째 정수를 주조 또는 이중 3.0에 정수 3을 켜거나 static_cast를 사용하여 의견에 지적

당신은이 문제를 해결할 수 있습니다.

  • 그러나 y 여전히 0으로 초기화되므로 y/(double)3/170하고 계산 방정식은 기본적 -z + x/(a%2) + PI이다.

따라서 수식을 변환하고 변환 된 수식을 코드에 넣지 않으면 예상 한 결과를 얻지 못합니다.