Must a control structure's test expression result in a Boolean value?
Ultimately, yes, but in the context of a test expression, zero, an undefined variable, or an empty string will be converted to false. All other values will evaluate to true.
Must I always surround a code block in a control statement with brackets?
If the code you want executed as part of a control structure consists of only a single line, you can omit the brackets.