LP2

LP2

LP2

profile-pic

Lista de Exercícios — while

Esta página reúne exercícios sobre a estrutura de repetição while em C#. Leia cada enunciado com atenção e desenvolva os programas conforme solicitado. Utilize apenas while, variáveis simples e operações básicas — sem vetores ou funções.

Selecione um exercício no menu lateral ou abaixo para começar.

Exercício 01 - Calculadora de dobros

Escreva um programa em C# que leia um número inteiro e exiba o seu dobro. Ao final, o programa deve perguntar: "Deseja calcular outro? (S/N)". Enquanto o usuário responder S, o programa repete. Qualquer outra resposta encerra.

Exemplo de Entrada e Saída

Entrada:
Número: 7
Deseja calcular outro? (S/N): S
Número: 3
Deseja calcular outro? (S/N): N

Saída:
O dobro de 7 é 14.
O dobro de 3 é 6.

Dica 1 — Raciocínio

O loop deve continuar enquanto a resposta for "S". Inicialize a variável de controle com "S" antes do while para que a primeira iteração ocorra. A condição do while compara essa variável com "S".

Dica 2 — Estrutura
resposta = "S"

enquanto (resposta == "S")
    ler numero
    exibir "O dobro de {numero} é {numero * 2}."
    ler resposta
Solução — passo a passo

A solução será revelada em etapas. Tente completar cada passo antes de avançar.

Passo 1 — Inicializar controle

Declare a variável de resposta já com "S" para que o loop entre na primeira vez:

string resposta = "S";
Passo 2 — Estrutura do while

O loop continua enquanto o usuário confirmar.
Dica: Use ToUpper() para aceitar tanto "s" quanto "S":

while (resposta.ToUpper() == "S")
{
Passo 3 — Calcular e exibir o dobro

Dentro do loop, leia o número e exiba o resultado:

    int numero = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine($"O dobro de {numero} é {numero * 2}.");
Passo 4 — Ler resposta e fechar loop

Ao final de cada iteração, leia a decisão do usuário para controlar a próxima verificação:

    resposta = Console.ReadLine();
}

Exercício 02 - Contagem progressiva

Escreva um programa em C# que leia um número inteiro N, com N > 0. Caso o valor seja inválido, informe "Valor inválido" e encerre.

Com um valor válido, exiba todos os números de 1 até N, um por linha, usando um while.

Exemplo de Entrada e Saída

Entrada:
N: 5

Saída:
1
2
3
4
5

Entrada:
N: -3

Saída:
Valor inválido

Dica 1 — Raciocínio

Valide N antes de entrar no loop. Se for válido, use um contador que começa em 1 e incrementa a cada iteração. A condição do while é contador <= N.

Dica 2 — Estrutura
ler N

se (N <= 0)
    exibir "Valor inválido"
senão
    contador = 1
    enquanto (contador <= N)
        exibir contador
        contador = contador + 1
Solução — passo a passo

A solução será revelada em etapas. Tente completar cada passo antes de avançar.

Passo 1 — Ler e validar N
int N = Convert.ToInt32(Console.ReadLine());

if (N <= 0)
{
    Console.WriteLine("Valor inválido");
}
Passo 2 — Inicializar contador

No bloco else, inicialize o contador em 1:

else
{
    int contador = 1;
Passo 3 — Loop e exibição

Exiba o valor do contador e incremente-o até atingir N:

    while (contador <= N)
    {
        Console.WriteLine(contador);
        contador++;
    }
}

Exercício 03 - Soma de salários

Escreva um programa em C# que leia a quantidade de funcionários N (N > 0). Em seguida, leia o salário de cada funcionário um por vez.

Ao final, exiba:

  • A soma total dos salários
  • A média salarial, com duas casas decimais

Considere que todos os salários são maiores que zero. Caso algum valor seja inválido, informe "Salário inválido" e encerre o programa.

Exemplo de Entrada e Saída

Entrada:
Funcionários: 3
Salário 1: 2000
Salário 2: 3500
Salário 3: 1500

Saída:
Total: R$ 7000.00
Média: R$ 2333.33

Entrada:
Funcionários: 2
Salário 1: 1800
Salário 2: -500

Saída:
Salário inválido

Dica 1 — Raciocínio

Use um único while para percorrer os N funcionários. Dentro do loop, leia cada salário e valide imediatamente — se inválido, exiba a mensagem e encerre com um return (ou break e uma flag). Acumule a soma a cada iteração e calcule a média após o loop.

Dica 2 — Estrutura
ler N
soma = 0, contador = 1

