Unstructured Loops

Fortran Unstructured Do Loops

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.

The C break Statement

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;
}
                

Practice

Note

Be sure to thoroughly review the instructions in Section 2, “Practice Problem Instructions” before doing the practice problems below.
  1. 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