Aprendendo Nested Loops em C
Os nested loops (loops aninhados) são estruturas de repetição utilizadas quando precisamos executar um loop dentro de outro. Eles são muito comuns em sistemas que trabalham com tabelas, matrizes, andares de prédios, salas de aula, campeonatos, mapas, fábricas e diversas outras situações que possuem múltiplos níveis de informação.
Ao dominar os loops aninhados, você passa a conseguir resolver problemas mais complexos, organizando dados em camadas e criando sistemas capazes de processar grandes quantidades de informações de forma estruturada.
Neste conteúdo, você irá praticar nested loops através de situações reais envolvendo campeonatos, hotéis, laboratórios, fábricas e escolas.
Questão 1 — Campeonato de fases entre jogadores
Um jogo possui vários jogadores participando de um campeonato.
Cada jogador joga várias fases, e em cada fase ele possui algumas tentativas.
Crie um programa em C que peça:
- A quantidade de jogadores;
- A quantidade de fases;
- A quantidade de tentativas por fase.
Para cada jogador, em cada fase, o programa deve pedir a pontuação de cada tentativa.
No final, mostre:
- A pontuação total de cada jogador;
- O jogador com maior pontuação geral.
Use nested loops.
Exemplo:
Digite a quantidade de jogadores: 2
Digite a quantidade de fases: 2
Digite a quantidade de tentativas por fase: 3
Jogador 1
Fase 1
Digite a pontuacao da tentativa 1: 100
Digite a pontuacao da tentativa 2: 80
Digite a pontuacao da tentativa 3: 90
...
Total do jogador 1: 600
Jogador vencedor: 2
Maior pontuacao: 690
Resposta:
#include
int main() {
int jogadores, fases, tentativas;
int i, j, k;
int pontos;
int totalJogador;
int maiorPontuacao = -1;
int jogadorVencedor = 0;
printf("Digite a quantidade de jogadores: ");
scanf("%d", &jogadores);
printf("Digite a quantidade de fases: ");
scanf("%d", &fases);
printf("Digite a quantidade de tentativas por fase: ");
scanf("%d", &tentativas);
for (i = 1; i <= jogadores; i++) {
totalJogador = 0;
printf("\nJogador %d\n", i);
for (j = 1; j <= fases; j++) {
printf("Fase %d\n", j);
for (k = 1; k <= tentativas; k++) {
printf("Digite a pontuacao da tentativa %d: ", k);
scanf("%d", &pontos);
totalJogador = totalJogador + pontos;
}
}
printf("Total do jogador %d: %d\n", i, totalJogador);
if (totalJogador > maiorPontuacao) {
maiorPontuacao = totalJogador;
jogadorVencedor = i;
}
}
printf("\nJogador vencedor: %d\n", jogadorVencedor);
printf("Maior pontuacao: %d\n", maiorPontuacao);
return 0;
}
QUESTÃO 2 – Hotel inteligente com quartos e diárias
Um hotel quer analisar a ocupação dos quartos durante alguns dias.
O programa deve pedir:
A quantidade de andares;
A quantidade de quartos por andar;
A quantidade de dias analisados;
O valor da diária.
Para cada andar, quarto e dia, o usuário deve informar:
1 – Quarto ocupado
0 – Quarto vazio
No final, mostre:
Total de diárias ocupadas;
Total de diárias vazias;
Valor total arrecadado.
Use nested loops.
Exemplo:
Digite a quantidade de andares: 2
Digite a quantidade de quartos por andar: 2
Digite a quantidade de dias analisados: 3
Digite o valor da diaria: 150
Andar 1
Quarto 1
Dia 1: 1
Dia 2: 1
Dia 3: 0
Total de diarias ocupadas: 7
Total de diarias vazias: 5
Valor arrecadado: R$ 1050.00
Resposta:
#include
int main() {
int andares, quartos, dias;
int i, j, k;
int status;
int ocupadas = 0;
int vazias = 0;
float diaria;
float totalArrecadado;
printf("Digite a quantidade de andares: ");
scanf("%d", &andares);
printf("Digite a quantidade de quartos por andar: ");
scanf("%d", &quartos);
printf("Digite a quantidade de dias analisados: ");
scanf("%d", &dias);
printf("Digite o valor da diaria: ");
scanf("%f", &diaria);
for (i = 1; i <= andares; i++) {
printf("\nAndar %d\n", i);
for (j = 1; j <= quartos; j++) {
printf("Quarto %d\n", j);
for (k = 1; k <= dias; k++) {
printf("Dia %d: ", k);
scanf("%d", &status);
if (status == 1) {
ocupadas++;
} else {
vazias++;
}
}
printf("\n");
}
}
totalArrecadado = ocupadas * diaria;
printf("Total de diarias ocupadas: %d\n", ocupadas);
printf("Total de diarias vazias: %d\n", vazias);
printf("Valor arrecadado: R$ %.2f\n", totalArrecadado);
return 0;
}
QUESTÃO 3 – Mapa de risco de um laboratório
Um laboratório possui várias áreas organizadas em linhas e colunas.
Cada posição do laboratório recebe um nível de risco de 0 a 10.
Crie um programa em C que peça:
- A quantidade de linhas;
- A quantidade de colunas.
Para cada posição, o usuário deve informar o nível de risco.
Exemplo:
Digite a quantidade de linhas: 3
Digite a quantidade de colunas: 3
Linha 1
Digite o risco da posicao 1: 2
Digite o risco da posicao 2: 8
Digite o risco da posicao 3: 5
Areas criticas: 3
Soma total de risco: 49
Linha mais arriscada: 2
Resposta:
#include
int main() {
int linhas, colunas;
int i, j;
int risco;
int somaLinha;
int somaTotal = 0;
int areasCriticas = 0;
int maiorSomaLinha = -1;
int linhaMaisArriscada = 0;
printf("Digite a quantidade de linhas: ");
scanf("%d", &linhas);
printf("Digite a quantidade de colunas: ");
scanf("%d", &colunas);
for (i = 1; i <= linhas; i++) {
somaLinha = 0;
printf("\nLinha %d\n", i);
for (j = 1; j <= colunas; j++) {
printf("Digite o risco da posicao %d: ", j);
scanf("%d", &risco);
somaLinha += risco;
somaTotal += risco;
if (risco >= 8 && risco <= 10) {
areasCriticas++;
}
}
printf("Soma de risco da linha %d: %d\n", i, somaLinha);
if (somaLinha > maiorSomaLinha) {
maiorSomaLinha = somaLinha;
linhaMaisArriscada = i;
}
}
printf("\nAreas criticas: %d\n", areasCriticas);
printf("Soma total de risco: %d\n", somaTotal);
printf("Linha mais arriscada: %d\n", linhaMaisArriscada);
return 0;
}
QUESTÃO 4 – Produção de uma fábrica por máquina e turno
Uma fábrica quer analisar a produção de várias máquinas durante diferentes turnos.
Problema:
Crie um programa que solicite:
- quantidade de máquinas;
- quantidade de turnos por máquina;
- meta mínima por turno.
Para cada máquina e turno, informe a produção.
No final, mostre:
- produção total de cada máquina;
- quantidade de turnos abaixo da meta;
- máquina com maior produção.
Exemplo:
Digite a quantidade de maquinas: 3
Digite a quantidade de turnos por maquina: 2
Digite a meta minima por turno: 100
Maquina 1
Digite a producao do turno 1: 120
Digite a producao do turno 2: 90
Total da maquina 1: 210
Turnos abaixo da meta: 2
Maquina com maior producao: 2
Maior producao total: 280
Resposta:
#include
int main() {
int maquinas, turnos;
int i, j;
int producao;
int meta;
int totalMaquina;
int abaixoMeta = 0;
int maiorProducao = -1;
int maquinaDestaque = 0;
printf("Digite a quantidade de maquinas: ");
scanf("%d", &maquinas);
printf("Digite a quantidade de turnos por maquina: ");
scanf("%d", &turnos);
printf("Digite a meta minima por turno: ");
scanf("%d", &meta);
for (i = 1; i <= maquinas; i++) {
totalMaquina = 0;
printf("\nMaquina %d\n", i);
for (j = 1; j <= turnos; j++) {
printf("Digite a producao do turno %d: ", j);
scanf("%d", &producao);
totalMaquina += producao;
if (producao < meta) {
abaixoMeta++;
}
}
printf("Total da maquina %d: %d\n", i, totalMaquina);
if (totalMaquina > maiorProducao) {
maiorProducao = totalMaquina;
maquinaDestaque = i;
}
}
printf("\nTurnos abaixo da meta: %d\n", abaixoMeta);
printf("Maquina com maior producao: %d\n", maquinaDestaque);
printf("Maior producao total: %d\n", maiorProducao);
return 0;
}
QUESTÃO 5 — Sistema de correção de provas por turma
Uma escola quer analisar o desempenho de várias turmas em uma prova com várias questões.
Crie um programa em C que peça:
- A quantidade de turmas;
- A quantidade de alunos por turma;
- A quantidade de questões da prova.
Para cada aluno, o programa deve pedir a pontuação de cada questão.
No final, mostre:
- A média de cada turma;
- A maior nota individual encontrada;
- A turma com maior média.
Use nested loops.
Exemplo:
Digite a quantidade de turmas: 2
Digite a quantidade de alunos por turma: 2
Digite a quantidade de questões: 3
Turma 1
Aluno 1
Digite a pontuação da questão 1: 2
Digite a pontuação da questão 2: 2
Digite a pontuação da questão 3: 1
Nota do aluno 1: 5
Aluno 2
Digite a pontuação da questão 1: 3
Digite a pontuação da questão 2: 2
Digite a pontuação da questão 3: 2
Nota do aluno 2: 7
Média da turma 1: 6.00
Turma 2
Aluno 1
Digite a pontuação da questão 1: 3
Digite a pontuação da questão 2: 3
Digite a pontuação da questão 3: 2
Nota do aluno 1: 8
Aluno 2
Digite a pontuação da questão 1: 2
Digite a pontuação da questão 2: 3
Digite a pontuação da questão 3: 3
Nota do aluno 2: 8
Média da turma 2: 8.00
Maior nota individual: 8
Turma com maior média: 2
Maior média: 8.00
Resposta:
#include
int main() {
int turmas, alunos, questoes;
int i, j, k;
int pontos;
int notaAluno;
int somaTurma;
int maiorNota = -1;
int turmaMaiorMedia = 0;
float mediaTurma;
float maiorMedia = -1;
printf("Digite a quantidade de turmas: ");
scanf("%d", &turmas);
printf("Digite a quantidade de alunos por turma: ");
scanf("%d", &alunos);
printf("Digite a quantidade de questoes: ");
scanf("%d", &questoes);
for (i = 1; i <= turmas; i++) {
somaTurma = 0;
printf("\nTurma %d\n", i);
for (j = 1; j <= alunos; j++) {
notaAluno = 0;
printf("Aluno %d\n", j);
for (k = 1; k <= questoes; k++) {
printf("Digite a pontuacao da questao %d: ", k);
scanf("%d", &pontos);
notaAluno = notaAluno + pontos;
}
printf("Nota do aluno %d: %d\n\n", j, notaAluno);
somaTurma = somaTurma + notaAluno;
if (notaAluno > maiorNota) {
maiorNota = notaAluno;
}
}
mediaTurma = (float) somaTurma / alunos;
printf("Media da turma %d: %.2f\n", i, mediaTurma);
if (mediaTurma > maiorMedia) {
maiorMedia = mediaTurma;
turmaMaiorMedia = i;
}
}
printf("\nMaior nota individual: %d\n", maiorNota);
printf("Turma com maior media: %d\n", turmaMaiorMedia);
printf("Maior media: %.2f\n", maiorMedia);
return 0;
}
Caso o C ainda não esteja instalado em seu dispositivo, clique no botão abaixo para realizar a instalação.





