编写一个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。 - 我是编程或编码的初学者。
答案 0 :(得分:2)
你可以从仅else if ( val1 == val2 )
删除else
开始,因为它是唯一剩下的情况,你将避免最坏的浮点相等错误,最多可以简化你的代码位。
但真正的罪魁祸首是这条线:
result = pow( val1 + val2 , 3/4 ) ;
由于整数除法, 3/4
为0
。例如,使用3.0/4
或仅使用0.75
。