C é uma linguagem que suporta a programação estruturada, ou seja, permite agrupar comandos na forma de seqüência, seleção e repetição.
Uma seqüência de comandos em uma função C é denotada simplesmente como
uma seqüência de expressões, como já exemplificado em diversos
exemplos anteriores. Além de uma expressão ser composta por um único
comando, é possível ter uma única expressão com a seqüência de
comandos separados pelo operador , (vírgula), como em
for (i=0, j=0; i<k; ++i, j+=2) {
...
}
A construção de seleção IF-THEN-ELSE é expressa em C com as palavras-chaves if...else (Figura C.3). Após a palavra-chave if deve haver uma expressão condicional entre parênteses. Se a expressão for avaliada como verdadeira, então a expressão sob if será realizada; se for falsa, a expressão sob else será executada.
Nesta figura, introduz-se o conceito de expressão composta, ou seja, a expressão da parte else deste exemplo é na verdade um bloco contendo diversas expressões. Neste caso, o bloco de comandos que deve ser executado nesta condição deve ser delimitado por chaves { e }. Algumas observações adicionais relevantes com relação a este comando são:
A construção estruturada de seleção SWITCH é suportada em C pelo comando switch...case (Figura C.4). Neste caso, após a palavra-chave switch deve haver uma variável do tipo inteiro ou caráter entre parênteses. Após a variável, deve haver uma lista de casos que devem ser considerados, cada caso iniciando com a palavra-chave case seguida por um valor ou uma expressão inteira.
|
Neste exemplo, a variável a pode ser do tipo int ou char. A palavra-chave especial default indica que ação deve ser tomada quando a variável assume um valor que não foi previsto em nenhum dos casos. Assim como a condição else no comando if é opcional, a condição default também é opcional para o switch-case. Observe também a importância da palavra-chave break para delimitar o escopo de ação de cada caso -- fossem omitidas as ocorrências de break no exemplo, a semântica associada ao comando seria essencialmente diferente (Figura C.5).
|
Comandos de repetição em C são suportados em três formas distintas. A primeira forma é while, cuja construção equivale ao comando estruturado WHILE-DO (Figura C.6(a) e (b)), enquanto que a segunda forma equivale ao comando estruturado DO-WHILE (Figura C.6(c) e (d)).
|
A terceira forma associada ao comando de repetição em C, for, facilita a expressão de iterações associadas a contadores. Um exemplo de uso deste comando é apresentado na Figura C.7.
Neste exemplo, a é uma variável que tem a função de contador, assumindo valores 0, 1, ..., MAX-1. Enquanto o valor de a for menor que MAX (a condição de término da iteração), a expressão (simples ou composta) no corpo da iteração será repetidamente avaliada.
Qualquer que seja forma usada para indicar o comando de repetição -- while, do while ou for -- há duas formas de se desviar a seqüência de execução do padrão do comando. A primeira forma, continue, serve para indicar o fim prematuro de uma iteração. A outra forma de interrupção de um comando de repetição é o comando break, que indica o fim prematuro de todo o comando de iteração. Por exemplo, em
for (a=0; a<MAX; ++a) {
if (b == 0) {
b = a;
continue;
}
c = c/b;
b = b-1;
}
se a linha com o comando continue for executada, o valor de
a será incrementado e então o teste da iteração será reavaliado
para definir a continuidade ou não do laço de repetição. Já no exemplo
abaixo,
for (a=0; a<MAX; ++a) {
if (b == 0)
break;
c = c/b;
b = b-1;
}
quando (se) b assumir o valor 0, o laço será simplesmente
interrompido.