C#: Exercício: Revisão dos conceitos básicos
1. Conversor de temperatura
Objetivo: Implementar a conversão bidirecional entre graus Celsius e Fahrenheit. O usuário seleciona o sentido da conversão e insere uma temperatura, e o programa exibe o resultado.
Requisitos:
- Solicitar que o usuário escolha uma direção (1: de Celsius para Fahrenheit, 2: de Fahrenheit para Celsius)
- Ler o valor da temperatura informado pelo usuário
- Aplique a fórmula de conversão e apresente o resultado (duas casas decimais)
- Tratar seleções inválidas com uma mensagem útil
Fórmulas de conversão:
- Celsius para Fahrenheit:
F = C * 9 / 5 + 32 - Fahrenheit para Celsius:
C = (F - 32) * 5 / 9
▶ Exemplo
Console.WriteLine("Temperature Converter");
Console.WriteLine("1. Celsius to Fahrenheit");
Console.WriteLine("2. Fahrenheit to Celsius");
Console.Write("Choose (1 or 2): ");
string choice = Console.ReadLine();
if (choice == "1")
{
Console.Write("Enter Celsius temperature: ");
double celsius = double.Parse(Console.ReadLine());
double fahrenheit = celsius * 9 / 5 + 32;
Console.WriteLine($"{celsius}°C = {fahrenheit:F2}°F");
}
else if (choice == "2")
{
Console.Write("Enter Fahrenheit temperature: ");
double fahrenheit = double.Parse(Console.ReadLine());
double celsius = (fahrenheit - 32) * 5 / 9;
Console.WriteLine($"{fahrenheit}°F = {celsius:F2}°C");
}
else
{
Console.WriteLine("Invalid choice. Please enter 1 or 2.");
}
Temperature Converter
1. Celsius to Fahrenheit
2. Fahrenheit to Celsius
Choose (1 or 2): 1
Enter Celsius temperature: 100
100°C = 212.00°F
Temperature Converter
1. Celsius to Fahrenheit
2. Fahrenheit to Celsius
Choose (1 or 2): 2
Enter Fahrenheit temperature: 32
32°F = 0.00°C
2. Calculadora simples
Objetivo: Criar uma calculadora que suporte as quatro operações aritméticas básicas. O usuário insere dois números e um operador, e o programa exibe o resultado, tratando adequadamente a divisão por zero.
Requisitos:
- Solicitar ao usuário que digite dois números e um operador (+, -, *, /)
- Use uma instrução
switchpara identificar o operador e realizar a operação correspondente - Verifique se há divisão por zero e exiba uma mensagem de erro amigável
- Exibir uma mensagem em caso de operadores inválidos
▶ Exemplo
Console.Write("Enter the first number: ");
double num1 = double.Parse(Console.ReadLine());
Console.Write("Enter an operator (+ - * /): ");
string op = Console.ReadLine();
Console.Write("Enter the second number: ");
double num2 = double.Parse(Console.ReadLine());
double result;
switch (op)
{
case "+":
result = num1 + num2;
Console.WriteLine($"{num1} + {num2} = {result}");
break;
case "-":
result = num1 - num2;
Console.WriteLine($"{num1} - {num2} = {result}");
break;
case "*":
result = num1 * num2;
Console.WriteLine($"{num1} * {num2} = {result}");
break;
case "/":
if (num2 == 0)
{
Console.WriteLine("Error: Division by zero is not allowed!");
}
else
{
result = num1 / num2;
Console.WriteLine($"{num1} / {num2} = {result}");
}
break;
default:
Console.WriteLine("Invalid operator!");
break;
}
Enter the first number: 10
Enter an operator (+ - * /): +
Enter the second number: 3.5
10 + 3.5 = 13.5
Enter the first number: 8
Enter an operator (+ - * /): /
Enter the second number: 0
Error: Division by zero is not allowed!
3. Jogo de adivinhar números
Objetivo: O programa gera um número inteiro aleatório entre 1 e 100. O usuário faz várias tentativas de adivinhar, e o programa dá dicas como “muito alto” ou “muito baixo” até que o número correto seja encontrado; em seguida, exibe o total de tentativas.
Requisitos:
- Use a classe
Randompara gerar um número inteiro aleatório entre 1 e 100 - Use um loop
whilepara permitir que o usuário tente adivinhar várias vezes - Após cada tentativa, dê uma dica dizendo “muito alto” ou “muito baixo”
- Quando a resposta estiver correta, exiba uma mensagem de parabéns e o número total de tentativas
▶ Exemplo
Random random = new Random();
int target = random.Next(1, 101);
int guess;
int attempts = 0;
Console.WriteLine("Number Guessing Game (1-100)");
do
{
Console.Write("Enter your guess: ");
guess = int.Parse(Console.ReadLine());
attempts++;
if (guess > target)
{
Console.WriteLine("Too high!");
}
else if (guess < target)
{
Console.WriteLine("Too low!");
}
else
{
Console.WriteLine($"Congratulations! The answer is {target}. You got it in {attempts} attempts.");
}
} while (guess != target);
Number Guessing Game (1-100)
Enter your guess: 50
Too low!
Enter your guess: 75
Too high!
Enter your guess: 62
Too low!
Enter your guess: 68
Congratulations! The answer is 68. You got it in 4 attempts.
4. Padrões em forma de estrela
Objetivo: Usar loops for aninhados para imprimir dois padrões comuns de estrelas — um triângulo retângulo e uma pirâmide — a fim de praticar o uso de loops e a concatenação de strings.
Requisitos:
- Triângulo retângulo: imprima i estrelas na linha i
- Pirâmide: imprima o número adequado de espaços à esquerda e estrelas em cada linha para centralizar as estrelas
- O número de linhas é determinado pela entrada do usuário
▶ Exemplo
Console.Write("Enter the number of rows: ");
int rows = int.Parse(Console.ReadLine());
Console.WriteLine("Right Triangle:");
for (int i = 1; i <= rows; i++)
{
for (int j = 1; j <= i; j++)
{
Console.Write("*");
}
Console.WriteLine();
}
Console.WriteLine("Pyramid:");
for (int i = 1; i <= rows; i++)
{
for (int s = 1; s <= rows - i; s++)
{
Console.Write(" ");
}
for (int j = 1; j <= 2 * i - 1; j++)
{
Console.Write("*");
}
Console.WriteLine();
}
Enter the number of rows: 5
Right Triangle:
*
**
***
****
*****
Pyramid:
*
***
*****
*******
*********
❓ Perguntas Frequentes
P: O que acontece se
double.Parsereceber uma entrada não numérica? R: Ele gera uma exceçãoFormatException. Em projetos reais, usedouble.TryParsepara uma conversão segura.
P: Por que o limite superior de
Random.Next(1, 101)é 101? R: O método utiliza um intervalo semiaberto —Next(1, 101)gera números inteiros de 1 a 100, excluindo 101.
P: Como é calculado o número de estrelas por fileira da pirâmide? R: A fileira i tem
2 * i - 1estrelas — a fileira 1 tem 1, a fileira 2 tem 3, a fileira 3 tem 5 e assim por diante.
P: Qual é a diferença entre
do...whileewhile? R:do...whileexecuta o corpo pelo menos uma vez;whilepode nem executá-lo. O jogo de adivinhação exige pelo menos uma tentativa, portanto,do...whileé a opção mais adequada.
📖 Resumo
- O conversor de temperatura serviu para praticar as instruções condicionais
if...else ife as operações matemáticas - A calculadora simples serviu de exercício para a ramificação
switche o tratamento da divisão por zero - O jogo de adivinhar números utilizou os loops
do...whilee a classeRandom - Os padrões em forma de estrela utilizavam loops aninhados
fore técnicas de concatenação de strings
📝 Exercícios
- Adicione um loop ao conversor de temperatura para que o usuário possa realizar a conversão repetidamente até digitar
qpara sair. - Adicionar suporte à operação de módulo (
%) à calculadora simples. - Melhorar o jogo de adivinhação de números: quando o usuário inserir um valor não numérico, solicitar que ele tente novamente, em vez de o programa travar.
- Imprima um padrão em forma de pirâmide invertida (a fileira mais larga na parte superior e a mais estreita na parte inferior).