这里是菜鸟问题。 我刚刚开始学习编程,并且参加了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);
}
我看不到任何会导致无限循环的东西。如果前面的条件为假,则您的最后一个条件将始终为真。
但是你可以清理你的条件:
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);
}