C程序返回错误的结果

时间:2012-01-25 23:03:04

标签: c function

我正在制作一个计算流量的程序,但是每当你输入程序时输入变量,它都会返回错误的答案。我从这个网站“http://www.flowmeterdirectory.com/flowcalculator.php”得到了计算流量的公式,我用它作为参考来检查我的程序的结果,但它们从不起作用。

#include <stdio.h>
#include <math.h>
#include "PI.h"

int flowRateFormula(int,int);   //Finally, finds out the flow rate
int square(int);        

int square(int x)
{
    x=pow(x,2);

    return x;
}

int flowRateFormula(int pipeDiameter,int velocity)
{
    int integer3=0.25*(PI*square(pipeDiameter)*velocity);

    return integer3;
}

int main()
{
    int flowRate;
    int velocity;
    int pipeDiameter;


    printf("Enter velocity of liquid(in./s):");
    scanf("%d",&velocity);
    printf("Velocity=%d in/s.\n",velocity);

    printf("Enter pipe diameter(inches):");
    scanf("%d",&pipeDiameter);
    printf("Pipe Diameter=%d inches.\n",pipeDiameter);

    printf("Applying formula for Flow Rate.........\n");
    flowRate=flowRateFormula(pipeDiameter,velocity);

    printf("Pipe Diameter=%d inches.\n",pipeDiameter);

    printf("Velocity of liquid=%d in/s.\n",velocity);

    printf("Thus, the flow rate=%d ft/s.\n",flowRate);

    return 0;
}

4 个答案:

答案 0 :(得分:3)

这很可能是因为整数投射。根据您的输入,结果可能很接近,并且由于在整数转换期间进行舍入,因此看起来具有相同的结果。在你的函数中使用double。

答案 1 :(得分:1)

由于您在任何地方都使用int,因此会出现很多错误。 floatdouble将是更好的选择。仅这一点就可以解释为什么尽管输入了不同的值,你得到了相同的结果。例如,int flow=0.25*x会为所有x的flow提供相同的值,其中x&gt; -4和x < 4。

答案 2 :(得分:1)

要获得准确的结果,您需要floatdouble类型。

请试试这个:

#include <stdio.h>
#include <math.h>

double PI = 3.14;

double flowRateFormula(float, float);   

double flowRateFormula(float pipeDiameter, float velocity)
{
    double p = pow(pipeDiameter, 2);
    double result = 0.25 * PI * p * velocity;
    return result;
}

int main()
{
    double flowRate;
    float velocity;
    float pipeDiameter;

    printf("Enter velocity of liquid(in./s):");
    scanf("%f",&velocity);
    printf("Velocity=%f in/s.\n",velocity);

    printf("Enter pipe diameter(inches):");
    scanf("%f",&pipeDiameter);
    printf("Pipe Diameter=%f inches.\n",pipeDiameter);

    printf("Applying formula for Flow Rate.........\n");
    flowRate=flowRateFormula(pipeDiameter,velocity);

    printf("Pipe Diameter=%f inches.\n",pipeDiameter);
    printf("Velocity of liquid=%f in/s.\n",velocity);
    printf("Thus, the flow rate=%f ft/s.\n",flowRate);

    return 0;
}

输出:

$ ./a.out 
Enter velocity of liquid(in./s):10
Velocity=10.000000 in/s.
Enter pipe diameter(inches):20
Pipe Diameter=20.000000 inches.
Applying formula for Flow Rate.........
Pipe Diameter=20.000000 inches.
Velocity of liquid=10.000000 in/s.
Thus, the flow rate=3140.000000 ft/s.
$ 
$ 
$ 
$ 
$ ./a.out 
Enter velocity of liquid(in./s):12.34
Velocity=12.340000 in/s.
Enter pipe diameter(inches):435.345
Pipe Diameter=435.345001 inches.
Applying formula for Flow Rate.........
Pipe Diameter=435.345001 inches.
Velocity of liquid=12.340000 in/s.
Thus, the flow rate=1835912.361516 ft/s.
$ 

希望这有帮助!

答案 3 :(得分:0)

您正在进行浮点运算并将结果返回到int。我会将变量更改为浮点数或需要双精度数。