LINGUAGEM: Linguagem C - Capítulo 1 - Parte 7

Controle de Fluxo: Comandos de Seleção

Objetivos:

Nesta aula, iremos iniciar o estudo dos comandos e construção em C para o CONTROLE do FLUXO de EXECUÇÃO de um programa. Especificamente, abordaremos os comandos para realização de DESVIOS CONDICIONAIS:
  • if ... else ...
  • switch ... case ...
também conhecidos como COMANDOS DE SELEÇÃO.

Controle de Fluxo:

Em C, bem como em toda linguagem moldada sob os princípios da PROGRAMAÇÃO ESTRUTURADA, o fluxo de execução de um programa é controlado de acordo com algumas idéas simples e fundamentais:
  • SEQÜÊNCIA e BLOCOS de comandos
  • DESVIOS
    • CONDICIONAIS
    • INCONDICIONAIS
  • ITERAÇÕES (LAÇOS)

Seqüência e Blocos de Comandos:

Uma SEQÜÊNCIA de COMANDOS é uma lista de COMANDOS delimitados por ; .
Um BLOCO de COMANDOS é qualquer SEQÜÊNCIA de COMANDOS delimitada por chaves {} .

Em um BLOCO de COMANDOS, podem-se distinguir três tipos básicos de COMANDOS:
  1. DECLARAÇÃO de VARIÁVEIS LOCAIS
    • sempre no início do BLOCO
    • variáveis declaradas dentro de um BLOCO podem ter o mesmo nome de uma outra variável situada em um BLOCO mais externo; neste caso, a variável dentro do BLOCO mais interno se sobrepõe a variável do BLOCO mais externo.
  2. COMANDOS de EXPRESSÃO formados por uma expressão C válida
    • ATRIBUIÇÕES
    • CHAMADAS de FUNÇÃO
  3. COMANDOS de CONTROLE de FLUXO atuando sobre COMANDOS individuais ou então outros BLOCOS de COMANDOS.
    • DESVIOS CONDICIONAIS
    • DESVIOS INCONDICIONAIS
    • ITERAÇÕES

Por exemplo:
int f() { /* início de BLOCO */
   int a,b;       /* DECLARAÇÕES LOCAIS */

   a = 10;        /* comando de EXPRESSÃO   */
   b = a % 3 ;  /* comando de EXPRESSÃO */ 

   if ( a > 2 )   /* comando de CONTROLE de FLUXO */
   {   /* início de BLOCO */
 int x,y;  /* DECLARAÇÕES LOCAIS */

 x = 2*a;  /* comando de EXPRESSÃO   */
        for ( y =1; y < 10; y++ ) /* comando de CONTROLE de FLUXO */
  x += y;  /* comando de EXPRESSÃO   */
 ...
         
   }   /* fim de BLOCO */ 
   else
      printf("a é menor que 2\n");   /* comando de EXPRESSÃO */

} /* fim de BLOCO */ 

Desvios Condicionais ( Comandos de SELEÇÃO ):

Em C, há dois comandos para DESVIOS CONDICIONAIS:
  • if ... else
  • switch ... case ... break ... default

O comando if ... else ...

Forma Geral
if ( condição ) 
        ação_se_não_zero
     else
        ação_se_zero         
onde:
  • tanto ação_se_não_zero quanto ação_se_zero podem ser:
    • um único comando de EXPRESSÃO ou
    • um outro comando de CONTROLE de FLUXO ou
    • um BLOCO de COMANDOS
  • a parte else ação_se_zero é opcional
  • a condição deve ser uma EXPRESSÃO ESCALAR (ou seja, uma EXPRESSÃO que quando avaliada produza um inteiro, um caracter ou ponto flutuante.)

Observação:
  • em if ... else ... aninhados cada else se refere ao if mais próximo dentro do mesmo bloco.

O comando switch ... case ... break ... default


Observações:
  • O comando switch só pode testar igualdade; já o comando if pode avaliar uma expressão lógica ou relacional;
  • Duas constantes case no mesmo switch não podem ter valores idênticos;
  • Constantes caracter são automaticamente convertidas para seus valores inteiros;
  • Os comandos break dentro do switch são opcionais. Eles terminam a seqüência de comandos associados com cada constante. Se o comando break é omitido, a execução continua pelos próximos comandos case até que um break, ou o fim do switch, seja encontrado.

Atividade 1

Escreva um programa calculadora que leia dois números double e em seguida realize uma dentre um conjunto de operações disponíveis. As operações disponíveis são:
  • adição (+)
  • subtração (-)
  • multiplicação (*)
  • divisão (/)
  • divisão inteira (div)
  • resto divisão inteira (mod)
  • exponenciação inteira (^)

...

Leitura Recomendada:

  • CCT capítulo 3
  • K&R capítulos 3

Exercícios:

  1. Complete as atividade 1 acima;
  2. Extenda a atividade 1 para lidar com as operações fat (fatorial), sen (seno), cos (coseno) e rq (raiz quadrada). Nestes casos, apenas um número deve ser lido.
Bibliografia e fonte:

  • [CCT] Schildt, H. (1996) C, completo e total: 3a Ed.. São Paulo, Makron.
  • LP, UFMA; Coutinho, Lucian. Linguagem de programação para ciencia da computação da ufma.http://www.deinf.ufma.br/~lrc/2009.1/LP/
  • [K&R] KERNIGHAN, B. e RITCHIE, D. (1990) C, a linguagem de programação: padrão ANSI. Rio de Janeiro: Campus.
  • DEITEL, H. M. (1999) Como programar em C. Rio de Janeiro: LTC.
  • Módulo Consultoria e Informática (1989) Linguagem C: programação e aplicações. Rio de Janeiro: LTC.