Uma empresa de informática comercializa um programa para gerenciar o cadastro de informações dos funcionários de empresas. Uma determinada empresa, com 8 departamentos, adquiriu o programa e, ao executar o programa pela primeira vez, informou o número de funcionários e as informações de cada funcionário. As informações armazenadas são nome (cadeia de caracteres), idade (inteiro), sexo (caractere), tempo de casa, em anos (inteiro), departamento (inteiro) e salário (em reais). Escreva um programa em C para realizar as seguintes operações:
d. Exibir os dados dos funcionários com o menor e com o maior tempo de casa;

Passo 1

Resumo do enunciado e conteúdo: a gente precisa escrever em C uma função que, dado um cadastro de funcionários (nome, idade, sexo, tempo de casa, departamento e salário), encontre e exiba o funcionário com menor tempo de casa e o com maior tempo de casa. O conteúdo é varredura de vetor e uso de estruturas (struct) para armazenar dados compostos.

Passo 2

Definir a estrutura e ler os dados: crie uma struct Funcionario com os campos pedidos, depois leia o número de funcionários n e, em seguida, faça um loop para ler os dados de cada funcionário e armazená-los num vetor.

Passo 3

Inicializar variáveis de busca de mínimo e máximo: após a leitura, defina dois índices, minIndex e maxIndex, iniciando ambos em 0 (o primeiro funcionário).

Passo 4

Fazer a varredura para encontrar mínimo e máximo: percorra do i=1 até n–1 e compare tempoCasa de cada funcionário com os do índice atual de minIndex e maxIndex. Se achar um tempo menor, atualize minIndex; se achar maior, atualize maxIndex.

Passo 5

Exibir os resultados: após a busca, use printf para mostrar todos os campos de Funcionario no minIndex e no maxIndex, indicando quem tem o menor e quem tem o maior tempo de casa.

Resposta

#include <stdio.h>
#include <string.h>
#define MAX_FUNC 1000
typedef struct {
char nome[50];
int idade;
char sexo;
int tempoCasa;
int departamento;
float salario;
} Funcionario;
int main() {
int n;
Funcionario vet[MAX_FUNC];
printf("Digite o número de funcionários: ");
scanf("%d", &n);

for (int i = 0; i < n; i++) {
    printf("\nFuncionário %d:\n", i + 1);
    printf("Nome: ");
    scanf(" %49[^"]", vet[i].nome);
    printf("Idade: ");
    scanf("%d", &vet[i].idade);
    printf("Sexo (M/F): ");
    scanf(" %c", &vet[i].sexo);
    printf("Tempo de casa (anos): ");
    scanf("%d", &vet[i].tempoCasa);
    printf("Departamento (número): ");
    scanf("%d", &vet[i].departamento);
    printf("Salário (R$): ");
    scanf("%f", &vet[i].salario);
}

int minIndex = 0, maxIndex = 0;
for (int i = 1; i < n; i++) {
    if (vet[i].tempoCasa < vet[minIndex].tempoCasa) {
        minIndex = i;
    }
    if (vet[i].tempoCasa > vet[maxIndex].tempoCasa) {
        maxIndex = i;
    }
}

printf("\n--- Funcionário com MENOR tempo de casa ---\n");
printf("Nome: %s\nIdade: %d\nSexo: %c\nTempo de casa: %d anos\nDepartamento: %d\nSalário: R$ %.2f\n",
       vet[minIndex].nome,
       vet[minIndex].idade,
       vet[minIndex].sexo,
       vet[minIndex].tempoCasa,
       vet[minIndex].departamento,
       vet[minIndex].salario);

printf("\n--- Funcionário com MAIOR tempo de casa ---\n");
printf("Nome: %s\nIdade: %d\nSexo: %c\nTempo de casa: %d anos\nDepartamento: %d\nSalário: R$ %.2f\n",
       vet[maxIndex].nome,
       vet[maxIndex].idade,
       vet[maxIndex].sexo,
       vet[maxIndex].tempoCasa,
       vet[maxIndex].departamento,
       vet[maxIndex].salario);

return 0;
}

Exercícios relacionados