Fazer um programa que receba do usuário a quantidade N de números a ser digitada. Em seguida, o programa deve alocar dinamicamente um vetor de N inteiros, receber N números do usuário e armazenar no vetor, e mostrar o maior valor do vetor, o menor valor do vetor e a média dos valores.
Passo 1
Beleza, o problema pede pra gente criar um programa em C que:
- receba um número N do usuário (quantos valores ele vai digitar),
- aloque dinamicamente um vetor de N inteiros,
- leia esses N valores e armazene no vetor,
- encontre o maior e o menor valor desse vetor,
- calcule a média dos valores,
- mostre o maior, o menor e a média.
Matéria envolvida: alocação dinâmica de memória (
malloc
/free
), laços de repetição (for
), leitura de dados (scanf
), operações básicas (comparação e soma) e cálculo de média. A gente vai precisar revisar como usar malloc
, como percorrer um vetor pra achar mínimo, máximo e somar tudo, e depois dividir pra obter a média.Passo 2
Primeiro, vamos pedir ao usuário o valor de N e alocar um vetor com capacidade para N inteiros. Em C, a gente faz assim:
int N;
scanf("%d", &N);
int *vetor = malloc(N * sizeof(int));
Aqui
malloc(N * sizeof(int))
reserva espaço pra N inteiros. Depois de usar, a gente deve liberar com free(vetor)
.Passo 3
Agora a gente precisa ler os N números que o usuário vai digitar e guardar no vetor. A gente usa um laço
for
que vai de 0 até N-1:for(int i = 0; i < N; i++) {
scanf("%d", &vetor[i]);
}
Passo 4
Com os números no vetor, vamos percorrer ele de novo para encontrar o menor, o maior e ao mesmo tempo ir somando tudo pra depois calcular a média. A lógica é:
- Inicializar
menor
emaior
com o primeiro elementovetor[0]
. - Inicializar
soma = 0
. - Para cada elemento
vetor[i]
:- se
vetor[i] < menor
, atualizarmenor = vetor[i]
. - se
vetor[i] > maior
, atualizarmaior = vetor[i]
. - fazer
soma += vetor[i]
.
- se
Passo 5
Depois desse laço, a gente já tem
menor
, maior
e soma
. A média é dada porOu, no código C:
double media = (double)soma / N;
Aí a gente converte soma pra
double
pra não perder parte fracionária.Passo 6
Pra finalizar, a gente imprime:
printf("Menor valor: %d\n", menor);
printf("Maior valor: %d\n", maior);
printf("Media: %.2f\n", media);
E não esquecer de liberar a memória:
free(vetor);
Resposta
#include <stdio.h>
#include <stdlib.h>
int main() {
int N;
printf("Quantos numeros vai digitar? ");
scanf("%d", &N);
// Aloca dinamicamente o vetor
int *vetor = malloc(N * sizeof(int));
if (vetor == NULL) {
printf("Erro de alocacao\n");
return 1;
}
// Leitura dos valores
for (int i = 0; i < N; i++) {
printf("Digite o %dº numero: ", i+1);
scanf("%d", &vetor[i]);
}
// Inicializa menor, maior e soma
int menor = vetor[0];
int maior = vetor[0];
int soma = 0;
// Percorre para achar menor, maior e acumular soma
for (int i = 0; i < N; i++) {
if (vetor[i] < menor) {
menor = vetor[i];
}
if (vetor[i] > maior) {
maior = vetor[i];
}
soma += vetor[i];
}
// Calcula a média
double media = (double)soma / N;
// Exibe resultados
printf("\nMenor valor: %d\n", menor);
printf("Maior valor: %d\n", maior);
printf("Media: %.2f\n", media);
// Libera memória
free(vetor);
return 0;
}