An unstructured do loop does not have a built-in condition check,
but uses if
and exit
to exit
the loop when some condition is met. The do
loop itself is equivalent to do while ( .true. )
.
Example 20.3. Unstructured Fortran Loop
module constants double precision, parameter :: PI = 3.1415926535897932d0 end module constants program angles use constants ! Constants defined above ! Disable implicit declarations (i-n rule) implicit none ! Variable definitions integer :: angle ! Statements angle = 0 do ! Body print *, 'sine(',angle,') = ', sin(angle * PI / 180.0d0) ! Housekeeping and condition angle = angle + 1 if ( angle > 360.0d0 ) exit enddo end program
The advantage of an unstructured do loop is that the condition can be checked anywhere within the body of the loop. Structured loops always check the condition at the beginning or end of the loop. The down side to unstructured do loops is that they are unstructured. They require less planning (design) before implementation, which often leads to messier code that can be harder to follow.
Like Fortran's exit
statement, the C
break
statement immediately terminates the current
loop so the program continues from the first statement after the
loop.
Unlike Fortran, C does not have a unstructured loop construct,
so use of break
is never necessary. Well-structured
code will generally use the loop condition to terminate the loop,
and an if
statement to trigger a break
would be redundant. However, we can create an unconditional
loop like Fortran's unstructured do
loop using
while ( true )
:
Example 20.4. Unstructured C Loop
#include <stdio.h> #include <math.h> #include <stdbool.h> // Define "true" constant int main() { int angle; angle = 0; while ( true ) { printf("sine(%d) = %f\n", angle, sin(angle * M_PI / 180.0)); if ( ++angle > 359.0 ) break; } return 0; }
Write a C or Fortran program using that prints the square
root of every number
entered by the user until they enter a sentinel value of
-1. Use a C break
or a Fortran
exit
to terminate the loop.
Please enter an integer, or -1 to quit. 4 sqrt(4) = 2.000000 Please enter an integer, or -1 to quit. 9 sqrt(9) = 3.000000 Please enter an integer, or -1 to quit. 10 sqrt(10) = 3.162278 Please enter an integer, or -1 to quit. -1