Введение в программирование домашнего задания для C

#c

#c

Вопрос:

В моем введении к заданию по программированию у меня возникла проблема с проблемой. Мне нужно создать калькулятор доставки, который отправит вашу посылку в зависимости от того, сколько она весит и как далеко вы отправляете посылку. Они будут отправлять посылки весом только до 10 фунтов.

Плата рассчитывается за каждые отправленные 500 миль. Они не рассчитаны пропорционально, т. е. 600 миль оплачиваются так же, как 900 миль, т. е. 600 миль считаются как 2 сегмента по 500 миль.

Вот таблица, которую они мне дали:

Норма веса посылки за 500 миль доставки 2 фунта или меньше $ 1,50 Более 2, но не более 6 $ 3,70 Более 6, но не более 10 $ 5,25

Проблема в том, что каждый раз, когда я ввожу:

Вес: 1.0 Миль: 2000

Я получаю 58,50 долларов, когда предполагается, что это 6,00 долларов. Вот мой код ниже. Кстати, я не могу использовать циклы.

 #include <stdio.h>

int main(void){

    float weight, shippingCharge;
    int miles, mTotal, mModule, fTotal;

    printf("Weight: ");
    scanf("%f", amp;weight);

    printf("Miles: ");
    scanf("%d", amp;miles);


        mTotal = miles / 500;
        mModule = miles % 500;

    if(mModule > 0){
        fTotal = mTotal   1;
    }

    if( weight <= 2){
        shippingCharge = fTotal * 1.50;
        printf("Your shipping charge is $%.2fn", shippingCharge);
    }else{
        if(weight >= 2 amp;amp; weight <= 6){
            shippingCharge = fTotal * 3.70;
            printf("Your shipping charge is $%.2fn", shippingCharge);
        }else{
            if(weight >= 6 amp;amp; weight <= 10){
                shippingCharge = fTotal * 5.25;
                printf("Your shipping charge is $%.2fn", shippingCharge);
            }else{
                printf("Sorry, we only ship packages of 10 pounds or less.");
            }
        }
    }



    return 0;
}
  

Комментарии:

1. Узнайте, как использовать GDB -отладчик для c, он точно расскажет вам, что происходит

2. fTotal в этом случае не присваивается никакого значения, поэтому вы получаете произвольное значение

3. Существует много бесполезного кода.

4. 1. Как мне использовать отладчик в codeblocks? 2. каким образом ftotal является произвольным, когда ему назначен mTotal?

5. Потому что оно назначается только тогда, когда mModule > 0 , и mModule больше 0 только тогда, когда mMiles % 500 != 0 . 2000 % 500 == 0 , so mModule = 0 , и, следовательно, if (mModule > 0) тест никогда не проходит. Всегда инициализируйте значения перед их использованием; не зависите от того, что тест, передающий условие, инициализирует его за вас.

Ответ №1:

Вы не инициализируете, fTotal если расстояние точно кратно 500 — в этом случае вам нужно установить его равным mTotal .

Итак, измените:

 if(mModule > 0){
    fTotal = mTotal   1;
}
  

К этому (например):

 fTotal = mTotal   (mModule > 0) ? 1 : 0;
  

Подход без использования троичных операторов:

 if(mModule > 0) {
    fTotal = mTotal   1;
} else {
    fTotal = mTotal; 
}
  

Комментарии:

1. Я не понимаю, что означает этот код. можете ли вы разобрать это для меня?

2. @user3799479 Если mModule больше 0 , то fTotal будет равно mModule 1 или иначе оно будет только равно mModule .

3. if(mModule > 0 ){ fTotal = mTotal 1; }else{ fTotal == mTotal; } << вот так?. Я только что попробовал это и получил тот же ответ, что и выше.

4. Боже, я люблю тебя. Большое вам спасибо, ребята!

5. @user3799479 нет, fTotal == mTotal так и должно быть fTotal = mTotal , только с одним = .