C计算结果看不懂
C calculation result incomprehensible
为什么在将 2.2 作为浮点数输入时我得不到结果 2。
使用我的代码,2.2 应该转换为 220,当它通过第一个 for 循环时,我应该得到余数 20(这很好,因为它给了我 8 个硬币)。
但是当它经过第二个循环时,我无法得到 20/10 = 2,我总是得到 1
.
顺便说一下,如果我只输入 dime <= 20,我会得到 2 hmm。我不明白为什么余数也等于 20。
#include <cs50.h>
#include <stdio.h>
#include <math.h>
int main(void)
{
float change ;
float quarter ;
float dime ;
float nickel ;
float penny = 1;
int coins = 0;
int coins1 = 0;
int coins2 = 0;
int coins3 = 0;
int sum = 0;
int remainder ;
do
{
printf("What is the owed change: \n");
change = GetFloat();
change = round(change * 100);
printf("%f\n", change);
}
while(change < 0);
for(quarter = 25; quarter <= change; quarter+=25)
{
remainder = change - quarter;
coins++;
}
printf("%d,%d\n", remainder,coins);
for (dime = 10; dime <= remainder; dime += 10) //This is where the problem starts.
{
remainder = remainder - dime;
coins1++;
}
printf("%d,%d\n", remainder,coins1);
for (nickel = 5; nickel < remainder; nickel += 5)
{
remainder = remainder - nickel;
coins2++;
}
printf("%d,%d\n", remainder,coins2);
for (penny = 1; penny < remainder; penny += 1)
{
remainder = remainder - penny;
coins3++;
}
printf("%d,%d\n", remainder,coins3);
printf("\n%d\n", sum = coins + coins1 + coins2 + coins3);
}
您在 for
循环的每个 运行 期间从 remainder
减去 dime
,而 dime
在循环的每次迭代期间增加环形。假设在第二个 for
循环之前 change 最初是 20。第一个循环执行会减去 10,留下 remainder
为 10。然后 dime
增加 10,现在是 20。循环条件失败,因为 20 > 10,并且循环 运行s只有一次。
我的建议是给你的变量起更直观的名字,比如 i
或 x
用于基本循环计数器,dimes_needed
而不是 coins1
为什么在将 2.2 作为浮点数输入时我得不到结果 2。
使用我的代码,2.2 应该转换为 220,当它通过第一个 for 循环时,我应该得到余数 20(这很好,因为它给了我 8 个硬币)。
但是当它经过第二个循环时,我无法得到 20/10 = 2,我总是得到 1
.
顺便说一下,如果我只输入 dime <= 20,我会得到 2 hmm。我不明白为什么余数也等于 20。
#include <cs50.h>
#include <stdio.h>
#include <math.h>
int main(void)
{
float change ;
float quarter ;
float dime ;
float nickel ;
float penny = 1;
int coins = 0;
int coins1 = 0;
int coins2 = 0;
int coins3 = 0;
int sum = 0;
int remainder ;
do
{
printf("What is the owed change: \n");
change = GetFloat();
change = round(change * 100);
printf("%f\n", change);
}
while(change < 0);
for(quarter = 25; quarter <= change; quarter+=25)
{
remainder = change - quarter;
coins++;
}
printf("%d,%d\n", remainder,coins);
for (dime = 10; dime <= remainder; dime += 10) //This is where the problem starts.
{
remainder = remainder - dime;
coins1++;
}
printf("%d,%d\n", remainder,coins1);
for (nickel = 5; nickel < remainder; nickel += 5)
{
remainder = remainder - nickel;
coins2++;
}
printf("%d,%d\n", remainder,coins2);
for (penny = 1; penny < remainder; penny += 1)
{
remainder = remainder - penny;
coins3++;
}
printf("%d,%d\n", remainder,coins3);
printf("\n%d\n", sum = coins + coins1 + coins2 + coins3);
}
您在 for
循环的每个 运行 期间从 remainder
减去 dime
,而 dime
在循环的每次迭代期间增加环形。假设在第二个 for
循环之前 change 最初是 20。第一个循环执行会减去 10,留下 remainder
为 10。然后 dime
增加 10,现在是 20。循环条件失败,因为 20 > 10,并且循环 运行s只有一次。
我的建议是给你的变量起更直观的名字,比如 i
或 x
用于基本循环计数器,dimes_needed
而不是 coins1