Você está aqui: C ::: Desafios e Lista de Exercícios Resolvidos ::: Laços

Uma empresa decidiu fazer um levantamento em relação aos candidatos que se apresentarem para preenchimento de vagas no seu quadro de funcionários - Desafio de Programação Resolvido em C

Quantidade de visualizações: 620 vezes
Pergunta/Tarefa:

Uma empresa decidiu fazer um levantamento em relação aos candidatos que se apresentarem para preenchimento de vagas no seu quadro de funcionários. Supondo que você seja o programador dessa empresa, faça um programa C que:

a) Leia, para cada candidato, a idade, o sexo (M ou F) e a experiência no serviço (S ou N). Para encerrar a entrada de dados digite zero para a idade.

Calcule e mostre:

a) o número de candidatos do sexo feminino;
b) o número de candidatos do sexo masculino;
c) a idade média dos homens que já tem experiência no serviço;
d) a percentagem dos homens com mais de 45 anos entre o total dos homens;
e) o número de mulheres com idade inferior a 35 anos e com experiência no serviço;
f) a menor idade entre as mulheres que já tem experiência no serviço.

Seu programa C deverá exibir uma saída parecida com:

Informe a idade: 46
Informe o sexo [M, F]: M
Possui experiência [S, N]: S

Informe a idade: 19
Informe o sexo [M, F]: F
Possui experiência [S, N]: N

Informe a idade: 43
Informe o sexo [M, F]: M
Possui experiência [S, N]: N

Informe a idade: 58
Informe o sexo [M, F]: M
Possui experiência [S, N]: S

Informe a idade: 58
Informe o sexo [M, F]: F
Possui experiência [S, N]: S

Informe a idade: 37
Informe o sexo [M, F]: F
Possui experiência [S, N]: N

Informe a idade: 0

Quantidade de homens: 3
Quantidade de mulheres: 3
Idade média homens com experiência: 52.0
Porcentagem de homens com mais de 45 anos: 66.66%
Mulheres idade inferior 35 anos com experiência: 0
Menor idade mulheres com experiência: 58
Resposta/Solução:

Veja a resolução comentada deste exercício usando C:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>

// função principal do programa
int main(int argc, char *argv[]){
  // variaveis usdas na resolução do problema
  int idade, quant_h, quant_m;
  int quant_h_exp, quant_m_exp, soma_idades_h_exp;
  float idade_media_h_exp;
  int quant_h_mais_45_anos;
  float porc_h_mais_45_anos;
  int quant_m_menor_35_exp, menor_idade_m_exp;
  char sexo, experiencia;
    
  // vamos inicializar algumas variáveis
  quant_h = 0; // quantidade de homens
  quant_m = 0; // quantidade de mulheres
  quant_h_exp = 0; // quantidade de homens com experiência
  quant_m_exp = 0; // quantidade de mulheres com experiência
  quant_h_mais_45_anos = 0; // quantidade homens mais 45 anos
  soma_idades_h_exp = 0; // soma as idades dos homens com experiência
  menor_idade_m_exp = 0; // menor idade mulher com experiência
  quant_m_menor_35_exp = 0; // quantidade de mulheres menor que 35 anos
  // com experiência no serviço
    
  // agora o laço que lê a idade, o sexo e a experiência
  do{
    printf("\nInforme a idade: ");
    scanf("%d", &idade);
      
    // a idade informada é diferente de 0
    if(idade != 0){
      fflush(stdin); // para o scanf não sair pulando
      // vamos ler o sexo
      printf("Informe o sexo [M, F]: ");
      scanf("%c", &sexo);
      sexo = toupper(sexo); // converte para letra maiúscula se necessário
      
      fflush(stdin); // para o scanf não sair pulando
      printf("Possui experiência [S, N]: ");
      scanf("%c", &experiencia);
      experiencia = toupper(experiencia);
        
      // esse candidato é do sexo feminino?
      if(sexo == 'F'){
        // aumentamos a quantidade de candidatos do sexo feminino
        quant_m = quant_m + 1;
          
        // esta mulher possui experiência?
        if(experiencia == 'S'){
          // DICA DE PROGRAMADOR SÊNIOR: Se esta for a primeira mulher
          // com experiência, então ela possui a menor idade entre as
          // mulheres com experiência
          if(quant_m_exp == 0){
            menor_idade_m_exp = idade; // menor idade mulher com experiência
          }
          else{
            // essa idade é menor que a idade que já temos?
            if(idade < menor_idade_m_exp){
              menor_idade_m_exp = idade;
            }
          }
            
          // essa mulher tem idade menor que 35 e experiência?
          if(idade < 35){
            quant_m_menor_35_exp = quant_m_menor_35_exp + 1;
          }
            
          // aumentamos a quantidade de mulheres com experiência
          quant_m_exp = quant_m_exp + 1;
        }  
      }
      // é do sexo masculino então
      else{
        // aumentamos a quantidade de candidatos do sexo masculino
        quant_h = quant_h + 1;
        // esse homem possui experiência?
        if(experiencia == 'S'){
          // aumentamos a quantidade de homens com experiência
          quant_h_exp = quant_h_exp + 1;
          // precisamos somar esta idade então
          soma_idades_h_exp = soma_idades_h_exp + idade;
        }
          
        // esse homem tem mais de 45 anos?
        if(idade > 45){
          quant_h_mais_45_anos = quant_h_mais_45_anos + 1;
        }
      }
    }
  }while(idade != 0);
     
  // vamos mostrar os dados
  printf("\nQuantidade de homens: %d", quant_h);
  printf("\nQuantidade de mulheres: %d", quant_m);
    
  // vamos calcular a idade média dos homens com experiência
  // no serviço
  idade_media_h_exp = 0;
  if((quant_h > 0) && (quant_h_exp > 0)){
    idade_media_h_exp = soma_idades_h_exp / ((double)quant_h_exp);
    printf("\nIdade média homens com experiência: %f",
      idade_media_h_exp);
  }
  else{
    printf("\nNão houve homens com experiência");
  }
    
  // vamos mostrar a porcentagem de homens com mais de 45 anos
  if((quant_h > 0) && (quant_h_mais_45_anos > 0)){
    porc_h_mais_45_anos = (quant_h_mais_45_anos / (double)quant_h) * 100;
    printf("\nPorcentagem de homens com mais de 45 anos: %f%%", 
      porc_h_mais_45_anos);
  }
  else{
    printf("\nNão houve homens com idade maior de 45 anos");
  }
    
  // vamos mostrar a quantidade de mulheres com idade inferior
  // a 35 anos e com experiência
  printf("\nMulheres idade inferior 35 anos com experiência: %d",
    quant_m_menor_35_exp);
    
  // vamos mostrar a menor idade de mulheres com experiência
  if((quant_m > 0) && (quant_m_exp > 0)){
    printf("\nMenor idade mulheres com experiência: %d", 
      menor_idade_m_exp);
  }
  else{
    printf("\nNão houve mulheres com experiência");
  }
  
  printf("\n\n");
  system("PAUSE");
  return 0;
}


