这是我的代码:
program change
integer:: amount, remainder, q, d, n, p
amount = 47
remainder = amount
print*,remainder
q = 0
d = 0
n = 0
p = 0
do while (remainder >= 25)
remainder = remainder - 25
print*,remainder
q = q + 1
end do
do while (remainder >= 10)
remainder = remainder - 25
print*,remainder
d = d + 1
end do
do while (remainder >= 5)
remainder = remainder - 25
print*,remainder
n = n + 1
end do
do while (remainder >= 1)
remainder = remainder - 25
print*,remainder
p = p + 1
end do
print*, "# Quarters:", q
print*, "# Dimes:", d
print*, "# Nickels:", n
print*, "# Pennies:", p
end program change
输出:
47
22
-3
# Quarters: 1
# Dimes: 1
# Nickels: 0
# Pennies: 0
一旦余数变为 22,第一个循环 (>=25) 应退出,但它会再次运行并产生负数。即使条件为假,为什么它不退出?我正在使用 IDEone.com 的 Fortran“编译器”,它看起来与 Fortran 95 类似。
最佳答案
你的 DO 循环没问题。您只需在每个循环中从余数中减去正确的面额即可。例如,将第二个 DO 循环更改为:
do while (remainder >= 10)
remainder = remainder - 10
print*,remainder
d = d + 1
end do
并以类似的方式更改其余部分。
关于Fortran 95 Do-While 循环在错误条件下不退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5137092/