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 [\,0,9\,], termine a leitura e imprima quantas vezes cada dígito entre \,0 e \,9 foi digitado. Regras importantes extraídas do enunciado:
  • A leitura continua enquanto o usuário digitar números inteiros entre \,0 e \,9.
  • 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 \,10 para guardar as contagens. Cada posição do vetor corresponde a um dígito:
  • A posição 0 guarda quantas vezes o usuário digitou o número 0.
  • A posição 1 guarda quantas vezes o usuário digitou o número 1.
  • A posição 9 guarda quantas vezes o usuário digitou o número 9.
Por que um vetor de tamanho \,10? Porque os dígitos possíveis são exatamente \,0,1,\dots,9, logo precisamos de uma célula para cada um. Em C isso se faz com algo como int cont[10] = {0};. Explicando o que acontece aí: cont é um bloco contíguo de memória com \,10 inteiros; cont[i] é o inteiro na posição i (índice i com 0 \le i \le 9). Inicializamos com zeros para começar as contagens do zero.

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:
  1. Ler um inteiro x.
  2. Se a leitura falhar (por exemplo EOF) ou se x < 0 ou x > 9, sair do laço (termina a leitura).
  3. Caso contrário, incrementar cont[x] (ou seja, cont[x] = cont[x] + 1).
  4. Repetir.
Detalhes importantes e didáticos:
  • Em C usamos scanf("%d", &x) para ler um inteiro. scanf retorna o número de itens lidos com sucesso; se retornar diferente de \,1, a leitura falhou (por ex. fim de arquivo ou entrada não numérica).
  • Checar if (x < 0 || x > 9) verifica se x está fora da faixa [\,0,9\,]. Se estiver fora, fazemos break para encerrar a leitura.
  • Ao incrementar cont[x], usamos o valor lido como índice do vetor. Como garantimos 0 \le x \le 9, o acesso é seguro.
Exemplo de trecho (explicação, não o programa completo aqui):
  • Se o usuário digitar \,3, então executamos cont[3]++;.
  • Se digitar \,7, fazemos cont[7]++;.
  • Se digitar \,12 ou -1, 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 i de \,0 até \,9. 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 e Y é 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, scanf falhará; 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 \,10 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 \,10 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;
}

Exercícios relacionados