Programação C/C++
Prof. Márcio Sarroglia Pinho

Comandos de Repetição

Os comandos de repetição são um recurso que permite que um certo trecho do código de um programa seja repetido um certo número de vezes.

Na liguagem C existem três comandos de repetição: while, do-while e for.


Comando while

O comando while permite que um certo trecho de programa seja executado ENQUANTO uma certa condição for verdadeira. A forma do comando while é a seguinte:
while (condição)
{
// comandos a serem repetidos
// comandos a serem repetidos
}
// comandos após o 'while'
O funcionamento é o seguinte:
  1. Testa a condição;
  2. Se a  condição for falsa então pula todos os comandos do bloco subordinado ao while e passa a executar os comandos após o bloco do while.
  3. Se  condição for verdadeira então executa cada um dos comandos do bloco subordinado ao while.
  4. Após executar o último comando do bloco do while volta ao passo 1.
O comando while deve ser usado sempre que:

Exemplos

 
int continua, contador;

continua = 's';
contador = 0;

while (continua == 's')  // enquanto for igual a 's'
{
// comandos a serem repetidos

   printf("Repentindo....\n");

   contador = contador + 1;

   printf("Tecle 's' se deseja continuar\n");
   continua = getch();
}

if (contador == 0)
   printf("O bloco NAO foi repetido.");
else printf("O bloco foi repetido %d vezes", contador);

 

 
// Programa que calcula a idade média de um grupo de pessoas.
// A finalização da entrada de números é dada por um -1

int soma, quantidade, idade;

float media;

soma = 0;
quantidade = 0; 
idade = 0;

while (idade != -1) 
{
// comandos a serem repetidos

   printf("Idade da pessoa %d. (tecle -1 se quiser encerrar).\n",
               quantidade+1);
   scanf("%d", &idade);

   if (idade >=0)
   { 
     soma = soma + idade;
     quantidade = quantidade + 1;
   }
}

// Faz o calculo da media de idade

if (quantidade >0)
{
   media = (float) soma / quantidade;
   printf("A media de idade das %d pessoas eh: %5.2f", quantidade,
            media);
}
else printf("Nenhum dado foi informado."); 

Observação:

Tenha atenção especial com o teste do comando while. As variáveis usadas no teste devem ter sido inicializadas antes do teste.

Comando do-while

O comando do-while permite que um certo trecho de programa seja executado ENQUANTO uma certa condição for verdadeira. A forma do comando do-while é a seguinte:
do
{
// comandos a serem repetidos
// comandos a serem repetidos
} while (condição);

// comandos após o 'do-while'

O funcionamento é o seguinte:
  1. Executa os comando dentro do bloco do-while;
  2. Testa a condição;
  3. Se a  condição for falsa então executa o comando que está logo após o bloco subordinado ao do-while .
  4. Se  condição for verdadeira então volta ao passo 1.
O comando do-while deve ser usado sempre que:

Exemplos

 
int continua, contador;

contador = 0; 

// nao precisamos inicializar a variável 'continua' pois o teste é feito 
// depois

do 
{
// comandos a serem repetidos

   printf("Repentindo....\n");

   contador = contador + 1;

   printf("Tecle 's' se deseja continuar\n");
   continua = getch();
} while (continua == 's') 

printf("O bloco foi repetido %d vezes", contador);

 
// Programa que calcula a idade média de um grupo de pessoas.
// A finalização da entrada de números é dada por um -1

int soma, quantidade, idade;

float media;

soma = 0;
quantidade = 0; 

do {
     printf("Idade da pessoa %d. (tecle -1 se quiser encerrar).\n",
               quantidade+1);
     scanf("%d", &idade);

     if (idade >=0)
     { 
       soma = soma + idade;
       quantidade = quantidade + 1;
     }
   } while (idade != -1);

// Faz o calculo da media de idade

if (quantidade > 0)
{
   media = (float) soma / quantidade;
   printf("A media de idade das %d pessoas eh: %5.2f", quantidade,
            media);
}
else printf("Nenhum dado foi informado."); 



Comando for

O comando for permite que um certo trecho de programa seja executado um determinado número de vezes.
A forma do comando for é a seguinte:
for (comandos de inicialização;condição de teste;incremento/decremento)
{
// comandos a serem repetidos
// comandos a serem repetidos
}

// comandos após o 'for'

O funcionamento é o seguinte:
  1. Executa os comandos de inicialização;
  2. Testa a condição;
  3. Se a  condição for falsa então executa o comando que está logo após o bloco subordinado ao for .
  4. Se  condição for verdadeira então executa os comandos que estão subordinados ao for;
  5. Executa os comandos de incremento/decremento;
  6. Volta ao passo 2.
O comando for deve ser usado sempre que:

Exemplos

 
int contador;

for (contador = 0; contador < 10; contador = contador+1)
{
  printf("Contador : %d\n",contador);
}

printf("Valor do Contador após o laço: %d\n",contador);

 
int contador;

for (contador = 10; contador > 0; contador = contador-1)
{
  printf("Valor do Contador após o laço: %d\n",contador);
}

printf("Valor do Contador após o laço: %d\n",contador);

Observações:

  1. Os comandos de inicialização executados apenas 1 vez;
  2. O contador é incrementado/decrementado sempre ao final da execução do bloco;
  3. O teste é feito sempre antes do início da execução do bloco de comandos.

Comandos de Desvios

Os laços em C possuem dois comandos de desvios: break e continue. Estes comandos funcionam com todos os comandos de repetição.

O comando break encerra o laço no ponto em que for executado. 


// Este programa le NO MAXIMO 3 números positivos
// Caso um número negativo seja digitado no meio da seqüência o laço é
// encerrado de imediato

#include <stdio.h>
#include <conio.h>

void main()
{
  int contador, numero;
  for (contador = 1; contador <= 3; contador = contador+1)
  {
    scanf("%d",&numero);
    if (numero < 0)
        break;   // encerra o laço neste ponto !!!
  }
  printf ("Foram digitados %d numeros validos", contador-1);
  getch();
}

O comando continue desvia o fluxo para o início do laço. 

#include <stdio.h>
#include <conio.h>

void main()
{
  int contador, numero;

  clrscr();
  for (contador = 1; contador <= 5; contador = contador+1)
  {
    printf("Inicio do laco. Passo %d\n", contador);

    if ((contador % 2) == 0)
    {
      printf("Terminado antes do tempo....\n");
      continue;
    }
    printf ("Final do Laco. Passo %d\n", contador);
  }
  getch();
}
 
 

RESULTADO:

Inicio do laco. Passo 1
Final do Laco. Passo 1
Inicio do laco. Passo 2
Terminado antes do tempo....
Inicio do laco. Passo 3
Final do Laco. Passo 3
Inicio do laco. Passo 4
Terminado antes do tempo....
Inicio do laco. Passo 5
Final do Laco. Passo 5