Uma escola utiliza os conceitos
e
para avaliar as notas de seus alunos. Escrever um programa que solicita: o número de alunos da classe e o conceito de
cada um dos alunos, e mostra um histograma formato por caracteres “", onde a quantidade de "” corresponde ao total de alunos que obtiveram o correspondente conceito. O programa devevá mostrar também, para cada conceito, o percentual daquele conceito em relação ao total de alunos.
A: ****** (%A)
B: ********* (%B)
C: ************************* (%C)
D: ************ (%D)
E: **** (%E)
cada um dos alunos, e mostra um histograma formato por caracteres “", onde a quantidade de "” corresponde ao total de alunos que obtiveram o correspondente conceito. O programa devevá mostrar também, para cada conceito, o percentual daquele conceito em relação ao total de alunos.
A: ****** (%A)
B: ********* (%B)
C: ************************* (%C)
D: ************ (%D)
E: **** (%E)
Passo 1
O enunciado pede um programa que leia o número total de alunos de uma turma e, em seguida, o conceito (A, B, C, D ou E) de cada um. A saída deve ser um histograma onde cada conceito aparece seguido de um número de ‘*’ igual à quantidade de alunos com aquele conceito e, ao lado, o percentual correspondente em relação ao total de alunos. Para resolver isso precisamos usar vetores (ou arrays) de contagem, um laço de repetição para leitura, outro para impressão, e cálculo de porcentagem.
Passo 2
Inicializamos um array de contadores de tamanho 5, um vetor de rótulos para os conceitos (‘A’,‘B’,‘C’,‘D’,‘E’) e variáveis para número de alunos e percentuais. Isso nos permite agrupar toda a contagem de conceitos em uma única estrutura.
Passo 3
Solicitamos ao usuário o número de alunos (n) e usamos um laço for de 1 até n para ler, um por um, os conceitos. A cada leitura, validamos se o caractere está entre ‘A’ e ‘E’. Se for válido, incrementamos o contador correspondente subtraindo ‘A’ do caractere lido; caso contrário, exibimos uma mensagem de erro e repetimos a leitura daquele índice.
Passo 4
Depois de contar quantos alunos obteve cada conceito, percorremos os 5 conceitos para imprimir o histograma. Primeiro imprimimos a letra do conceito, depois um laço interno imprime tantas estrelas ‘*’ quanto o valor do contador daquele conceito. Para cada conceito também calculamos o percentual como
e o exibimos com duas casas decimais logo após as estrelas.
Passo 5
Pronto! O programa exibe o histograma pedido, com quantidade de ‘*’ e percentual para cada conceito.
Resposta
#include <stdio.h>
int main() {
int n, i, j;
int count[5] = {0}; // Contadores para A, B, C, D, E
char labels[5] = {‘A’,‘B’,‘C’,‘D’,‘E’};
char concept;
double percent;
int n, i, j;
int count[5] = {0}; // Contadores para A, B, C, D, E
char labels[5] = {‘A’,‘B’,‘C’,‘D’,‘E’};
char concept;
double percent;
// Leitura do número de alunos
printf("Digite o número de alunos: ");
scanf("%d", &n);
// Leitura e contagem dos conceitos
for (i = 0; i < n; i++) {
printf("Conceito do aluno %d: ", i + 1);
scanf(" %c", &concept);
if (concept >= 'A' && concept <= 'E') {
count[concept - 'A']++;
} else {
printf("Conceito inválido '%c'. Tente novamente.\n", concept);
i--; // repete a iteração para leitura válida
}
}
// Impressão do histograma
printf("\nHistograma de conceitos:\n");
for (i = 0; i < 5; i++) {
printf("%c: ", labels[i]);
for (j = 0; j < count[i]; j++) {
printf("*");
}
percent = (double) count[i] * 100.0 / n;
printf(" (%.2f%%)\n", percent);
}
return 0;
}