Um vetor float *peso contém o peso de n pessoas. Escreva um programa em C que identifique qual é a pessoa mais pesada e qual é a pessoa mais leve. O tamanho n do vetor e os pesos de cada pessoa devem ser gerados aleatoriamente. O programa deve produzir a seguinte saída:
A pessoa numero XXX e' a mais leve (peso = XXX.X kg)
A pessoa numero XXX e' a mais pesada (peso = XXX.X kg)

Passo 1

Resumindo o problema: precisamos gerar aleatoriamente o tamanho n de um vetor de floats que armazena pesos de pessoas, preencher esse vetor com valores de peso aleatórios, e então identificar qual índice corresponde ao peso mínimo (mais leve) e qual corresponde ao peso máximo (mais pesado). Vamos usar alocação dinâmica e as funções rand() e time() para gerar aleatoriedade.

Passo 2

Inicializar o gerador de números aleatórios usando srand(time(NULL)), de modo que a cada execução do programa os valores mudem.
Gerar o tamanho n do vetor dinamicamente. Por exemplo, podemos escolher n aleatoriamente entre 1 e 10 com a expressão rand() % 10 + 1.
Alocar dinamicamente um vetor float *peso de tamanho n usando malloc.

Passo 3

Preencher o vetor peso com valores aleatórios de peso. Para gerar um float com uma casa decimal entre, digamos, 40.0 e 100.0 kg, usamos algo como (rand() % 601 + 400) / 10.0.

Passo 4

Percorrer o vetor para encontrar o índice da pessoa mais leve e o índice da pessoa mais pesada. Inicializamos ambos ao primeiro elemento e, a cada novo elemento, comparamos para atualizar mínimos e máximos.

Passo 5

Imprimir o resultado no formato requisitado:
A pessoa numero XXX e’ a mais leve (peso = XXX.X kg)
A pessoa numero XXX e’ a mais pesada (peso = XXX.X kg)

Passo 6

Liberar a memória alocada antes de encerrar o programa.

Resposta

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand(time(NULL));
int n = rand() % 10 + 1;  // tamanho aleatório entre 1 e 10
float *peso = malloc(n * sizeof(float));
if (peso == NULL) {
    fprintf(stderr, "Falha na alocação de memória.\n");
    return 1;
}

// Preenchendo pesos aleatórios entre 40.0 e 100.0 kg
for (int i = 0; i < n; i++) {
    peso[i] = (rand() % 601 + 400) / 10.0f;
}

int idx_min = 0, idx_max = 0;
for (int i = 1; i < n; i++) {
    if (peso[i] < peso[idx_min]) {
        idx_min = i;
    }
    if (peso[i] > peso[idx_max]) {
        idx_max = i;
    }
}

printf("A pessoa numero %d e' a mais leve (peso = %.1f kg)\n", idx_min + 1, peso[idx_min]);
printf("A pessoa numero %d e' a mais pesada (peso = %.1f kg)\n", idx_max + 1, peso[idx_max]);

free(peso);
return 0;
}

Exercícios relacionados