Link para compartilhar na Internet ou com seus amigos:

C ::: C para Engenharia ::: Hidrologia e Hidráulica

Como calcular o volume de chuvas em C - Fórmula do cálculo do volume de chuvas em C

Quantidade de visualizações: 293 vezes
O estudo da Hidrologia passa, necessariamente, pelo cálculo do volume de chuvas em uma determinada região, ou bacia hidrológica. Assim, é comum ouvirmos alguém dizer que, em um determinado local, choveu 100 mm durante um determinado período. Mas o que isso significa?

O mês mais chuvoso em Goiânia é dezembro, com média de 229 milímetros de precipitação de chuva. Isso significa que, em uma área de 1 m2, a lâmina de água formada pela chuva que cai apresenta uma altura de 229 milímetros.

Como sabemos que o volume é a área multiplicada pela altura, tudo que temos a fazer é considerar a área de 1 m2 multiplicada pela altura da lâmina de água (convertida também para metros). Veja a fórmula:

\[\text{Volume} = \text{(Área da Base) x Altura}\]

Lembre-se de que volume pode ser retornado em litros, ou seja, 1 m3 = 1000 litros.

Veja agora o código C completo que pede para o usuário informar a precipitação da chuva, ou seja, a altura da lâmina de água em milímetros e retorna o volume de água em litros.

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
  // variáveis usadas na resolução do problema
  float altura_lamina, volume_chuva;
   
  // vamos pedir para o usuário informar a altura da lâmina
  // de água em milímetros
  printf("Altura da lâmina de água em milímetros: ");
  scanf("%f", &altura_lamina);

  // o primeiro passo é converter os milímetros da lâmina de água
  // para metros
  altura_lamina = altura_lamina / 1000.0;

  // agora que já temos a altura da lâmina em metros, vamos multiplicar
  // pela base (1 metro quadrado) para obtermos o volume da chuva por
  // metro quadrado
  volume_chuva = (altura_lamina * 1.0) * 1000.0;

  // vamos mostrar o resultado
  printf("O volume da chuva é: %f litros para cada metro quadrado",
   volume_chuva);
  
  printf("\n\n");
  system("PAUSE");
  return 0;
}

Ao executar este código C nós teremos o seguinte resultado:

Altura da lâmina de água em milímetros: 229
O volume da chuva é: 229.0 litros para cada metro quadrado

