Objetivo: ler, somar e calcular média.
Descrição: leia
inteiros em um vetor. Calcule soma e média aritmética e exiba ambos.
Critérios:
- Usar dois for: um para leitura, outro para soma.
- Mostrar “Soma = …, Média = …”.
Extensão: permita N informado pelo usuário (máx. 100).
Descrição: leia
Critérios:
Passo 1
O enunciado pede que eu leia um vetor com
inteiros, calcule a soma e a média aritmética desses valores e mostre na tela a mensagem exatamente no formato “Soma = …, Média = …”.
Informações e restrições fornecidas:
Informações e restrições fornecidas:
- Ler
inteiros inicialmente (extensão: permitir informado pelo usuário até no máximo ). - Usar exatamente dois laços for: um para leitura dos números para o vetor e outro para calcular a soma.
- Exibir a saída no formato: “Soma = X, Média = Y”.
- Deve aceitar a extensão: permitir que o usuário informe
com .
Passo 2
Entendimento do que é pedido (sem resolver ainda):
- “Ler um vetor” significa criar um espaço (vetor/array) para guardar os
inteiros lidos. - “Calcular soma” significa somar todos os elementos do vetor, produzindo um inteiro
. - “Calcular média aritmética” significa usar a fórmula
onde
é a soma dos elementos e
é o número de elementos.
- Atenção: se eu fizer divisão inteira (quando ambos os operandos são inteiros) posso perder a parte fracionária. Para obter a média correta com casas decimais preciso fazer uma divisão em ponto flutuante (por exemplo, converter a soma para double antes de dividir).
Passo 3
Estratégia geral (passos concretos que farei na implementação):
- Pedir ao usuário o valor de
. Validar que . (Se a versão fixa for exigida, pulo este passo e uso .) - Declarar um vetor de tamanho
(capacidade máxima), por exemplo . Vou usar apenas os primeiros elementos. - Usar o primeiro for para ler os
inteiros e armazená-los em até . - Usar o segundo for para percorrer o vetor e somar os valores em uma variável inteira
. - Calcular a média com conversão para ponto flutuante:
- Imprimir exatamente a string: “Soma = …, Média = …” onde os “…” são os valores calculados (por exemplo, soma inteira e média com duas casas decimais).
Passo 4
Explicando arrays e índices (para você saber fazer isso na prova):
- Um vetor (array) é uma sequência de posições:
. O índice começa em . - Para ler
valores usamos um for que vai de até . Em cada iteração lemos um inteiro e atribuímos a . - Exemplo curto: se
e o usuário digita , então teremos , , .
Passo 5
Explicando os dois for exigidos (por que dois e não um só):
- O enunciado exige especificamente dois for: um só para leitura e outro só para soma. Isso serve para treinar separação de responsabilidades.
- Primeiro for (leitura): não realiza soma, só preenche o vetor. Isso garante que a leitura e a soma sejam etapas distintas.
- Segundo for (soma): percorre o vetor já preenchido e acumula em
. - Sintaxe típica (pseudocódigo):
for i = 0 até N-1: ler vet[i]
for i = 0 até N-1: soma = soma + vet[i]
Passo 6
Atenção à média (explicando problema da divisão inteira):
- Se
e forem inteiros e eu fizer , em muitas linguagens (C, Java, etc.) o resultado será truncado para inteiro. Exemplo: se e , a divisão inteira dá (perdendo o ). - Solução: converter pelo menos um dos operandos para ponto flutuante (double/float). Em C fazemos:
- Assim a divisão é feita em ponto flutuante e obtemos a média correta, por exemplo
.
Passo 7
Exemplo passo a passo com números (para fixar):
Suponha e os valores lidos forem
.
Suponha
- Leitura (primeiro for) vai preencher o vetor:
. - Soma (segundo for): começa com
, acumula: , , , , . Então . - Média:
- Saída: “Soma = 15, Média = 3.00” (ou com outra formatação das casas decimais).
Passo 8
Código completo em C (atende a todas as restrições: dois for, permite
informado até
, imprime no formato pedido). Vou comentar linha a linha para você entender e conseguir fazer na prova.
#include <stdio.h>
int main(void) {
int N;
int vet[100]; /* vetor com capacidade para 100 inteiros */
int i;
int soma = 0;
double media;
/* pedir N ao usuário e validar (extensão) */
printf("Digite N (1 a 100): ");
if (scanf("%d", &N) != 1 || N < 1 || N > 100) {
printf("Valor de N invalido\n");
return 1;
}
/* PRIMEIRO for: leitura dos N inteiros no vetor */
for (i = 0; i < N; i++) {
printf("Elemento %d: ", i + 1);
scanf("%d", &vet[i]);
}
/* SEGUNDO for: soma dos elementos do vetor */
for (i = 0; i < N; i++) {
soma += vet[i];
}
/* cálculo da média em ponto flutuante para evitar divisão inteira */
media = (double) soma / N;
/* saída no formato exigido */
printf("Soma = %d, Média = %.2f\n", soma, media);
return 0;
}
Comentários rápidos sobre o código:
- A linha
int vet[100];reserva espaço para atéinteiros. Usamos somente os primeiros . - O primeiro for apenas faz leitura e armazena em
vet[i]. - O segundo for apenas soma os elementos e atualiza
soma. media = (double) soma / N;garante que a divisão resulte em número com casas decimais.printf("Soma = %d, Média = %.2f\n", soma, media);imprime a mensagem no formato pedido, com a média com duas casas decimais. Se quiser mais ou menos casas, mude%.2f.
Passo 9
Verificação e casos de teste (como você testa na prova mentalmente):
- Caso simples: se
e entrada 1 2 3 4 5então soma, média . Saída: “Soma = 15, Média = 3.00”. - Caso com média não inteira:
e entrada 3 4então soma, média . Sem o cast para double daria (errado). - Caso inválido: se o usuário digitar
, o programa mostra “Valor de N invalido” (proteger para não estourar o array).
Passo 10
Dicas para prova (motivação e pequenos macetes):
- Sempre pense se a divisão deve ser inteira ou ponto flutuante. Quando for média, geralmente precisa ser float/double.
- Lembre-se do índice do vetor ir de
até . - Se o enunciado pedir dois for, cumpra isso explicitamente — às vezes as questões cobram a forma, não só o resultado.
- Se estiver sem tempo, implemente primeiro a versão fixa com
, depois faça a extensão para ler e validar.
Resposta
#include <stdio.h>
int main(void) {
int N;
int vet[100];
int i;
int soma = 0;
double media;
int N;
int vet[100];
int i;
int soma = 0;
double media;
printf("Digite N (1 a 100): ");
if (scanf("%d", &N) != 1 || N < 1 || N > 100) {
printf("Valor de N invalido\n");
return 1;
}
for (i = 0; i < N; i++) {
printf("Elemento %d: ", i + 1);
scanf("%d", &vet[i]);
}
for (i = 0; i < N; i++) {
soma += vet[i];
}
media = (double) soma / N;
printf("Soma = %d, Média = %.2f\n", soma, media);
return 0;
}