Linguagem C: Controle de Fluxo


Estruturas de Decisão

Comando If

O comando if permite executar um comando (ou conjunto de comandos entre { e }) se uma dada condição for satisfeita.

if (<condição>)
   <comando>;

If com um bloco de comendos entre { e }.

if (<condição>) 
{
    <sequencia-de-comandos>
}

Comando If - Else

if (<condição>)
   <comando1>;
else
   <comando2>;
if (<condição>)
{
   <sequencia-de-comandos1>
}
else
{
   <sequencia-de-comandos2>
}
Exemplo:
main() {
   int x = 0;
   printf("Digite x: ");
   scanf("%d", &x);

   if (x == 0)
      printf("x == 0");
   else
      printf("x != 0");

   int y = 0;
   printf("\nDigite y: ");
   scanf("%d", &y);

   if (y == 0) 
   {
      printf("y == 0");
   }
   else
   {
      printf("y != 0"); 
   }

   printf("\nFIM");
}

Comando Condicional

O comando condicional ? oferece uma alternativa ao if-else em algumas situações. Este comando permite avaliar uma condição, que caso seja verdadeira retorna o valor da primeira expressão e se for falsa retorna o valor da segunda expressão.

<condição> ? <expressão1> : <expressão2>;
Exemplo:
main() {
   int x = -1;
   printf("Digite x: ");
   scanf("%d", &x);
   int y = x == -1 ? 0 : x;
   printf("Valor de y: %d", y);
}
Exemplo:
main() {
   int x = 0;
   printf("Digite x: ");
   scanf("%d", &x);

   printf( (x == 0) ? "x == 0" : "x != 0" );

   int y = 0;
   printf("\nDigite y: ");
   scanf("%d", &y);

   printf( (y == 0) ? "y == 0" : "y != 0" ); 
   printf("\nFIM");
}

Comando Switch

O comando switch serve associar conjuntos de comandos a certos valores resultantes de uma expressão. Funciona como um substituto ao if para casos em que um comando ou conjunto de comandos é executado para cada valor resultante de uma expressão. Um exemplo de uso do switch é o tratamento de menus. Para cada opção de menu, uma ação deve ser executada. A opção de menu é avaliada na expressão e de acordo com seu valor, a ação correspondente é executada.

switch( <expressao> ) { 
   case constante1  : Sequencia de instrucoes 1
   case constante2  : Sequencia de instrucoes 2
   ...
   case constante n : Sequencia de instrucoes n
   default : Sequencia de comando x
}

Exemplo:

main() {
   int mes;
   printf("Digite o numero do mes: ");
   scanf("%d", &mes);

   switch (mes) {
      case  1: printf("Janeiro");   break;
      case  2: printf("Fevereiro"); break;
      case  3: printf("Março");     break;
      case  4: printf("Abril");     break;
      case  5: printf("Maio");      break;
      case  6: printf("Junho");     break;
      case  7: printf("Julho");     break;
      case  8: printf("Agosto");    break;
      case  9: printf("Setembro");  break;
      case 10: printf("Outubro");   break;
      case 11: printf("Novembro");  break;
      case 12: printf("Dezembro");  break;
      default: printf("Mes inexistente");
   }
}

Estruturas de Repetição

Comando For

O comando for permite executar um comando (ou bloco de comandos quando usamos { }) repetidas vezes. Antes da primeira iteração ocorrer, os comandos iniciais são executados e a condição de entrada é testada. Se a condição for verdadeira (valor 1), a primeira iteração é executada. Quando chega-se ao final da primeira iteração, executamos os comandos pós-iteração. Em seguida, a condição de entrada é checada novamente e se for verdadeira, a segunda iteração é executada. Esse processo continua até a condição ser falsa.

for ( <comandos-iniciais>; <condição-entrada>; <comandos-pós-iteração> )
   <comando>

Comando While

O comando while permite executar um comando (ou bloco de comandos quando usamos { }) repetidas vezes. A primeira iteração acontece se a condição de entrada no laço é verdadeira (valor 1) fazendo com que o comando dentro do while seja executado. Em seguida, checa-se novamente a condição de entrada no laço e, caso seja verdadeira, a segunda iteração é executada. Este processo se repete até que a condição de entrada seja falsa (valor 0).

while ( <condição-entrada> )
   <comando>

Comando Do While

O comando do while permite executar um comando (ou bloco de comandos quando usamos { }) repetidas vezes. A primeira iteração sempre acontece, já que a condição de permanência é testada apenas no final das iterações. Logo, caso a condição seja verdadeira, a segunda iteração é executada. Este processo se repete até a condição do laço ser falsa (valor 0).

do 
   <comando>
while ( <condição-permanência> )

Comandos Break e Continue

O comando break faz com que o laço corrente seja encerrado, levando ao próximo comando após o laço. Já o continue, pula a iteração corrente, passando para a próxima, mas antes testando as condições de entrada do laço.


Exemplo 1: Fatorial

main() {
   long res = 1, num;

   scanf("%d", &num);

   while (num > 1)
      res *= num--; 

   printf("%d", res);
}

Exemplo 2: Progressão Geométrica

main() {
   long contador = 1, termo = 3, soma = 3;

   printf("%d\n", termo);

   do {
      termo *= 3;
      soma += termo;
      contador++;
      printf("%d\n", termo);
   }
   while (contador != 20);

   printf("%d\n", soma);
}