为什么这些函数在75%的时间内给出正确的输出

Why do these functions give the correct output 75% of the time?

本文关键字:输出 时间 函数 为什么      更新时间:2023-10-16

(此函数是较大程序的一部分,但独立于其他函数运行。)

好的,我有一个函数套,给定3个输入,它只在75%的时间内产生正确的输出。

我不知道输入,但我知道输出是错误的。

我不知道哪里出了问题,也不知道如何修复。

我假设每次将函数提交给myProgrammingLab时输入的12个值相同。

因此,这可能是一个特定输入的问题。

谢谢。

说明:

夹克尺寸(胸部以英寸为单位)=身高乘以体重除以288,然后在30岁以上每10年增加1/8英寸进行调整。(注意,调整只在整整10年后进行。因此,30岁至39岁的人没有调整,但40岁的人增加了1/8英寸。)


edit:将tmp更改为float仍然会产生错误。

 float jacket(float weight, float height, int age) {
        double result = (height * weight) / 288;
        /*now for every 10 years past 30 add (1/8) to the result*/
        if((age - 30) > 0){
            int temp = (age - 30) / 10;
            result = result + (temp * .125);
        }
        return result;
    }

这是同一个函数,在同一个问题上以不同的方式编写。

float jacket(double jWeight, double jHeight, int jAge)
{
    double jSize = ((jWeight*jHeight)/288.0);
    int i = jAge/10 - 3;
    if((jAge/10)>3)
        jSize += 0.125*i;
    
    return jSize;
}

这是具有相同问题的的第三个函数

float  jacket(double weight, double height, int age)    
// calculates the jacket size, adjusting for age in increments
// of ten years, if customer is over 30 years of age.
{
    int age_factor;
    double j_size; 
    j_size = (height*weight)/288.0;
    if (age >=30) 
    {
    age_factor = (age-30)/10; //note possible truncation.
    j_size += age_factor/8.0;
    }
    return j_size;
}

第一次调用函数时,它会产生一个不正确的返回值。剩余的3次被称为返回值是正确的。

观察:

Expected Output:
jacket·size·=·24.17↵
jacket·size·=·40.00↵
jacket·size·=·46.04↵
jacket·size·=·35.42↵
Actual Output:
jacket·size·=·24.29↵
jacket·size·=·40.00↵
jacket·size·=·46.04↵
jacket·size·=·35.42↵

*给定相同输入的所有三个函数都会产生相同的输出

int temp = (age - 30) / 10;

通过将temp设置为int,由于截断,您将得到不正确的结果。请尝试使用float

我想一个可以说31岁不一定是30岁以上的1岁。尝试int temp = (age - 31)/10;。就我个人而言,我认为这是错误的,这里的其他人也是如此,但有人可能会说,一个人31岁的那一刻只比30岁多一秒。无论如何,它值得一试。