Qual é o volume de 1 mm de chuva?

A altura pluviométrica é a espessura da lâmina d'água precipitada que cobre a região atingida pela chuva. Geralmente a unidade de medição é o milímetro (mm) porque o aparelho que mede a chuva, o pluviômetro, é lido em milímetros.

O pluviômetro é um aparelho meteorológico destinado a medir, em milímetros, a altura da lâmina de água gerada pela chuva que caiu numa área de 1 m2.

1 mm de chuva equivale a 1 litro de água, ou 1 dm3, considerando a área de 1 m2.


C ::: Dicas & Truques ::: Matemática e Estatística

Como usar a função modf() da linguagem C para separar um valor de ponto flutuante em suas partes inteira e fracionária

Quantidade de visualizações: 7799 vezes
Em algumas situações precisamos obter as partes inteira e fracionária de um valor de ponto flutuante. Para isso podemos usar a função modf(). Veja sua assinatura:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

double modf(double x, double * intpart);

O parâmetro x é o valor de ponto flutuante cujas partes queremos separar e intpart é uma variável do tipo double que receberá a parte inteira do valor. O retorno da função é o valor fracionário.

Vamos ver um exemplo? Veja como podemos quebrar o valor 34,27 em suas partes inteira e fracionária:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  double valor = 34.27;
  
  // vamos separar o valor em suas partes inteira e fracionária
  double inteira = 0.0, fracionaria = 0.0;
  fracionaria = modf(valor, &inteira);
  
  // vamos exibir o resultado
  printf("Parte inteira: %f\n", inteira);
  printf("Parte fracionaria: %f\n", fracionaria);
  
  printf("\n\n");
  system("pause");
  return 0;
}

Ao executarmos este código teremos o seguinte resultado:

Parte inteira: 34.000000
Parte fracionária: 0.270000


C ::: Dicas & Truques ::: Ponteiros, Referências e Memória

Como alocar memória dinâmica em C usando a função malloc()

Quantidade de visualizações: 28983 vezes
A função malloc() é usada em C para alocarmos um bloco de memória. Esta função recebe a quantidade de bytes a serem alocados e retorna um ponteiro do tipo void (genérico) para o início do bloco de memória obtido. Veja sua assinatura:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

void *malloc(size_t size);

Se a memória não puder se alocada, um ponteiro nulo (NULL) será retornado.

É importante se lembrar de alguns conceitos antes de usar esta função. Suponhamos que você queira alocar memória para um inteiro. Você poderia ter algo assim:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

// aloca memória para um int
ponteiro = malloc(4);

Embora este código esteja correto, não é um boa idéia assumir que um inteiro terá sempre 4 bytes. Desta forma, é melhor usar o operador sizeof() para obter a quantidade de bytes em um inteiro em uma determinada arquitetura. Veja:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

// aloca memória para um int
ponteiro = malloc(sizeof(int));

Eis o código completo para um aplicativo C que mostra como alocar memória para um inteiro e depois atribuir e obter o valor armazenado no bloco de memória alocado:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  // ponteiro para uma variável do tipo inteiro
  int *ponteiro;

  // aloca memória para um int
  ponteiro = malloc(sizeof(int));

  // testa se a memória foi alocada com sucesso
  if(ponteiro)
    printf("Memoria alocada com sucesso.\n");
  else
    printf("Nao foi possivel alocar a memoria.\n");

  // atribui valor à memória alocada
  *ponteiro = 45;

  // obtém o valor atribuído
  printf("Valor: %d\n\n", *ponteiro);

  // libera a memória
  free(ponteiro);

  system("PAUSE");
  return 0;
}

Uma aplicação interessante da função malloc() é quando precisamos construir uma matriz dinâmica. Veja como isso é feito no código abaixo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int i;

  // quantidade de elementos na matriz
  int quant = 10;

  // ponteiro para o bloco de memória
  int *ponteiro;

  // aloca memória para uma matriz de inteiros
  ponteiro = malloc(quant * sizeof(int));

  // testa se a memória foi alocada com sucesso
  if(ponteiro)
    printf("Memoria alocada com sucesso.\n");
  else{
    printf("Nao foi possivel alocar a memoria.\n");
    exit(1);
  }

  // atribui valores aos elementos do array
  for(i = 0; i < quant; i++){
    ponteiro[i] = i * 2;
  }

  // exibe os valores
  for(i = 0; i < quant; i++){
    printf("%d  ", ponteiro[i]);
  }

  // libera a memória
  free(ponteiro);

  printf("\n\n");
  system("PAUSE");
  return 0;
}



Desafios, Exercícios e Algoritmos Resolvidos de C

Veja mais Dicas e truques de C

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 35 usuários muito felizes estudando em nosso site.