首页 > 解决方案 > 数学没有正确输出

问题描述

我仍在学习编码并编写此代码以在计算重量和距离后得到总数。有人能告诉我为什么数学不起作用吗?

示例:当我输入 5 作为体重和 1500 英里而不是返回 8.20 时,我得到 3.50。

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

int main(){
    double weight,mileCost;
    int miles, segment, remainder, stop = 1;

    while(stop == 1){

    printf("Charge by weight:(We don't tale packages over 10lbs\n");
    printf("\n 1-2 lbs: $1.50\n 3-6 lbs: $3.70\n 7-10 lbs: $5.25\n ");
    printf("Enter your package's weight:\n");
            scanf("%f", &weight);


    printf("Charge by mile: \n");
    printf("$1.50 for every 500 miles\n");
    printf("Enter the total miles for your package:\n");
        scanf("%d", &miles);

    if(miles == 0 || weight == 0 || weight > 10){
            printf("Invalid entry! Try Again.");
        }

        segment= ceil((double) miles / 500);
        remainder = miles % 500;    
            if(remainder > 0)
                remainder = 1;


    if(weight <= 2){
        mileCost = 1.50 * (segment + remainder);
        printf("The shipping charge for your package is: %f\n", mileCost);
        }
    else if(weight > 2 && weight <= 6){
            mileCost = 3.70 * (segment + remainder);
            printf("The shipping charge for your package is: %f\n", mileCost);
        }
    if(weight > 6 && weight <= 10){
            mileCost = 5.25 * (segment + remainder);
            printf("The shipping charge for your package is: %f\n", mileCost);
        }
    system("pause");

    printf("Would you like to ship another package?\n Enter 1 to continue or 0 to stop. \n");
        scanf("%d", &stop);

    if(stop == 0){
    printf("Thank you for your business! \n");
    }
}
        return 0;
}

标签: c

解决方案


更改double weight, mileCost;float weight, mileCost;将使其工作,因为您正在从stdin使用scanf("%f", &weight)(对于浮点数)而不是scanf("%lf", &weight)(对于双精度数)读取变量。

我仍然对你为什么这样做感到困惑:

if(remainder > 0)
    remainder = 1;

不会ceil()已经处理:

segment = ceil((double) miles / 500);

另外,根据您提供的公式,输入weight=5miles=1500应该输出11.1


推荐阅读