enquanto (contador <= N)
    ler salario
    se (salario <= 0)
        exibir "Salário inválido"
        encerrar
    soma = soma + salario
    contador++

media = soma / N
exibir total e media
Solução — passo a passo

A solução será revelada em etapas. Tente completar cada passo antes de avançar.

Passo 1 — Ler N e inicializar acumuladores
int    N       = Convert.ToInt32(Console.ReadLine());
double soma    = 0;
int    contador = 1;
Passo 2 — Estrutura do while
while (contador <= N)
{
Passo 3 — Ler, validar e acumular

soma += salario; é um operador de atribuição composto que acumula o valor de salario em soma, sendo equivalente a soma = soma + salario;.

    double salario = Convert.ToDouble(Console.ReadLine());
    if (salario <= 0)
    {
        Console.WriteLine("Salário inválido");
        return;
    }
    soma += salario;
    contador++;
}
Passo 4 — Calcular e exibir resultado
double media = soma / N;
Console.WriteLine($"Total: R$ {soma:F2}");
Console.WriteLine($"Média: R$ {media:F2}");

Exercício 04 - Classificação de ângulos

Escreva um programa em C# que leia um ângulo em graus. O valor deve estar no intervalo de 0 a 360. Enquanto o valor digitado estiver fora desse intervalo, o programa deve exibir "Ângulo inválido. Digite um valor entre 0 e 360." e pedir novamente.

Com um ângulo válido, classifique-o como:

  • Nulo: igual a 0°
  • Agudo: entre 1° e 89°
  • Reto: igual a 90°
  • Obtuso: entre 91° e 179°
  • Raso: igual a 180°
  • Reflexo: entre 181° e 359°
  • Completo: igual a 360°
Exemplo de Entrada e Saída

Entrada:
Ângulo: 400
Ângulo: -10
Ângulo: 45

Saída:
Ângulo inválido. Digite um valor entre 0 e 360.
Ângulo inválido. Digite um valor entre 0 e 360.
Ângulo agudo.

Entrada:
Ângulo: 180

Saída:
Ângulo raso.

Dica 1 — Raciocínio

O while aqui serve para forçar uma entrada válida — não para repetir o programa inteiro. Leia o ângulo antes do while; a condição verifica se está fora do intervalo. Quando o loop terminar, a variável já contém um valor válido, pronto para classificação.

Dica 2 — Estrutura
ler angulo

enquanto (angulo < 0 OU angulo > 360)
    exibir "Ângulo inválido. Digite um valor entre 0 e 360."
    ler angulo

se (angulo == 0) exibir "Ângulo nulo."
senão se (angulo < 90) exibir "Ângulo agudo."
senão se (angulo == 90) exibir "Ângulo reto."
senão se (angulo < 180) exibir "Ângulo obtuso."
senão se (angulo == 180) exibir "Ângulo raso."
senão se (angulo < 360) exibir "Ângulo reflexo."
senão exibir "Ângulo completo."
Solução — passo a passo

A solução será revelada em etapas. Tente completar cada passo antes de avançar.

Passo 1 — Primeira leitura
int angulo = Convert.ToInt32(Console.ReadLine());
Passo 2 — Forçar entrada válida

O loop pede novamente enquanto o valor estiver fora do intervalo:

while (angulo < 0 || angulo > 360)
{
    Console.WriteLine("Ângulo inválido. Digite um valor entre 0 e 360.");
    angulo = Convert.ToInt32(Console.ReadLine());
}
Passo 3 — Classificação

Com o valor garantidamente válido, classifique usando if/else if encadeados:

if      (angulo == 0)   Console.WriteLine("Ângulo nulo.");
else if (angulo < 90)  Console.WriteLine("Ângulo agudo.");
else if (angulo == 90)  Console.WriteLine("Ângulo reto.");
else if (angulo < 180) Console.WriteLine("Ângulo obtuso.");
else if (angulo == 180) Console.WriteLine("Ângulo raso.");
else if (angulo < 360) Console.WriteLine("Ângulo reflexo.");
else                    Console.WriteLine("Ângulo completo.");

Exercício 05 - Adivinhe o número

Escreva um programa em C# que sorteie um número inteiro entre 1 e 100 usando int numero_sorteado = new Random().Next(1, 101);. O usuário deve tentar adivinhar o número sorteado.

A cada tentativa errada, informe se o número sorteado é maior ou menor do que o chute. Quando o usuário acertar, exiba uma mensagem de parabéns e o total de tentativas realizadas.

Exemplo de Entrada e Saída

