关于这个计划一切都好吗?

时间:2017-07-13 16:42:49

标签: c

问题是 -

  

编写一个C函数,根据以下条件计算权重 z 的值 -

     

z = x ^ 2 - 4 * y if(x> y)

     

z = x ^ 2 + 4 * y if(x      

z =(x + y)^ 3/4 if(x = y)

     

然后编写一个C主程序,读取 x y 的值,并调用已开发的函数来计算权重值 z < /强> 的。

该程序是否适用于所有可能的输入?这是repl.it版本 - https://repl.it/J0ev/0

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

float calc( float val1, float val2 ) ;
int main(void)
{
  float x, y, z ;
  printf("Enter x - ") ;
  scanf("%f", &x ) ;
  printf("Enter y - " ) ;
  scanf("%f", &y ) ;
  z = calc( x , y ) ;
  printf("Value of z is - %.2f", z ) ;
  return 0 ;
}
float calc ( float val1, float val2 )
{
  float result ;
  if (val1 > val2 )
      result = pow( val1 , 2 ) - 4*val2 ;
  else if ( val1 < val2 )
      result = pow( val1 , 2 ) + 4*val2 ;
  else if ( val1 == val2 )
      result = pow( val1 + val2 , 3/4 ) ;
  return result ;
}

我认为 val1 == val2 的实施存在逻辑错误。

N.B。 - 我是编程或编码的初学者。

1 个答案:

答案 0 :(得分:2)

你可以从仅else if ( val1 == val2 )删除else开始,因为它是唯一剩下的情况,你将避免最坏的浮点相等错误,最多可以简化你的代码位。

但真正的罪魁祸首是这条线:

result = pow( val1 + val2 , 3/4 ) ;
由于整数除法

3/40。例如,使用3.0/4或仅使用0.75