运费计算器未返回正确的结果

时间:2019-11-11 02:31:12

标签: c

任务是使用以下信息编写运输计算器。

超过50磅的包裹将不被运输。您需要用C编写一个计算运费的程序。

运费基于每500英里的运费。它们没有按比例分配,即600英里与900英里或1000英里相同。

以下是运费-

每运送500英里的包裹重量费率

Less than or equal to 10 pounds                                                      $3.00
More than 10 pounds but less than or equal to 50 pounds            $5.00

如果运输距离超过1000英里,则每套包裹将额外收取10美元的费用。

我最初开始使用double编写程序,但想使用我在这里看到的技巧来迫使程序将距离加499,再除以500,从而最终舍入运费。

#include <stdio.h>
#include <stdlib.h>

int main()
{
int Shipping, packageWeight, packageDistance, packagePrice;


printf("Enter the weight of the package: \n");
scanf("%d", &packageWeight);
printf("The weight you have entered is %.2d\n", packageWeight);



if (packageWeight <= 10 )
    Shipping = 3.00;

if (packageWeight <= 50 && packageWeight > 10 )
    Shipping = 5.00;

if (packageWeight > 50.0) {
puts("Sorry, we only ship packages of 50 pounds or less.");
return 0;
}

printf("How far are you sending the package? \n");
scanf("%d", &packageDistance);
printf("The distance you entered is %.2d\n", packageDistance);



if (packageDistance <= 1000){
    packagePrice = (packageDistance + 499 / 500) * Shipping;
    printf("The shipping charge is %.2d \n", packagePrice);
    system("pause");
    }


if (packageDistance > 1000) {
    packagePrice = (packageDistance + 499 / 500) * Shipping + 10.00;
    printf("The shipping charge is %.2d \n", packagePrice);
    system("PAUSE");
}

}

重量为10且距离为501时,输出的运费应为6,但为1503 基于20的重量和1001的距离,程序应输出25的运费,但为5000

1 个答案:

答案 0 :(得分:2)

您对整数/双精度,输出,表达式等一无所知。

让我告诉你为什么获得1503:

if (packageDistance <= 1000){
    packagePrice = (packageDistance + 499 / 500) * Shipping;
    printf("The shipping charge is %.2d \n", packagePrice);
    system("pause");
}

您的packageDistance为501,如果语句为true,则进入内部。

然后您设置包裹价格。首先,您获得packageDistance为501。然后将其与499/500相加,因为499 <500,所以它为0,然后尝试获得除法的整数部分(根据C / C ++标准)。 501和0的总和是501。

现在,您将其乘以运输。您设置的值为3.0,但是智能C会将其转换为整数3。501* 3为1503,您将得到结果。

最后,您尝试将输出发送为%.2d。这是胡说八道,我很惊讶C显示了所有内容,但我相信它只是看到d而忽略了.2

这是您要做的:

  1. 了解您的业务逻辑(您知道)

  2. 请注意整数和浮点数,如果不了解,请阅读C文档或在此处发送问题。

  3. 请确保在需要时使用方括号:a + b / c与(a + b)/ c不相同

  4. 如果要使用“常规”除法,请确保不使用整数除法。

  5. 确保在适当的时候使用%d表示整数,并使用%.2f表示浮点数。

相关问题