Ir para o conteúdo

CCT-UFCA/Ciência da Computação/Introdução à Programação/Estrutura de Repetição

De Wikiversidade

Estrutura de Repetição

[editar | editar código]

As estruturas de repetição, também conhecidas como laços de repetição ou loops, são comandos que permitem executar um bloco de código várias vezes, enquanto uma condição for verdadeira. Elas são fundamentais na programação para automatizar tarefas repetitivas, percorrer listas, realizar cálculos acumulativos, entre outros. Em C, existem três estruturas principais de repetição:

Laço de repetição com controle explícito - for

[editar | editar código]

O for é usado quando se sabe exatamente quantas vezes o laço deve ser executado. Ele agrupa a inicialização, a condição e o incremento/decremento em uma única linha.

for (int i = 0; i < 5; i++) {
    printf("i = %d\n", i);
}

Esse exemplo é composto pelas seguintes partes:

  1. inicialização: int i = 0
  2. condição de parada: i < 10
  3. incremento/decremento: i++
  4. bloco a ser repetido: printf("i = %d\n", i);

A saída desse será:

i = 0
i = 1
i = 2
i = 3
i = 4

Veja este exemplo utilizando duas variáveis na inicialização e no incremento. A condição de parada utiliza o operador && para garantir que o laço continue enquanto i for menor que 5 e j for menor que 10. Esse tipo de construção é válido, mas serve apenas como exemplo didático. Na prática, quanto mais elementos você adiciona no controle de um laço, maior é a chance de dificultar a leitura e aumentar a possibilidade de erros. Por isso, deve ser usado com cautela.

for (int i = 0, j = 0; i < 5 && j < 10; i++, j += 2) {
    printf("i = %d, j = %d\n", i, j);
}

A saída desse será:

i = 0, j = 0
i = 1, j = 2
i = 2, j = 4
i = 3, j = 6
i = 4, j = 8

Esse algoritmo utiliza dois laços for aninhados para desenhar um triângulo de asteriscos na tela. O primeiro laço é responsável por controlar as linhas, começando de 1 e indo até a quantidade total definida pela variável linhas. Dentro dele, há um segundo laço que controla quantos asteriscos serão impressos em cada linha. A quantidade de asteriscos corresponde ao número da linha atual, ou seja, na primeira linha é impresso um asterisco, na segunda dois, na terceira três e assim por diante, até completar o triângulo. Ao final de cada linha de asteriscos, é executado um printf("\n") para quebrar a linha e passar para a próxima. Dessa forma, os laços vão construindo linha por linha, formando o triângulo de maneira progressiva até alcançar o tamanho determinado.

for (int i = 1; i <= 5; i++) {
    for (int j = 1; j <= i; j++) {
        printf("*");
    }
    printf("\n");
}

A saída será:

*
**
***
****
*****

Laço de repetição com teste no início - while

[editar | editar código]

O laço while repete um bloco de código enquanto a condição for verdadeira. Se essa condição for falsa já na primeira verificação, o bloco não é executado nenhuma vez. Embora seja semelhante ao for, em muitos casos o uso do while torna o código mais claro e fácil de entender.

int i = 0;

while(i < 5) {
    printf("i = %d\n", i);
    i++;
}

Este exemplo é semelhante ao primeiro que vimos sobre laços e exibirá o seguinte resultado:

i = 0
i = 1
i = 2
i = 3
i = 4

Para consolidar o entendimento, observe estes dois exemplos e note a diferença entre eles:

/* Código 1 */
int i = 0;
while(i++ < 5) {
    printf("i = %d\n", i);
}

/* Código 2 */
int i = 0;
while(++i < 5) {
    printf("i = %d\n", i);
}

Embora os exemplos sejam semelhantes, eles geram saídas distintas. A posição do operador de incremento altera totalmente o comportamento da condição. No primeiro caso, a comparação entre i e 5 ocorre antes do incremento; no segundo, o incremento acontece antes da comparação. Veja os resultados:

/* Resultado do código 1 */
i = 1
i = 2
i = 3
i = 4
i = 5

/* Resultado do código 2 */
i = 1
i = 2
i = 3
i = 4

Laço de repetição com teste no final - do ... while

[editar | editar código]

O do...while executa o bloco de código pelo menos uma vez, pois a condição é verificada após a execução.

int i = 0;
do {
    printf("Valor de i: %d\n", i);
    i++;
} while (i < 5);

Funcionamento: Executa o bloco e depois verifica se i < 5. Se for verdadeiro, repete.

Comandos de Controle dentro dos Laços

[editar | editar código]

Dentro das estruturas de repetição, existem comandos que controlam o fluxo da execução:

Interrompe imediatamente o laço mais próximo, saindo dele.

for (int i = 0; i < 10; i++) {
    if (i == 5) {
        break;
    }
    printf("%d\n", i);
}

Nesse exemplo, o laço imprime os valores de i de 0 a 4. Quando i chega a 5, a condição do if é satisfeita e o break interrompe o loop, retomando a execução a partir da instrução imediatamente seguinte. A saída será:

0
1
2
3
4

continue:

[editar | editar código]

Faz o laço pular o restante do bloco atual e passar diretamente para a próxima iteração.

for (int i = 0; i < 10; i++) {
    if (i % 2 == 0) {
        continue;
    }
    printf("%d\n", i);
}

A saída será:

1
3
5
7
9