Entrada:
Chute: 50
Chute: 75
Chute: 63

Saída:
Muito baixo!
Muito alto!
Parabéns! Você acertou em 3 tentativas.

Dica 1 — Raciocínio

Antes do loop, sorteie o número e leia o primeiro chute. O while continua enquanto chute != numero_sorteado. Dentro do loop, dê a dica (maior/menor) e leia o próximo chute. Incremente um contador a cada iteração — o acerto também conta como tentativa.

Dica 2 — Estrutura
sortear numero (1 a 100)
tentativas = 1
ler chute

enquanto (chute != numero)
    se (chute < numero) exibir "Muito baixo!"
    senão exibir "Muito alto!"
    ler chute
    tentativas++

exibir "Parabéns! Você acertou em {tentativas} tentativas."
Solução — passo a passo

A solução será revelada em etapas. Tente completar cada passo antes de avançar.

Passo 1 — Sortear e inicializar
int numero_sorteado = new Random().Next(1, 101);
int tentativas = 1;
int chute = Convert.ToInt32(Console.ReadLine());
Passo 2 — Loop de tentativas
while (chute != numero_sorteado)
{
Passo 3 — Dar dica e ler próximo chute
    if (chute < numero_sorteado)
        Console.WriteLine("Muito baixo!");
    else
        Console.WriteLine("Muito alto!");

    chute = Convert.ToInt32(Console.ReadLine());
    tentativas++;
}
Passo 4 — Mensagem de acerto
Console.WriteLine($"Parabéns! Você acertou em {tentativas} tentativas.");

Exercício 06 - Caixa registradora

Escreva um programa em C# que simule uma caixa registradora. O usuário digita o preço de um produto por vez. Digitar 0 encerra o registro.

Ao final, exiba:

  • A quantidade de itens registrados
  • O valor total da compra
  • O preço médio dos itens, com duas casas decimais

Caso nenhum item seja registrado (o usuário digitar 0 imediatamente), exiba "Nenhum item registrado."

Exemplo de Entrada e Saída

Entrada:
Preço: 12.50
Preço: 8.00
Preço: 19.90
Preço: 0

Saída:
Itens: 3
Total: R$ 40.40
Preço médio: R$ 13.47

Entrada:
Preço: 0

Saída:
Nenhum item registrado.

Dica 1 — Raciocínio

Leia o primeiro preço antes do while. A condição é preco != 0. Dentro do loop, acumule o total, incremente o contador e leia o próximo preço. Após o loop, verifique se o contador é zero antes de calcular a média — isso cobre o caso de nenhum item registrado.

Dica 2 — Estrutura
total = 0, itens = 0
ler preco

enquanto (preco != 0)
    total = total + preco
    itens++
    ler preco

se (itens == 0)
    exibir "Nenhum item registrado."
senão
    exibir itens, total, total/itens
Solução — passo a passo

A solução será revelada em etapas. Tente completar cada passo antes de avançar.

Passo 1 — Inicializar e primeira leitura
double total = 0;
int    itens = 0;
double preco = Convert.ToDouble(Console.ReadLine());
Passo 2 — Loop até digitar 0
while (preco != 0)
{
Passo 3 — Acumular e ler próximo
    total += preco;
    itens++;
    preco = Convert.ToDouble(Console.ReadLine());
}
Passo 4 — Exibir resultado
if (itens == 0)
{
    Console.WriteLine("Nenhum item registrado.");
}
else
{
    Console.WriteLine($"Itens: {itens}");
    Console.WriteLine($"Total: R$ {total:F2}");
    Console.WriteLine($"Preço médio: R$ {total / itens:F2}");
}

Exercício 07 - Sequência de Collatz

A Conjectura de Collatz afirma que, a partir de qualquer inteiro positivo, aplicando repetidamente as regras abaixo, o valor sempre chegará a 1:

  • Se N for par: N = N / 2
  • Se N for ímpar: N = 3 * N + 1

Escreva um programa em C# que leia um número inteiro N > 1. Caso o valor seja inválido, informe "Valor inválido" e encerre.

Com um valor válido, exiba cada número da sequência (incluindo o N inicial e o 1 final) e, ao terminar, informe o total de passos realizados.

Exemplo de Entrada e Saída

Entrada:
N: 6

Saída:
6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1
Total de passos: 8

Entrada:
N: 1

Saída:
Valor inválido

Dica 1 — Raciocínio

