while E do-while (cont.)while é um pre-test loop. Isso significa que a condição é avaliada (testada) antes da primeira execução do bloco de código.#include <stdio.h>
int main() {
int contador = 0;
int limite = 5;
while (contador < limite) {
printf("Execução %d\n", contador);
contador++; // Incrementa o contador
}
printf("Loop finalizado! Contador atual: %d\n", contador);
return 0;
}
Escreva um programa que utilize o loop while para imprimir todos os números pares entre 2 e 20 (inclusive). O contador deve ser incrementado de forma eficiente.
while E do-while (cont.)O loop do-while é uma estrutura de repetição que garante, por definição, a execução do seu bloco de código pelo menos uma vez. Ele só verifica a condição após o término da primeira iteração.
while: Teste do-while: Execução int x = 0;
do {
printf("Executa pelo menos uma vez\n");
x++;
} while (x < 5); // Verifica depois da execução.
#include <stdio.h>
int main() {
int contador = 10;
do {
printf("Executando bloco. Contador: %d\n", contador);
contador++; // Incrementa o contador
} while (contador < 5); // Condição falsa desde o início
printf("\nLoop finalizado. O código rodou UMA VEZ, mesmo que a condição fosse FALSA.\n");
return 0;
}
Note que
contadorcomeça em 10 e a condição é< 5. Um loopwhileteria pulado o bloco. Odo-while, no entanto, executou o código uma vez antes de verificar a condição falsa.
while e do-while| Característica | while | do-while |
|---|---|---|
| Ponto de Teste | Início do bloco (Pré-Teste) | Fim do bloco (Pós-Teste) |
| Execução Mínima | Zero vezes | Uma vez |
| Sintaxe Chave | while (condicao) |
do { ... } while (condicao); |
| Melhor Uso | Processamento condicional em streams ou buffers. | Interação com usuário, menus de validação. |
Na imagem: Fluxogramas de loops
whileedo-while. Fonte: Egoshkin Danila Igorevich
Implemente um sistema de menu básico utilizando do-while. O menu deve exibir as opções A, B, C ou S. Dentro do loop, o programa deve solicitar ao usuário que escolha uma opção. O loop só deve parar quando a opção escolhida for S (Sair). Se a entrada não for válida, exiba um erro e continue pedindo até receber 'S'.
Ao utilizar o comando while, é fundamental adotar boas práticas para evitar a ocorrência de loops infinitos, que podem comprometer a execução do programa, causando a sua paralisação.
false, resultando em uma execução contínua sem término.while (true):
printf("Loop");
break e continuebreak: Sai imediatamente do bloco mais próximo (loop ou switch). Equivalente a "quebrar" a corrente da execução.continue: Pula o restante do corpo atual do loop e vai para a próxima iteração (incremento/verificação).for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // Para no 5. Loop encerra.
}
printf("%d ", i);
}
for (int j = 0; j < 5; j++) {
if (j % 2 == 0) {
continue; // Pula números pares
}
printf("%d\n", j);
}
int contador = 10;
while (count > 0) {
printf("Inicio da iteracao");
if (count == 5):
printf("Fim da iteracao por break");
break;
printf("Fim da iteracao");
}
printf("Saiu do Loop");
Código limpo é código legível e manutenível.
index ou contador se o contexto permitir.O domínio das estruturas de controle é a base da lógica algorítmica.
Resumo:
{} definem escopo e agrupamento.if/else para condições, switch para estados discretos.for (contagem), while (condição prévia), do-while (condição posterior).break (sair), continue (pular iteração).Próxima Aula:
Dúvidas e Discussão
Problema 1: O Menu de Simulação. Crie um programa que exiba um menu simples com as opções 1 a 3. O programa deve ler o número digitado pelo usuário e utilizar switch para decidir qual mensagem correspondente será exibida. Se o usuário digitar algo fora do padrão, use default.
Problema 2: Tabuada Dinâmica. Escreva um programa que peça ao usuário um número inteiro n e imprima a tabuada de 1 a 10 para esse número utilizando um loop for.
Qual é o resultado da execução deste código? Explique o motivo.
int x = 5;
{
int x = 10;
printf("%d", x); // O que sai aqui?
}
printf("%d", x); // O que sai aqui?
Por que o break é obrigatório no final de cada case em um bloco switch? O que acontece se omitirmos?
Identifique o erro lógico neste loop e explique como corrigi-lo para imprimir números de 1 a 5.
int i = 1;
while (i <= 5) {
printf("%d\n", i);
} // Falta atualização de i
```c #include <stdio.h> int main() { char escolha; // Variável para armazenar a opção escolhida pelo usuário do { printf("\n---------------------------------------------\n"); printf("Escolha uma opção:\n"); printf("[A] - Opção Alfa\n"); printf("[B] - Opção Beta\n"); printf("[C] - Opção Gama\n"); printf("[S] - Sair do Programa\n"); printf("Digite sua escolha: "); // Usamos scanf para ler apenas um caractere if (scanf(" %c", &escolha) != 1) { // Trata o caso de falha na leitura (ex: EOF) printf("\nERRO FATAL DE LEITURA. Encerrando.\n"); break; // Sai do loop se a leitura falhar } switch (escolha) { case 'A': printf("\n EXECUTANDO OPÇÃO ALFA: Dados de teste processados com sucesso.\n"); break; case 'B': printf("\n EXECUTANDO OPÇÃO BETA: Conexão simulada estabelecida.\n"); break; case 'C': printf("\n EXECUTANDO OPÇÃO GAMA: Relatório gerado com sucesso.\n"); break; case 'S': // Se a escolha for 'S', o loop terminará na condição while. printf("\n[INFO] Encerrando sistema. Até mais!\n"); break; default: // Este bloco é crucial para lidar com entradas inválidas (ex: 'X', '1', etc.) printf("\n!!! ERRO !!! Opção '%c' não reconhecida. Por favor, escolha A, B, C ou S.\n", escolha); break; } // O loop continua enquanto a variável 'escolha' NÃO for igual a 'S'. } while (escolha != 'S'); return 0; // Indica que o programa foi executado com sucesso } ```
```c #include <stdio.h> int main() { int opcao; printf("Digite sua opção (1-3): "); scanf("%d", &opcao); switch(opcao) { case 1: printf("Opção 1 selecionada.\n"); break; case 2: printf("Opção 2 selecionada.\n"); break; case 3: printf("Opção 3 selecionada.\n"); break; default: printf("Opção inválida!\n"); break; } return 0; } ```
```c #include <stdio.h> int main() { int n, i; printf("Digite um número: "); scanf("%d", &n); for (i = 1; i <= 10; i++) { printf("%d x %d = %d\n", n, i, n * i); } return 0; } ```