2014-09-11 91 views
0

当测试方程时,我得到一个-1.#IND00作为答案,当它解决了y。我基本上试图创建解决了y的程序得到下面求解y的方程

Y = Y /(3/17)-z + X /(%2)+ PI等式

#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

'(双)(3/17)'中的剧组改变任何内容都太迟了。你想在分区之前施放 - 或者只是写下“3.0”。 – 2014-09-11 05:18:31

+0

as @ T.C。说双演太晚了。也考虑使用'static_cast'来代替C风格的转换。还要检查'scanf'的返回值以确保您已经读取了3个有效值 – Zaiborg 2014-09-11 06:15:19

+1

这并不解决'y'的等式,它只是给'y'赋值。如果你通过零修正除数,那么该值将是'-z +(x /(a%2))+ PI'。你必须先自己解决方程。 – molbdnilo 2014-09-11 06:17:55

回答

0

由于没有问题,我假设问题是“你如何编写一个解决这个等式的C++程序?”

C++是一种编程语言,本身是不能够解决你的方程,即C++不会做任何改造,你的公式得到它变成一种形式,只在左侧发生,并且在所有参数y右侧。你必须自己改变它,手动或通过使用解算器。

在发布的代码中会发生什么?

允许根据括号开始在方程y/(double)(3/17)的从内向外的最左边部分:

  • 3/17被解释为整数除法,这导致0;
  • (double)(0)将整数0转换为0.0的双倍数;
  • y/0.0是由in this post解释为0的除法,导致您的错误。

为通过铸造的第一个整数像(double)3/17或转动整数3到双3.0或使用static_cast在评论中指出你可以解决这个问题。

  • 然而,y仍然初始化为0,所以是y/(double)3/170和计算出的方程是基本上-z + x/(a%2) + PI

因此,除非您转换方程式并将转换后的方程式放入代码中,否则您将无法获得预期的结果。