任务是使用以下信息编写运输计算器。
超过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
答案 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
这是您要做的:
了解您的业务逻辑(您知道)
请注意整数和浮点数,如果不了解,请阅读C文档或在此处发送问题。
请确保在需要时使用方括号:a + b / c与(a + b)/ c不相同
如果要使用“常规”除法,请确保不使用整数除法。
确保在适当的时候使用%d表示整数,并使用%.2f表示浮点数。