None. The above structures are all that are needed for a programming language to have full computational power (in the sense described above.)
You might think that these rules are OK for ensuring stable code, but that they are too restrictive. Some power must be lost. But nothing is lost. Two researchers, Böhm and Jacopini, proved that any program can be written in a structured style [2]. No computing power is lost by restricting control flow to the forms of structured programming.
The other control structures you may know,
such as case
,
do-until
, do-while
, and for
are not needed.
However, they are sometimes convenient,
and are usually regarded as part of structured programming.
The for
statement is very convenient and should be used whenever it is appropriate.
The case
statement is sometimes useful, but often misused.
break
and continue
should be regarded as poison.
Any program you write can be written in a structured style. You should think about a problem and the means of solving it at the algorithmic level. Once you have the solution designed, the implementation becomes mere "coding." Coding is the near-mechanical translation of a design into code. With a good design, the program should fall naturally into structured code. Design and coding should not be done simultaneously (in an ideal world, where all projects are on time, and dot-coms never fail).
(Thought question:) Can a structured program sometimes be speeded up by using non-structured control?