为什么程序没有陷入无限循环?

问题描述 投票:0回答:1

这里是菜鸟问题。 我刚刚开始学习编程,并且参加了cs50课程。我已经用 C 解决了问题集 1 中的前 3 个问题,但我不明白为什么在我的第三个程序中,有一个循环应该导致程序卡住,但它没有,而且它可以工作如预期。最后的 else if 语句不应导致程序陷入循环?例如,如果我们到达值为 4 的最后一个循环。因此,change(4) - Nick(5) 将得到 -1,低于 0,使条件为 true,为什么程序不会陷入困境最后一个循环,继续减去镍币的价值并增加便士的数量?

int main()
{
    int change, count_p = 0, count_n = 0, count_d = 0, count_q = 0;
    const int penny = 1;
    const int nickel = 5;
    const int dime = 10;
    const int quarter = 25;

    do
    {
        change = get_int("Enter amount of change: ");
    }
    while (change < 0);

    while (change > 0)
    {
        if (change - quarter >= 0)
        {
            change -= quarter;
            count_q += 1;
        }
        else if ((change - quarter < 0) && (change - dime >= 0))
        {
            change -= dime;
            count_d += 1;
        }
        else if ((change - dime < 0) && (change - nickel >= 0))
        {
            change -= nickel;
            count_n += 1;
        }
        else if (change - nickel < 0)
        {
            change -= penny;
            count_p += 1;
        }
    }
    // int count_tot = count_q + count_d + count_n + count_p;
    // printf("This is the total amount of coins: %i\n", count_tot);
    printf("This is number of quarters: %i\n", count_q);
    printf("This is number of dimes: %i\n", count_d);
    printf("This is number of nickels: %i\n", count_n);
    printf("This is number of pennys: %i\n", count_p);
}

c algorithm loops cs50 greedy
1个回答
0
投票

我看不到任何会导致无限循环的东西。如果前面的条件为假,则您的最后一个条件将始终为真。

但是你可以清理你的条件:

int main() {
    int change, count_p = 0, count_n = 0, count_d = 0, count_q = 0;
    const int penny = 1;
    const int nickel = 5;
    const int dime = 10;
    const int quarter = 25;

    do {
        change = get_int("Enter amount of change: ");
    } while (change < 0);

    while (change > 0) {
        if (change >= quarter) {
            change -= quarter;
            count_q += 1;
        }
        else if (change >= dime) {
            change -= dime;
            count_d += 1;
        }
        else if (change >= nickel) {
            change -= nickel;
            count_n += 1;
        }
        else {
            change -= penny;
            count_p += 1;
        }
    }

    printf("This is number of quarters: %i\n", count_q);
    printf("This is number of dimes: %i\n", count_d);
    printf("This is number of nickels: %i\n", count_n);
    printf("This is number of pennys: %i\n", count_p);
}

其次,由于重复减法实际上只是除法,然后我们想测试其余的变化...

int main() {
    int change, count_p = 0, count_n = 0, count_d = 0, count_q = 0;
    const int penny = 1;
    const int nickel = 5;
    const int dime = 10;
    const int quarter = 25;

    do {
        change = get_int("Enter amount of change: ");
    } while (change < 0);

    count_q = change / quarter;
    change %= quarter;
    count_d = change / dime;
    change %= dime;
    count_n = change / nickel;
    change %= nickel;
    count_p = change;

    printf("This is number of quarters: %i\n", count_q);
    printf("This is number of dimes: %i\n", count_d);
    printf("This is number of nickels: %i\n", count_n);
    printf("This is number of pennys: %i\n", count_p);
}
© www.soinside.com 2019 - 2024. All rights reserved.