首页 文章

考虑C中的浮动

提问于
浏览
-3

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

包括

int main()

{

/ 变量定义: /

int intValue,menuSelect,Results;浮动sResults;

intValue = 1;

//虽然是正数

while(intValue> 0)

{

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

 scanf("%d", &intValue);

if(intValue> 0)

{

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");

 }

}

返回0;

}

/ 函数返回数字的平方 /

int Square(int value)

{

返回值*值;

}

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

int Cube(int value)

{return valuevaluevalue;

}

int收缩(int值)

{

return value*1/2;

}

1 回答

  • 2
    Results = Shrink(intValue);
    
    printf("shrink of %d is %f\n", intValue,sResults);
    

    您将结果存储在 Results 中,但随后打印 sResults . 这是两个不同的变量, sResults 仍为零,因为它尚未赋值 . 在 printf 语句中将 sResults 更改为 Results .

    但是,因为你得到的结果被截断为一个整数: Shrink(5) 将返回2.要解决这个问题,你需要更改 Shrink 以取一个 float 参数而不是 int ,返回 float 而不是 int ,然后分配其结果到 sResult 而不是 Result .


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

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

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

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

相关问题