在Fortran循环时嵌套Do和Do



我正在编写这个小程序,它将成绩存储在数组中,然后取平均值。该计划应该接受多达10个等级,并停止,只接受成绩为>0和

program Average
implicit none 
character(len = 50) f_name, l_name 
integer i, j, amtOfGrades
real grade, arraySum, avg

Real, Dimension(10)::a

do i = 1, 10
if(.not. (j .LE. 100 .AND. j .GE. 0)) then
write(*,*)'Enter grade: '
read(*,*)a(i)
j = a(i)
arraySum = sum(a)
avg = arraySum/10
else
avg = arraySum/(i-1)
end if
end do 

我遇到的问题是嵌套循环部分。我不能得到我需要一起工作的两个条件,这两个条件只有10个等级(DO的目的)和只接受0-100范围内的等级(DO WHILE的目的)。

您需要在输入最多10个等级之前发出exit语句退出循环:

program Console1
use, intrinsic :: iso_fortran_env
implicit none
! Variables
integer, parameter :: maxcount = 10
real :: a(maxcount), ave
integer :: i, count
count = 0
do i = 1, maxcount
write(*,*) 'Enter grade: '
read(*,*) a(i)
if( a(i)<=0.0 .or. a(i)>=100.0) then
exit
end if
count = count + 1
end do
ave = sum(a)/count
write(*,*) 'The average is: ', ave
end program Console1

如果你查看帮助,你会看到

EXIT语句导致DO循环或命名构造的执行终止。

如何做到这一点将取决于如果输入等级不是0 <= grade <= 100,您想要做什么。这样的输入是否计入10个等级的限制?

如果一个错误的输入确实被计入限制,那么你只需要从用户那里获得10次read,但你最终可能会得到少于10个等级的总数。因此,你需要跟踪已经输入了多少年级。

这个的代码可能看起来像:

program average
implicit none

integer :: i, amtOfGrades
real :: grade, arraySum, avg
real, dimension(10) :: a

amtOfGrades = 0
do i=1,10
write(*,*) 'Enter grade: '
read(*,*) grade
if (0<=grade .and. grade<=100) then
amtOfGrades = amtOfGrades + 1
array(amtOfGrades) = grade
endif
end do

arraySum = sum(a(:amtOfGrades))
avg = arraySum/amtOfGrades
end program

如果错误的输入不计入限制,那么您将始终以10个等级结束,但是您可能必须从用户那里获得无限次read

这个的代码可能看起来像:

program average
implicit none

integer :: i
real :: grade, arraySum, avg
real, dimension(10) :: a

do i=1,10
do
write(*,*) 'Enter grade: '
read(*,*) grade
if (0<=grade .and. grade<=100) then
array(i) = grade
exit
endif
enddo
end do

arraySum = sum(a)
avg = arraySum/10
end program

相关内容

  • 没有找到相关文章

最新更新