C语言计算Ferrari FF车速及Deviation of Speed的代码错误求解
代码问题排查
- 错误1:偏差值赋值逻辑错误。
bs = +2&&-2、bt = +0.06&&-0.06中的&&是C语言逻辑与运算符,表达式最终结果为布尔真(值为1),完全不符合±2、±0.06的偏差定义。计算相对偏差时只需取偏差的绝对值,所以应直接赋值为bs = 2、bt = 0.06。 - 错误2:单位转换存在整数除法截断问题。
18/5是两个整数运算,结果会被截断为3,而非预期的3.6,需改为18.0 / 5.0保证浮点运算。 - 错误3:存在无效的未初始化变量调用。
x = (bv)/v ;这一行执行时bv还未赋值,属于未定义行为,且后续x会被重新赋值,该行可直接删除。 - 错误4:单位转换重复执行。最初计算的
v已经转换为km/h单位,后续计算出的bv本身就是km/h量级的偏差,不需要再次执行* 18/5的转换操作。
修正后代码
#include <stdio.h> #include <math.h> int main() { float v = 42/0.56, t = 0.56, bv, // 速度偏差 bs = 2, // 距离偏差绝对值 s = 42, // 距离 bt = 0.06,// 时间偏差绝对值 x,y,z; v = v*(18.0/5.0); // 单位从m/s转换为km/hr printf("Speed of Ferrari FF = %.3f km/hr",v); y = (bs)/s ; z = (bt)/t ; x = sqrt( y*y + z*z ) ; bv = v * x ; printf("\nDeviation of Speed = %.3f km/hr",bv); return 0; }
内容的提问来源于stack exchange,提问作者WWoPPoWW
相关产品推荐
相关产品推荐

