As questões devem ser implementadas em C.
Escreva um programa que calcule a média dos números digitados pelo usuário se eles forem pares. Termine a leitura se o usuário digitar 0. (2)
Escreva um programa que calcule a média dos números digitados pelo usuário se eles forem pares. Termine a leitura se o usuário digitar 0. (2)
Passo 1
O enunciado pede que seja escrito um programa em C que:
- Leia números digitados pelo usuário até que o usuário digite
(quando aparecer a leitura termina). - Calcule a média apenas dos números que forem pares dentre os números digitados.
- Não inclua o
de terminação na média (ou seja, termina a leitura e não é contabilizado).
Dados relevantes: - Entrada: uma sequência de números inteiros fornecidos pelo usuário, terminada por
. - Saída esperada: a média aritmética dos números pares digitados; se nenhum número par for digitado, deve ser tratada essa situação (por exemplo, informando que não houve pares).
Passo 2
Algoritmo geral em linguagem natural (passo a passo):
- Inicializar duas variáveis:
para acumular os números pares e para contar quantos pares foram lidos. Ambas começam em zero. - Repetir:
- Ler um número inteiro
. - Se
, interromper a leitura (sair do laço). O não é processado. - Caso contrário, verificar se
é par. Se for, acrescentar em e incrementar .
- Ler um número inteiro
- Após sair do laço, verificar se
. Se sim, calcular a média por e imprimir. Se não, imprimir mensagem indicando que nenhum número par foi digitado.
Passo 3
Como testar se um número é par:
- Em C usa-se o operador resto da divisão inteira: o operador é o símbolo \verb|%|.
- A condição para par é \verb|n % 2 == 0|.
- Exemplos (conceito):
-
portanto é par. -
portanto não é par.
Observação importante: oé um número par matematicamente, mas no enunciado serve exclusivamente para terminar a leitura — por isso, ao detectar deve-se encerrar sem adicionar esse na soma/contagem.
-
Passo 4
Estrutura do laço em C:
- Pode-se usar um laço infinito e fazer um \verb|break| quando
, por exemplo: - \verb|while (1) { scanf("%d", &n); if (n==0) break; … }|
- Leitura com \verb|scanf|: sempre verificar o retorno de \verb|scanf| é bom (retorna quantos itens foram lidos), para detectar entrada inválida.
- Ao detectar um número diferente de
, aplicar o teste de par e atualizar e .
Passo 5
Tipos de dados e cálculo da média:
- Usar uma variável inteira para a leitura do número (\verb|int n|).
- Usar \verb|long long soma| para acumular a soma (protege de estouro se o usuário digitar muitos ou muito grandes números).
- Usar \verb|int contagem| para contar quantos pares foram lidos.
- Para calcular a média como número real, fazer a conversão explícita para \verb|double| antes da divisão, evitando divisão inteira. Em fórmula:
e em C usa-se \verb|(double)soma / contagem| para obter o resultado em ponto flutuante.
Passo 6
Tratamento do caso sem pares e formato de saída:
- Se
(nenhum número par foi lido antes do ), imprimir uma mensagem clara, por exemplo: “Nenhum número par foi digitado.” - Caso contrário, imprimir a média. Uma boa formatação é mostrar a média com duas casas decimais, usando \verb|printf(“Média dos pares: %.2f\n”, media);|.
Passo 7
Exemplo rápido de execução mental para conferir o algoritmo:
- Entradas:
. - Números pares lidos:
e . -
. -
. -
. - Saída esperada: “Média dos pares: 6.00”.
Passo 8
Dicas para a prova:
- Lembre-se de não incluir o
de terminação no cálculo. - Sempre evite a divisão por zero verificando a contagem antes de dividir.
- Use casting explícito para \verb|double| ao calcular a média para não correr o risco de divisão inteira.
Resposta
#include <stdio.h>
int main(void) {
long long soma = 0;
int contagem = 0;
int n;
printf("Digite números inteiros (0 para terminar):\n");
while (1) {
if (scanf("%d", &n) != 1) {
fprintf(stderr, "Entrada inválida.\n");
return 1;
}
if (n == 0) {
break; /* 0 termina a leitura e não é contabilizado */
}
if (n % 2 == 0) {
soma += n;
contagem++;
}
}
if (contagem == 0) {
printf("Nenhum número par foi digitado.\n");
} else {
double media = (double)soma / contagem;
printf("Média dos pares: %.2f\n", media);
}
return 0;
}