2

这是我的代码:

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。

4

1 回答 1

4

你的 DO 循环很好。您只需从remainder每个循环中减去正确的面额。例如,将您的第二个 DO 循环更改为:

        do while (remainder >= 10)
                remainder = remainder - 10
                print*,remainder
                d = d + 1       
        end do

并以类似的方式更改其余部分。

于 2011-02-28T03:42:59.583 回答