c c c c
```c
c
c       John Mahaffy,  Penn State University, CmpSc 201 Example
c       1/26/96
c
program iftests
implicit none
c
logical ltest
c
integer i,j
character*1 char
c
c    This program gives examples of various uses of the if statement
c
c    variables:
c      i -  an input integer
c      j -  an integer used in some tests
c      char -  an input single character
c      ltest - logical variable holding the results of a comparison
c
c    Begin by reading in a integer
c
10  print *, 'Type in an integer value:'
c
read *, i
c
c     The arithmetic IF statement is archaic.  You shouldn't use it
c     but need to know that it exists.
c
c
if(i-100) 20,30,40
20 print *, 'input is less than 100'
go to 50
30 print *, 'input is equal to 100'
go to 50
40 print *, 'input is greater than 100'
c
c
c     The simplest logical IF just does something immediately
c
50   if(i.lt.0) i=-i
if(i.gt.50.and.i.lt.100) print *, ' 50 < input < 100 '
c
c    A more powerful logical IF conditionally executes a block of code
c    the word 'then' always appears at the end of the IF line and the
c    block of code is ended with a line saying 'endif' or 'end if'
c    Note the use of indentation to highlight the structure.
c
if(i.ge.100.and.i.le.200) then
i=i+150
print *, 'i incremented by 150'
c
endif
c
c
c    The contents of the parentheses can always be replaced by a logical
c    variable
c
ltest= i.ge.-200.and.i.le.-100
if (ltest) then
i=i+200
print *, 'i incremented by 200'
endif
c
c    Block logical IF's may contain other tests and a final option
c    (ELSE) to be executed if one of the others is not done.  Only one
c    of the possible actions will be taken.  When it is the others are
c    bypassed
c
if((i.gt.200.and.i.le.300).or.(i.gt.1200)) then
i=i+200
print *, 'input incremented by 200'
else if (i.eq.400) then
print *, 'input = 400'
else
print *, 'Nothing special about input.'
endif
c
c
c    Sometimes it makes sense to use the Fortran 90 Case structure instead
c    of IF, ELSE IF structures.  Only one case will be done
c
c
select case (i)
c
case default
print *, 'Nothing special about input.'
case (201:300)
i=i+200
print *, 'input incremented by 100'
case (400)
print *, 'input = 400'
end select
c
c    Of the above examples only SELECT CASE required use of an integer
c    rather than a real number. However SELECT CASE also functions with
c    Character strings.
c
print *, 'Do you want to continue? (y or n)'
read 1000, char
1000  format(a1)
select case (char)
case ('y')
ltest=.true.
print *, 'Continuing'
case ('n')
ltest=.false.
print *, 'Stopping'
case default
print *, 'Incorrect Response'
stop
c
end select
c
c    The most basic if test (what the machine does) is just a branch
c    These things make the flow of the program difficult to follow and
c    should be used as little as possible
c
if(ltest) go to 10
c
c    An if test that forces a loop through coding can be implented in
c    Fortran 90 with a DO WHILE structure.  Notice values of i and j
c    when the loop is done.  The test always done at the beginning of
c    the loop.
c
i=0
j=2
c
do while (i.lt.10.and.j.lt.10000)
c
i=i+1
j=j**2
end do
print *, 'i = ',i,' , j = ',j
c
stop
end
c
c ```
c c c