Desenvolva um programa na Linguagem de Programação C no qual o usuário digite certa quantidade de números inteiros entre 0 e 9 até que um número fora desta faixa seja digitado. Em seguida, o programa deverá imprimir na tela a quantidade de números 0 digitados, a quantidade de números 1 digitados, a quantidade de números 2 digitados, etc. Se o usuário não digitou nenhum número 3, por exemplo, o programa não deve imprimir para o usuário a quantidade 0 (zero) para esse número. Utilize um vetor na implementação do programa.
Passo 1
O enunciado pede um programa em C que leia vários números inteiros fornecidos pelo usuário e, quando o usuário digitar um número fora da faixa
, termine a leitura e imprima quantas vezes cada dígito entre
e
foi digitado. Regras importantes extraídas do enunciado:
- A leitura continua enquanto o usuário digitar números inteiros entre
e . - Ao digitar um número fora dessa faixa, a leitura para imediatamente (esse número não conta).
- O programa deve usar um vetor (array) para armazenar as contagens.
- Ao imprimir, não exibir entradas com contagem zero (ou seja, só imprimir os dígitos que foram digitados pelo menos uma vez).
- Não pedir informações adicionais; usar entrada padrão (teclado) e saída padrão (tela).
Passo 2
Escolhendo a estrutura: vamos usar um vetor inteiro com tamanho
para guardar as contagens. Cada posição do vetor corresponde a um dígito:
- A posição
guarda quantas vezes o usuário digitou o número . - A posição
guarda quantas vezes o usuário digitou o número . - …
- A posição
guarda quantas vezes o usuário digitou o número .
Por que um vetor de tamanho
? Porque os dígitos possíveis são exatamente
, logo precisamos de uma célula para cada um. Em C isso se faz com algo como inteiros; (índice
com
). Inicializamos com zeros para começar as contagens do zero.
int cont[10] = {0};. Explicando o que acontece aí: cont é um bloco contíguo de memória com
cont[i] é o inteiro na posição
Passo 3
Como ler os números e atualizar o vetor: vamos usar um laço infinito que lê um inteiro por vez e verifica se ele está dentro da faixa. Pseudopasso lógico:
- Ler um inteiro
x. - Se a leitura falhar (por exemplo EOF) ou se
x < 0oux > 9, sair do laço (termina a leitura). - Caso contrário, incrementar
cont[x](ou seja,cont[x] = cont[x] + 1). - Repetir.
Detalhes importantes e didáticos:
- Em C usamos
scanf("%d", &x)para ler um inteiro.scanfretorna o número de itens lidos com sucesso; se retornar diferente de, a leitura falhou (por ex. fim de arquivo ou entrada não numérica). - Checar
if (x < 0 || x > 9)verifica sexestá fora da faixa. Se estiver fora, fazemos breakpara encerrar a leitura. - Ao incrementar
cont[x], usamos o valor lido como índice do vetor. Como garantimos, o acesso é seguro.
Exemplo de trecho (explicação, não o programa completo aqui):
- Se o usuário digitar
, então executamos cont[3]++;. - Se digitar
, fazemos cont[7]++;. - Se digitar
ou , interrompemos o laço e não incrementamos nada para esse valor.
Passo 4
Como imprimir somente os dígitos que ocorreram: após terminar a leitura, percorremos o vetor de índice
de
até
. Para cada
i, se cont[i] > 0 imprimimos uma linha com o dígito e a contagem. Em C usamos um laço for (i = 0; i < 10; i++) e dentro if (cont[i] > 0) printf(...);.Formato sugerido de saída (um exemplo claro): para cada dígito que apareceu ao menos uma vez, imprimir
- “Número X: Y vez(es)” onde
Xé o dígito eYé a contagem. Em C:printf("Numero %d: %d\n", i, cont[i]);
Observação: o enunciado só exige que não se imprima as quantidades zero; ele não exige texto fixo, então você pode adaptar o formato se quiser. Aqui usamos um texto simples e legível.
Passo 5
Casos de borda e comportamento prático:
- Se o usuário não digitar nenhum número válido antes de digitar um valor fora da faixa, então todas as contagens serão zero e, seguindo a regra, o programa não imprimirá nenhuma linha. Se preferir, poderia-se imprimir uma mensagem como “Nenhum dígito foi digitado”, mas o enunciado não exige isso — então não imprimiremos nada.
- Se a entrada contiver um token não numérico,
scanffalhará; nosso laço pode detectar isso e sair. Em ambiente de prova, considerar entradas bem-formadas é razoável. - A solução usa apenas um vetor de
inteiros e operações O(1) por leitura; é simples e eficiente.
Passo 6
Vou encerrar com encorajamento: você já tem a ideia completa — vetor com
posições, laço de leitura com
scanf, teste de faixa e incremento, e impressão condicional. Agora vou deixar o programa final pronto para você colar e testar no seu compilador C preferido.Resposta
#include <stdio.h>
int main(void) {
int cont[10] = {0}; /* vetor de contagem para os dígitos 0..9 */
int x;
/* Ler números até que um número fora da faixa 0..9 seja digitado */
while (1) {
if (scanf("%d", &x) != 1) { /* leitura falhou (EOF ou entrada inválida) */
break;
}
if (x < 0 || x > 9) { /* número fora da faixa encerra a leitura */
break;
}
cont[x]++; /* incrementa a contagem do dígito lido */
}
/* Imprimir somente os dígitos cuja contagem é maior que zero */
for (int i = 0; i < 10; i++) {
if (cont[i] > 0) {
printf("Numero %d: %d\n", i, cont[i]);
}
}
return 0;
}