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:
  1. receba um número N do usuário (quantos valores ele vai digitar),
  2. aloque dinamicamente um vetor de N inteiros,
  3. leia esses N valores e armazene no vetor,
  4. encontre o maior e o menor valor desse vetor,
  5. calcule a média dos valores,
  6. 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 e maior com o primeiro elemento vetor[0].
  • Inicializar soma = 0.
  • Para cada elemento vetor[i]:
    • se vetor[i] < menor, atualizar menor = vetor[i].
    • se vetor[i] > maior, atualizar maior = vetor[i].
    • fazer soma += vetor[i].

Passo 5

Depois desse laço, a gente já tem menor, maior e soma. A média é dada por
bar x = sumi=1^N xiN
Ou, 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;
}

Exercícios relacionados