next up previous contents
Next: Invocação de funções Up: Organização básica de programas Previous: Expressão para manipulação de   Sumário


Controle do fluxo de execução

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.

Figura: Seleção com if...else em C: (a) fluxograma; (b) equivalente em C.
\includegraphics[width=90mm]{ifelsec.eps}

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:

  1. Em C, há diferenças entre letras minúsculas e maiúsculas. Como todos os comandos em C, as palavras chaves deste comando estão em letras minúsculas. Assim, as formas IF (ou If ou iF) não são formas válidas em C para denotar o comando if.

  2. Ao contrário do que ocorre em Pascal ou FORTRAN, a palavra then não faz parte da sintaxe deste comando em C.

  3. A cláusula else pode ser omitida quando a expressão a executar na condição falsa for nula.

  4. No caso de haver mais de um if que possa ser associado a uma cláusula else, esta será associada ao comando if precedente mais próximo.

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.

Figura C.4: Seleção em C usando a forma switch... case. Observe que o conjunto de ações associado a cada caso encerra-se com a palavra-chave break.
\includegraphics[width=90mm]{switch.eps}

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).

Figura C.5: Seleção em C usando a forma switch...case onde se omitiu a palavra-chave break do bloco de comandos.
\includegraphics[width=90mm]{switch2.eps}

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)).

Figura: Repetição em C: (a) forma while, fluxograma; (b) forma while, código C; (c) forma do... while, fluxograma; (d) forma do...while, código C.
\includegraphics[width=80mm]{while.eps}

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.

Figura: Repetição em C usando a forma for: (a) fluxograma; (b) código C.
\includegraphics[width=60mm]{for.eps}

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.


next up previous contents
Next: Invocação de funções Up: Organização básica de programas Previous: Expressão para manipulação de   Sumário
Ivan L. M. Ricarte 2003-02-14