O operador % verifica paridade: N % 2 == 0 significa par. Use-o dentro do while para decidir qual regra aplicar. Exiba N antes de modificá-lo em cada passo. Conte os passos com uma variável — um passo é cada transformação, então a sequência com k números tem k-1 passos.

Dica 2 — Estrutura
ler N

se (N <= 1)
    exibir "Valor inválido"
senão
    passos = 0
    exibir N (sem quebra de linha)

    enquanto (N != 1)
        se (N % 2 == 0) N = N / 2
        senão N = 3 * N + 1
        exibir " → " + N
        passos++

    exibir "Total de passos: {passos}"
Solução — passo a passo

A solução será revelada em etapas. Tente completar cada passo antes de avançar.

Passo 1 — Ler e validar
int N = Convert.ToInt32(Console.ReadLine());

if (N <= 1)
{
    Console.WriteLine("Valor inválido");
    return;
}
Passo 2 — Inicializar e exibir valor inicial
int passos = 0;
Console.Write(N);
Passo 3 — Loop de Collatz

Aplique as regras, exiba o próximo valor e conte os passos:

while (N != 1)
{
    if (N % 2 == 0)
        N = N / 2;
    else
        N = 3 * N + 1;

    Console.Write($" → {N}");
    passos++;
}
Passo 4 — Exibir total de passos
Console.WriteLine();
Console.WriteLine($"Total de passos: {passos}");

Exercício 08 - Maior placar da turma

Em uma gincana escolar, cada equipe registrou sua pontuação final. Escreva um programa em C# que leia a quantidade de equipes N (N > 0) e, em seguida, leia a pontuação de cada uma.

As pontuações são inteiros maiores ou iguais a zero. Ao final, exiba a maior pontuação registrada e o número da equipe que a obteve. Em caso de empate, considere a primeira equipe com aquela pontuação.

Exemplo de Entrada e Saída

Entrada:
Equipes: 4
Pontuação da equipe 1: 320
Pontuação da equipe 2: 475
Pontuação da equipe 3: 390
Pontuação da equipe 4: 475

Saída:
Maior pontuação: 475 (Equipe 2)

Entrada:
Equipes: 3
Pontuação da equipe 1: 100
Pontuação da equipe 2: 250
Pontuação da equipe 3: 180

Saída:
Maior pontuação: 250 (Equipe 2)

Dica 1 — Raciocínio

Inicialize o maior com a pontuação da primeira equipe (não com zero). A cada nova pontuação, use > — e não >= — para manter a primeira equipe em caso de empate. Guarde o número da equipe junto com a pontuação ao atualizar o maior.

Dica 2 — Estrutura
ler N
ler pontuacao da equipe 1
maior = pontuacao, equipeVencedora = 1
contador = 2

enquanto (contador <= N)
    ler pontuacao
    se (pontuacao > maior)
        maior = pontuacao
        equipeVencedora = contador
    contador++

exibir "Maior pontuação: {maior} (Equipe {equipeVencedora})"
Solução — passo a passo

A solução será revelada em etapas. Tente completar cada passo antes de avançar.

Passo 1 — Ler N e primeira pontuação

Em exercícios que envolvem identificar o maior (ou menor) número, é comum criarmos uma variável maior (ou menor) que vai armazenar ao longo da execução o maior (ou menor) valor até aquele ponto da execução. Por isso, neste exercício, logo no início atribuímos à variável maior o valor lido da primeira pontuação.

int N          = Convert.ToInt32(Console.ReadLine());
int pontuacao  = Convert.ToInt32(Console.ReadLine());
int maior      = pontuacao;
int vencedora  = 1;
int contador   = 2;
Passo 2 — Loop pelas demais equipes
while (contador <= N)
{
Passo 3 — Comparar e atualizar

Se a pontuação que acabamos de ler for maior que a maior pontuação até então (variável maior), vamos atualizar o seu valor. Isto é, o valor maior até este ponto agora será a pontuação que acabamos de ler.

    pontuacao = Convert.ToInt32(Console.ReadLine());
    if (pontuacao > maior)
    {
        maior     = pontuacao;
        vencedora = contador;
    }
    contador++;
}
Passo 4 — Exibir resultado

Ao sair do laço, temos certeza que a variável maior está mantendo o maior valor dentre todos que foram lidos.

Console.WriteLine($"Maior pontuação: {maior} (Equipe {vencedora})");
Solução extra — usando int.MinValue

Uma estratégia alternativa é inicializar a variável maior com int.MinValue, que representa o menor valor possível para um inteiro. Como as pontuações válidas são maiores ou iguais a zero, a primeira pontuação lida será obrigatoriamente maior que esse valor inicial. Assim, na primeira verificação, a variável maior será atualizada com certeza para um valor real informado pelo usuário.

