考虑C中的浮动

时间:2016-07-02 16:43:13

标签: c floating-point

所以我调整了代码,似乎减去了一个缺陷。收缩现在是一个浮动,但没有返回正确的答案。当我试图缩小9例如它返回4.0而不是4.5 ...... 13返回6.0?新代码如下:

包括

int main()

{

/ *变量定义:* /

int intValue,menuSelect,Results;     float sResults;

intValue = 1;

//正数

while(intValue> 0)

{

name

if(intValue> 0)

{

 printf ("Enter a positive Integer\n: ");

 scanf("%d", &intValue);

}

返回0;

}

/ *函数返回数字的平方* /

int Square(int value)

{

返回值*值;

}

/ *函数返回数字的立方体* /

int Cube(int value)

{    返回值值;

}

int Shrink(int value)

{

 printf ("Enter 1 to calculate Square, 2 to Calculate Cube, Enter 3 to Calculate Shrink \n: ");

 scanf("%d", &menuSelect);

 if (menuSelect == 1)

 {

   // Call the Square Function

   Results = Square(intValue);

   printf("Square of %d is %d\n",intValue,Results);

 }

 else if (menuSelect == 2)

 {

   // Call the Cube function

   Results = Cube(intValue);

   printf("Cube of %d is %d\n",intValue,Results);

 }

 else if (menuSelect == 3)

 {

    sResults = Shrink(intValue);

    printf("shrink of %d is %f\n", intValue,sResults);

 }


 else

   printf("Invalid menu item, only 1 or 2 or 3 is accepted\n");

 }    

}

1 个答案:

答案 0 :(得分:2)

Results = Shrink(intValue);

printf("shrink of %d is %f\n", intValue,sResults);

您将结果存储在Results中,然后打印sResults。这是两个不同的变量,sResults仍然为零,因为它没有被赋值。在sResults声明中将Results更改为printf

但是,由于您正在进行整数除法,因此您会得到一个被截断为整数的结果:Shrink(5)将返回2.要解决这个问题,您需要执行此操作。\ n'我需要更改Shrink以使用float参数而不是int,返回float而不是int,并将其结果分配给sResult而不是Result

此外,您可能会收到有关未声明的SquareCubeShrink函数的编译器警告。发生这种情况是因为调用函数的代码位于代码之前。它还没有给你带来实际问题 yet ,因为编译器通过假设每个函数都采用int参数并返回int结果来处理这种情况,这恰巧恰好是真的。但是,如果您更改任何功能以便在float而不是int上运行,那么您的程序将会中断,因为这些调用仍然会被编译为int

将三个数学函数移到main上方,将它们留在底部并将这些行放在main之前:

int Square(int value);
int Cube(int value);
int Shrink(int value);

这些被称为声明,它们告诉编译器函数操作的类型,因此它知道如何在它们看到它们的实现之前处理它们。如果您将功能更改为float而不是int,请更改声明以匹配。