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:
e. Exibir o salário médio, por departamento;
e. Exibir o salário médio, por departamento;
Passo 1
O enunciado pede para, dado um cadastro de funcionários de uma empresa com 8 departamentos, calcular e exibir o salário médio de cada departamento. O conteúdo aqui é manipulação de vetores, estruturas (struct), uso de loops para acumular valores e cálculo de média.
Passo 2
Definir uma struct para representar cada funcionário e declarar as variáveis necessárias: vetor de funcionários, número de funcionários (
n
), vetores para acumular soma de salário e contagem por departamento.Passo 3
Ler o número de funcionários (
n
) e, dentro de um loop de 1 até n
, ler os campos de cada funcionário: nome, idade, sexo, tempo de casa, departamento (1 a 8) e salário, armazenando-os no vetor.Passo 4
Inicializar dois vetores de tamanho 8 (índices 0 a 7) com zero: um para somar salários (
somaSalario[8]
) e outro para contar quantos funcionários há em cada departamento (contagem[8]
). No mesmo loop de leitura (ou em um loop separado), incrementar somaSalario[depto-1] += salario
e `contagem[depto-1]++.Passo 5
Após preencher somas e contagens, percorrer os 8 departamentos e para cada um calcular a média como
media = somaSalario[i] / contagem[i]
(checando se contagem[i]
é maior que zero) e usar printf
para exibir o salário médio de cada departamento.Resposta
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
#define DEPTOS 8
#define MAX_NOME 50
#define MAX_NOME 50
typedef struct {
char nome[MAX_NOME];
int idade;
char sexo;
int tempoCasa;
int departamento;
float salario;
} Funcionario;
char nome[MAX_NOME];
int idade;
char sexo;
int tempoCasa;
int departamento;
float salario;
} Funcionario;
int main() {
int n;
printf(“Digite o número de funcionários: “);
scanf(”%d”, &n);
int n;
printf(“Digite o número de funcionários: “);
scanf(”%d”, &n);
Funcionario *func = malloc(n * sizeof(Funcionario));
if (func == NULL) {
printf("Erro de alocação.\n");
return 1;
}
for (int i = 0; i < n; i++) {
printf("\n--- Funcionário %d ---\n", i+1);
printf("Nome: ");
scanf(" %49[^"]", func[i].nome);
printf("Idade: ");
scanf("%d", &func[i].idade);
printf("Sexo (M/F): ");
scanf(" %c", &func[i].sexo);
printf("Tempo de casa (anos): ");
scanf("%d", &func[i].tempoCasa);
printf("Departamento (1 a %d): ", DEPTOS);
scanf("%d", &func[i].departamento);
printf("Salário: ");
scanf("%f", &func[i].salario);
}
float somaSalario[DEPTOS] = {0.0f};
int contagem[DEPTOS] = {0};
for (int i = 0; i < n; i++) {
int d = func[i].departamento;
if (d >= 1 && d <= DEPTOS) {
somaSalario[d-1] += func[i].salario;
contagem[d-1]++;
}
}
printf("\nSalário médio por departamento:\n");
for (int i = 0; i < DEPTOS; i++) {
if (contagem[i] > 0) {
float media = somaSalario[i] / contagem[i];
printf("Departamento %d: R$ %.2f\n", i+1, media);
} else {
printf("Departamento %d: sem funcionários\n", i+1);
}
}
free(func);
return 0;
}