int N = Convert.ToInt32(Console.ReadLine());

int maior     = int.MinValue;
int vencedora = 0;
int contador  = 1;

while (contador <= N)
{
    int pontuacao = Convert.ToInt32(Console.ReadLine());

    if (pontuacao > maior)
    {
        maior     = pontuacao;
        vencedora = contador;
    }

    contador++;
}

Console.WriteLine($"Maior pontuação: {maior} (Equipe {vencedora})");

Essa solução evita ler a primeira pontuação antes do laço. O próprio while trata todas as equipes, inclusive a primeira. O cuidado importante é escolher um valor inicial que não atrapalhe a primeira comparação.

Exercício 09 - Menor tempo de prova

Em uma corrida escolar, cada atleta teve seu tempo registrado em segundos. Escreva um programa em C# que leia a quantidade de atletas N (N > 0) e, em seguida, leia o tempo de cada um.

Os tempos são inteiros maiores que zero. Caso algum tempo seja inválido, informe "Tempo inválido" e encerre o programa.

Ao final, exiba o menor tempo registrado e o número do atleta vencedor. Em caso de empate, considere o primeiro atleta com aquele tempo.

Exemplo de Entrada e Saída

Entrada:
Atletas: 4
Tempo do atleta 1: 58
Tempo do atleta 2: 47
Tempo do atleta 3: 52
Tempo do atleta 4: 47

Saída:
Menor tempo: 47 segundos (Atleta 2)

Entrada:
Atletas: 3
Tempo do atleta 1: 60
Tempo do atleta 2: -5

Saída:
Tempo inválido

Dica 1 — Raciocínio

Similar ao exercício anterior, mas buscamos o menor valor. Inicialize o menor com o tempo do primeiro atleta (validando-o primeiro). Use < na comparação para manter o primeiro em caso de empate. Valide cada tempo antes de comparar — se inválido, encerre imediatamente.

Dica 2 — Estrutura
ler N
ler tempo do atleta 1
se (tempo <= 0) exibir "Tempo inválido" e encerrar
menor = tempo, atletaVencedor = 1
contador = 2

enquanto (contador <= N)
    ler tempo
    se (tempo <= 0) exibir "Tempo inválido" e encerrar
    se (tempo < menor)
        menor = tempo
        atletaVencedor = contador
    contador++

exibir "Menor tempo: {menor} segundos (Atleta {atletaVencedor})"
Solução — passo a passo

A solução será revelada em etapas. Tente completar cada passo antes de avançar.

Passo 1 — Ler N e primeiro tempo (com validação)
int N    = Convert.ToInt32(Console.ReadLine());
int tempo = Convert.ToInt32(Console.ReadLine());

if (tempo <= 0)
{
    Console.WriteLine("Tempo inválido");
    return;
}

int menor    = tempo;
int vencedor = 1;
int contador = 2;
Passo 2 — Loop pelos demais atletas
while (contador <= N)
{
Passo 3 — Validar, comparar e atualizar
    tempo = Convert.ToInt32(Console.ReadLine());
    if (tempo <= 0)
    {
        Console.WriteLine("Tempo inválido");
        return;
    }
    if (tempo < menor)
    {
        menor    = tempo;
        vencedor = contador;
    }
    contador++;
}
Passo 4 — Exibir resultado
Console.WriteLine($"Menor tempo: {menor} segundos (Atleta {vencedor})");
Solução extra — usando int.MaxValue

Uma estratégia alternativa é inicializar a variável menor com int.MaxValue, que representa o maior valor possível para um inteiro. Como qualquer tempo válido será menor que esse valor inicial, o primeiro tempo lido substituirá menor obrigatoriamente na primeira verificação.

int N = Convert.ToInt32(Console.ReadLine());

int menor    = int.MaxValue;
int vencedor = 0;
int contador = 1;

while (contador <= N)
{
    int tempo = Convert.ToInt32(Console.ReadLine());

    if (tempo <= 0)
    {
        Console.WriteLine("Tempo inválido");
        return;
    }

    if (tempo < menor)
    {
        menor    = tempo;
        vencedor = contador;
    }

    contador++;
}

Console.WriteLine($"Menor tempo: {menor} segundos (Atleta {vencedor})");

Essa solução mantém todas as leituras dentro do laço. O valor int.MaxValue funciona como um ponto de partida artificial: ele não é uma resposta real, apenas garante que o primeiro tempo válido atualize a variável menor.