Sobre esta lista
Esta lista reúne exercícios de todos os assuntos estudados até agora: algoritmos, estrutura
sequencial em C, estruturas condicionais, operadores lógicos e estruturas de repetição
(while, do-while e for). Além de exercícios para
construir programas, há exercícios para ler e analisar código pronto, marcados com
Análise de código: prever a saída, encontrar erros e
comparar versões diferentes de uma mesma solução.
1. Algoritmos
Resolva usando descrição narrativa, fluxograma e pseudocódigo.
- Escreva um algoritmo para trocar uma lâmpada.
- Faça um algoritmo para mostrar o resultado da multiplicação de dois números
N1eN2. - Faça um algoritmo para mostrar o resultado da divisão de dois números. Lembre-se: não existe divisão por zero.
- Faça um algoritmo para calcular a média aritmética entre duas notas de um aluno e mostrar sua situação, que pode ser aprovado ou reprovado.
- Faça um algoritmo para calcular o novo salário de um funcionário. Sabe-se que os funcionários que recebem atualmente salário de até R$ 500 terão aumento de 20%; os demais terão aumento de 10%.
-
Faça um algoritmo para calcular o IMC a partir do peso e da altura de uma pessoa e exiba a
classificação, sabendo que
IMC = Peso (kg) / Altura (m)²:IMC Classificação Abaixo de 18,5 Abaixo do peso 18,5 até 24,9 Peso normal 25 até 29,9 Sobrepeso 30 ou mais Obesidade -
Faça um algoritmo que receba uma temperatura em graus Celsius e mostre o valor convertido
para Fahrenheit, sabendo que
F = C × 9 / 5 + 32. - Faça um algoritmo que receba o preço de um produto e o percentual de desconto. Mostre o valor do desconto em reais e o preço final a pagar.
- Faça um algoritmo que receba três notas e seus respectivos pesos, calcule e mostre a média ponderada.
-
Análise de código
Faça o teste de mesa e informe os valores exibidos ao final:
ALGORITMO DECLARE X, Y NUMÉRICO X ← 5 Y ← X + 3 X ← Y * 2 Y ← X - Y ESCREVA X, Y FIM_ALGORITMO. -
Análise de código
Um colega escreveu a seguinte descrição narrativa para calcular a média de um aluno:
Aponte pelo menos três ambiguidades nessa descrição (o que não fica claro?) e reescreva a solução em pseudocódigo, sem deixar margem para dúvidas.Passo 1 - pegar as notas. Passo 2 - fazer a conta. Passo 3 - mostrar se passou. -
Indique quais identificadores abaixo são válidos e quais são inválidos,
justificando os inválidos:
salario_bruto,2nota,_total,media final,nota1,x-y,int,IDADE,valor$.
2. Estrutura Sequencial em C
- Faça um programa em C que solicite e armazene: nome completo, idade, altura, peso e inicial do sobrenome. Depois, exiba todos os dados informados.
-
Faça um programa em C que receba o ano de nascimento de uma pessoa e o ano atual, calcule e mostre:
- a idade dessa pessoa;
- quantos anos ela terá em 2050.
- Um trabalhador recebeu seu salário e o depositou em sua conta bancária. Esse trabalhador fez dois pagamentos distintos. Para o primeiro, houve retenção de um imposto de 4,65%. No segundo, houve retenção de 3,00%. O saldo inicial da conta estava 0. Calcule e informe o saldo atual da conta.
-
Seja um triângulo retângulo com catetos
AeB: calcule e exiba a hipotenusa.
Dica: use#include <math.h>e a funçãosqrt(). -
Faça um programa em C que leia dois números inteiros,
AeB, e depois troque os valores entre as duas variáveis. Imprima o antes e o depois.Antes da troca: A = 10 B = 20 Depois da troca: A = 20 B = 10 - Faça um programa que leia um valor em reais e a cotação do dólar do dia, e mostre o valor convertido em dólares.
-
Faça um programa que leia uma quantidade total de segundos e mostre esse tempo no formato
horas, minutos e segundos. Exemplo:
3725segundos →1h 2min 5s.
Dica: use os operadores/e%. -
Análise de código
Qual será a saída do trecho abaixo? Explique por que
cedtêm valores diferentes.int a = 7, b = 2; float c = a / b; float d = 7.0 / 2; printf("%.1f %.1f %d\n", c, d, a % b); -
Análise de código
O programa abaixo deveria calcular a média de duas notas, mas exibe um valor errado.
Considerando
n1 = 8en2 = 6, qual valor é exibido? Qual é o problema e como corrigir?float n1, n2, media; scanf("%f", &n1); scanf("%f", &n2); media = n1 + n2 / 2; printf("Media: %.1f\n", media); -
Análise de código
O programa abaixo não compila. Encontre todos os erros e reescreva o código corrigido.
#include <stdio.h> int main() { int idade float altura; printf("Digite sua idade: "); scanf("%d", idade); printf("Digite sua altura: "); scanf("%d", &altura); printf("Idade: %d, altura: %.2f\n", idade, altura) return 0; } -
Análise de código
Compare as duas tentativas abaixo de trocar os valores de
aeb. Faça o teste de mesa coma = 10eb = 20e responda: qual delas funciona? Por que a outra falha?Versão A
a = b; b = a;Versão B
a = a + b; b = a - b; a = a - b;
3. Estrutura Condicional
- Leia dois números inteiros e informe qual deles é maior. Caso sejam iguais, informe que os números são iguais.
- Leia um número inteiro e informe se ele é par ou ímpar. Além da classificação, informe também o dobro do número se for par.
-
Leia o peso e a altura de uma pessoa. Calcule o IMC e informe sua classificação:
- abaixo de 18,5 → Abaixo do peso
- 18,5 até 24,9 → Peso normal
- 25 até 29,9 → Sobrepeso
- 30 ou mais → Obesidade
-
Faça um programa que leia dois números inteiros e apresente ao usuário um menu com as opções:
- 1 - Soma
- 2 - Subtração
- 3 - Multiplicação
- 4 - Divisão
if / else ife outra comswitch. - Leia o valor que uma pessoa deseja sacar. Considere que o caixa possui apenas notas de 100, 50, 20 e 10 reais. Informe se é possível realizar o saque e, caso seja possível, informe quantas notas de cada valor serão utilizadas. Considere que o saque deve ser feito utilizando a menor quantidade possível de notas.
- Leia três números inteiros e mostre o maior deles.
- Leia a idade de uma pessoa e informe sua faixa etária: criança (0 a 11), adolescente (12 a 17), adulto (18 a 59) ou idoso (60 ou mais). Idades negativas devem ser consideradas inválidas.
- Uma loja oferece desconto de acordo com o valor da compra: acima de R$ 500, 15% de desconto; acima de R$ 200 (até R$ 500), 10%; nos demais casos, não há desconto. Leia o valor da compra e mostre o desconto aplicado e o valor final.
-
Análise de código
Compare os dois códigos abaixo. Para cada um, informe a saída quando
notavale8,5e2. Qual deles está correto? Explique a diferença.Código A
if (nota >= 6) { printf("Aprovado\n"); } if (nota >= 4) { printf("Recuperacao\n"); } else { printf("Reprovado\n"); }Código B
if (nota >= 6) { printf("Aprovado\n"); } else if (nota >= 4) { printf("Recuperacao\n"); } else { printf("Reprovado\n"); } -
Análise de código
O código abaixo testa as condições em uma ordem diferente. Qual mensagem aparece para
nota = 9? O que está errado e como corrigir sem alterar os valores das condições?if (nota >= 4) { printf("Recuperacao\n"); } else if (nota >= 6) { printf("Aprovado\n"); } else { printf("Reprovado\n"); } -
Análise de código
O programa abaixo deveria informar se o número digitado é zero. Qual a saída quando o
usuário digita
0? E quando digita5? Explique o que acontece e corrija o erro.int x; scanf("%d", &x); if (x = 0) { printf("Zero\n"); } else { printf("Diferente de zero\n"); } -
Análise de código
O trecho abaixo exibe "Maior de idade" mesmo com
idade = 15. Por quê?int idade = 15; if (idade >= 18); { printf("Maior de idade\n"); }
4. Operadores Lógicos
-
Número válido. Leia um número inteiro. O número é considerado válido quando estiver
fora do intervalo de 10 a 20. Exiba Válido ou Inválido.
Faça 2 versões: com e sem o operador de negação (
!). -
Quadrante do plano cartesiano. Leia as coordenadas
xeyde um ponto e informe em qual região ele está: 1º, 2º, 3º ou 4º quadrante, sobre o eixo X, sobre o eixo Y ou na origem. -
Validação de uma data. Faça um programa em C que leia dia, mês e ano e determine se
a data informada é válida. Considere as seguintes regras:
- O mês deve estar entre 1 e 12.
- Os meses 1, 3, 5, 7, 8, 10 e 12 possuem 31 dias.
- Os meses 4, 6, 9 e 11 possuem 30 dias.
- Fevereiro possui 28 dias em anos normais e 29 dias em anos bissextos.
- Um ano é bissexto quando é divisível por 4 e não é divisível por 100, ou é divisível por 400.
-
Pode dirigir? Leia a idade de uma pessoa e se ela possui carteira de habilitação
(
1para sim,0para não). Informe se ela pode dirigir: é preciso ter 18 anos ou mais e possuir habilitação. - Triângulos. Leia três valores que representam os lados de um triângulo. Verifique se eles podem formar um triângulo (cada lado deve ser menor que a soma dos outros dois) e, em caso positivo, classifique-o em equilátero (três lados iguais), isósceles (dois lados iguais) ou escaleno (todos diferentes).
-
Análise de código
Considere
a = 5,b = 10ec = 0. Determine se cada expressão é verdadeira (1) ou falsa (0):a > 3 && b < 10 a > 3 || b < 10 !(a == 5) c || a > b !c && (a + b == 15) -
Análise de código
As três condições abaixo pretendem verificar se
xestá entre 10 e 20 (inclusive). Quais são equivalentes entre si? Qual delas está errada? Teste comx = 5,x = 15ex = 50./* A */ if (x >= 10 && x <= 20) /* B */ if (!(x < 10 || x > 20)) /* C */ if (x >= 10 || x <= 20) -
Análise de código
Um aluno escreveu a condição abaixo, como se faz na matemática. O código compila, mas
para
x = 50exibe "Dentro do intervalo". Explique, passo a passo, como o C avalia essa expressão e reescreva a condição corretamente.if (10 <= x <= 20) { printf("Dentro do intervalo\n"); }
5. Estruturas de Repetição — Algoritmos
-
Qual será a saída?
i ← 1 Enquanto (i <= 4): Escrever i i ← i + 1 -
Qual é o erro? Por que esse algoritmo não termina?
i ← 10 Enquanto (i >= 1): Escrever i i ← i + 1 - Faça um algoritmo que mostre os números de 10 até 1.
-
Quantas vezes o seguinte laço executa?
i ← 0 Enquanto (i <= 20): Escrever i i ← i + 2 - Faça um algoritmo que mostre todos os números pares entre 1 e 50. Resolva com duas estratégias lógicas diferentes.
-
O que os códigos abaixo fazem? Corrija o que for necessário.
Inicio: i = 1 Enquanto i <= 10: Escrever i FimInicio: i = 1 Enquanto i > 10: Escrever i Fim - Faça um algoritmo que leia um número e mostre a sua tabuada (de 1 a 10).
-
Faça um algoritmo que leia números até que o usuário digite
0e, ao final, mostre a soma dos números digitados. Esse é um laço contado ou não contado? -
Análise de código
Faça o teste de mesa, montando uma tabela com os valores de
iesa cada repetição. Qual valor é escrito ao final?s ← 0 i ← 1 Enquanto (i <= 5): s ← s + i i ← i + 2 Escrever s -
Análise de código
Analise o algoritmo de senha abaixo:
Escrever "Digite a senha: " Ler senha tentativas ← 1 Enquanto (senha <> 1234 E tentativas < 3): Escrever "Senha incorreta. Digite novamente: " Ler senha tentativas ← tentativas + 1- Identifique a(s) variável(is) de controle, a inicialização, a condição e a atualização.
- Quantas tentativas o usuário tem, no máximo?
- Ao sair do laço, o algoritmo não informa se o acesso foi liberado ou bloqueado. Complete-o.
6. while e do-while em C
- Solicite ao usuário 10 números e conte quantos são positivos.
- Leia 5 números do usuário e calcule a soma.
- Leia um número e calcule seu fatorial.
-
Faça um programa que leia dois números inteiros e apresente ao usuário um menu com as opções:
- 1 - Soma
- 2 - Subtração
- 3 - Multiplicação
- 4 - Divisão
- 5 - Sair
-
Jogo da adivinhação. O programa sorteia um número aleatório e o usuário deve
adivinhar. Só pare quando o usuário acertar e conte quantas tentativas foram necessárias.
A cada palpite errado, informe se o número sorteado é maior ou menor.
Dica: use a bibliotecastdlib.he o códigorand() % 100 + 1para sortear um número de 1 a 100. -
Usando
do-while, leia uma nota e continue pedindo enquanto ela não estiver entre 0 e 10. Ao final, mostre a nota válida digitada. - Leia números até que o usuário digite um número negativo. Mostre a quantidade de números digitados e a média deles (o negativo não entra no cálculo). Trate o caso de nenhum número válido ter sido digitado.
-
Leia um número inteiro positivo e informe quantos dígitos ele possui. Exemplo:
4581→ 4 dígitos.
Dica: divida o número por 10 repetidamente. -
Leia um número inteiro positivo e mostre-o invertido. Exemplo:
123→321. -
Análise de código
Compare os dois códigos abaixo. Qual a saída de cada um? Explique a diferença.
Código A
int i = 10; while (i < 5) { printf("%d\n", i); i++; }Código B
int i = 10; do { printf("%d\n", i); i++; } while (i < 5); -
Análise de código
Qual valor é exibido? Quantas vezes o laço executa?
int n = 1; while (n < 100) { n = n * 3; } printf("%d\n", n); -
Análise de código
O programa abaixo deveria ler números até o usuário digitar 0 e mostrar a média. Ele
possui pelo menos quatro problemas. Encontre-os e reescreva o programa corrigido.
int soma, num, cont = 0; printf("Digite numeros (0 para sair): "); scanf("%d", &num); while (num != 0) { soma = soma + num; cont++; } printf("Media: %d\n", soma / cont);
7. for em C
-
Números primos em uma sequência. Um número primo é aquele que possui exatamente dois
divisores positivos distintos: 1 e ele mesmo. Escreva um programa em C que leia um número
inteiro
N, maior que 1, e exiba todos os números primos entre 2 eN. Ao final, o programa deverá informar:- a quantidade de números primos encontrados;
- a soma de todos os números primos encontrados;
- o maior número primo encontrado.
-
Análise de uma sequência de números. Escreva um programa em C que leia um número
inteiro positivo
Ne, em seguida, leia exatamenteNnúmeros inteiros, um por vez. O programa deverá apresentar:- a quantidade de números pares e a soma dos números pares;
- a quantidade de números ímpares e a soma dos números ímpares;
- o maior e o menor número digitado;
- o tamanho da maior sequência consecutiva de números positivos.
- Leia um número
Ne mostre a tabuada deN(de 1 a 10) usandofor. -
Leia um número
Ne calcule a soma de 1 atéNusandofor. Compare o resultado com a fórmulaN * (N + 1) / 2. -
Leia um número
Ne mostre osNprimeiros termos da sequência de Fibonacci:0 1 1 2 3 5 8 13 ...(cada termo é a soma dos dois anteriores). -
Leia um número
Ne desenhe um triângulo de asteriscos comNlinhas. Exemplo paraN = 4:
Dica: use um* ** *** ****fordentro de outrofor. -
Análise de código
Qual a saída do trecho abaixo?
for (int i = 0; i < 10; i += 3) { printf("%d ", i); } -
Análise de código
Os três códigos abaixo somam os números pares de 1 a 100. Todos produzem o mesmo resultado?
Quantas repetições cada um executa? Qual você considera mais adequado e por quê?
Código A
int soma = 0; for (int i = 1; i <= 100; i++) { if (i % 2 == 0) { soma += i; } }Código B
int soma = 0; for (int i = 2; i <= 100; i += 2) { soma += i; }Código C
int soma = 0, i = 2; while (i <= 100) { soma += i; i += 2; } -
Análise de código
O programador esperava ver os números de 1 a 10, mas a saída foi apenas
11. Explique por quê.int i; for (i = 1; i <= 10; i++); { printf("%d\n", i); } -
Análise de código
Informe a saída do código abaixo e reescreva-o usando
for, mantendo exatamente o mesmo comportamento.int i = 20; while (i > 0) { printf("%d\n", i); i -= 4; }
8. Desafios Integradores
Exercícios que combinam estrutura sequencial, condicional e repetição.
- Média da turma. Leia a quantidade de alunos de uma turma. Para cada aluno, leia duas notas, calcule a média e informe sua situação (Aprovado: média ≥ 6; Recuperação: média ≥ 4; Reprovado: abaixo de 4). Ao final, mostre quantos alunos ficaram em cada situação e a média geral da turma.
-
Números perfeitos. Um número é perfeito quando é igual à soma de seus divisores
próprios (excluindo ele mesmo). Exemplo:
6 = 1 + 2 + 3. Leia um númeroNe mostre todos os números perfeitos entre 1 eN. -
Caixa eletrônico contínuo. Adapte o exercício 28 (saque) para atender
vários saques seguidos, até que o usuário digite
0. Valores que não forem múltiplos de 10 devem ser recusados. Ao final, mostre o total sacado e quantas notas de cada valor foram entregues no total.