Estruturas de repetição
Estruturas de Repetição
Você irá aprender
O que são estruturas de repetição.
Porque utilizar elas.
Como utilizar os diferentes tipos de estruturas de repetição.
Como utilizar as instruções de controle de fluxo.
Pré-requisitos
Tratando problemas repetitivos
Nesta aula trabalharemos com estruturas de repetição ou loops, que, assim como o nome sugere, permite que seja possível realizar um grupo de instruções de maneira repetida.
Por exemplo, vamos supor que queremos imprimir a frase "Hello world!" dez vezes. Se não fossemos usar estruturas de repetição, o nosso código seria assim:
#include<stdio.h>
int main(void) {
printf("Hello world!\n");
printf("Hello world!\n");
printf("Hello world!\n");
printf("Hello world!\n");
printf("Hello world!\n");
printf("Hello world!\n");
printf("Hello world!\n");
printf("Hello world!\n");
printf("Hello world!\n");
printf("Hello world!\n");
return 0;
}
E claro que só olhando esse código você percebe que isso é excesivo de mais, e que provavelmente deve ter uma solução melhor do que isso. Pois bem, com estruturas repetitivas, podemos transformar esse bloco de instruções repetitivas, em isso:
#include<stdio.h>
int main(void) {
for(int i = 0;i < 10; i++) {
printf("Hello World!\n");
}
return 0;
}
Execute ambos os códigos, e perceba que chegamos no mesmo resultado, porém de forma mais simples e elegante.
Existem várias maneiras de fazer uma estrutura de repetição, cada uma com seus próprios casos de uso específicos. Aqui estão algumas das maneiras mais comuns de fazer um loop em C:
For
A estrutura "for" é uma maneira popular criar um loop de repetição, geralmente usada para iterar por um número específico de vezes. A sintaxe básica de um loop "for" em C é a seguinte:
for (inicialização; condição; atualização) {
// código para ser executado
}
Como pode ser ver, essa é uma sintaxe um pouco diferente daquela que estamos acostumados, com três partes diferentes separadas por ponto e vírgula, mas veremos um exemplo mais concreto, talvez isso irá ajudar a deixar as coisas mais claras.
for (int i = 0; i < 10; i++) {
printf("%d\n", i);
}
Aqui temos um exemplo de um loop "for" usado para imprimir os valores de 0 até 9, acredito que só com esse exemplo tenha ficado mais claro, mas acho importante explicar cada elemento dentro do for.
Inicialização
Nesta parte você irá fazer a declaração ou atribuição de variáveis, aqui é importante notar que geralmente inicializamos variáveis que serão usadas para iterar pelo for.
for (int i = 0; i < 10; i++) {
^
inicialização
Obs.: Aqui podemos tanto fazer declaração como atribuição:
int i;
for (i = 0; i < 10; i++) {
printf("%d\n", i);
}
Obs2.: Podemos iniciar mais de uma variável na inicialização (desde que todas tenham o mesmo tipo), separando cada variável com uma vírgula:
for (int i = 0, j = 0; i < 10; i++) {
printf("%d\n", i);
}
Condição de parada
Assim como as estruturas condicionais, loops também utiliza uma condição, chamada "Condição de Parada". Em outras palavras só entraremos no loop de repetição e iremos continuar no mesmo, se tal condição for verdadeira. Lembrando obviamente que a nossa condição pode ser também uma expressão (ou seja várias condições aninhadas uma com as outras).
for (int i = 0; i < 10; i++) {
^
condição de
parada
Nesta área, nós geralmente criamos uma condição com a variável que iniciamos na parte de inicialização, no nosso caso o "i" sendo igual a zero, e nós iremos continuar a fazer o loop enquanto "i" for menor que dez (sendo essa a nossa condição).
Obs.: De todas as seções do for, esta é a única que é obrigatória, as outras duas seções podem ser deixadas em branco e o "for" ainda funcionaria.
int i = 0;
for( ; i < 10; ) {
print("%d\n",i);
i++;
}
Expressão de atualização
Por fim, temos a seção de atualização, pois é nela onde atualizamos as variáveis responsáveis em controlar o fluxo da estrutura. De forma geral, nessa seção incrementamos/decrementamos a variável iniciada na primeira seção.
Chamamos essa seção de expressão, pois na realidade, podemos fazer uma sequência infinita de atribuições, lembrando obviamente de que precisamos implementar a lógica para que eventualmente faça o código sair do loop, caso contrário, o código irá ficar em um loop infinito.
for (int i = 0; i < 10; i++) {
^
incremento
Obs.: a seção de incremento não é acionada quando entramos no laço "for", quando entramos na seção de loop, as instruções de inicialização de condição são acionadas, mas a de incremento é apenas acionadas depois da primeira iteração.
Obs2.: Podemos fazer atribuições ou incrementos em mais de uma variável dentro dessa seção, desde que os mesmos sejam separados por vírgula, observe o exemplo abaixo:
for (int i = 0, j = 0; i < 10; i++, j++) {
printf("%d\n", i);
}
While
O loop while executa repetidamente um bloco de código enquanto uma condição especificada for verdadeira. A sintaxe básica de um loop while é a seguinte.
while (condição) {
// código a ser executado
}
Aqui, a estrutura funciona de forma bem parecida com o loop for, com a diferença que este apenas possui espaço para colocar a condição, excluindo o espaço para atribuição e incremento/decremento.
Eis um exemplo:
int i = 0;
while (i < 10) {
printf("%d\n", i);
i++;
}
Do while
O loop "do-while" é semelhante ao loop "while", mas a condição é verificada após a execução do bloco de código. Isso significa que o bloco de código sempre será executado pelo menos uma vez. A sintaxe básica de um loop "do-while" é a seguinte:
do {
// código a ser executado
} while (condição);
Eis um exemplo:
int i = 0;
do {
printf("%d\n", i);
i++;
} while (i < 10);
Controladores de fluxo
Além dessas construções básicas de loop, a linguagem C, assim como outras linguagens, também fornece várias outras construções usadas para loop, como as instruções break e continue. Essas construções podem ser usadas para alterar o fluxo de controle em um loop, permitindo estruturas de loop mais complexas e poderosas, porém também podem deixar o código mais confuso/dificíl de ser analisado.
Finalizaremos a aula olhando brevemente como elas funcionam.
Break
O break funciona para interromper por completo o fluxo do laço de repetição, forçando o mesmo a sair.
for (int i = 0; i < 10; i++) {
if (i == 5)
break;
printf("%d\n", i);
}
Neste caso, estamos forçando o laço de repetição sair quando "i" for igual a 5, logo terminando o "for" antecipadamente.
Continue
Diferente do break, que interrompe o funcionamento do loop, a instrução "continue" permite que o laço de repetição seja pulado, como no exemplo abaixo, onde a iteração do 5 é pulada por conta do continue.
for (int i = 0; i < 10; i++) {
if (i == 5)
continue;
printf("%d\n", i);
}
Depois teste o código, e perceba que agora, o número 5 não é imprimido.
Línks uteis
Last updated