Programa em C que diz quantos dias o mês possui

Programa em C que recebe o mês e informa quantos dias ele possui.Vamos criar agora um programa que pede o mês ao usuário, e retorna quantos dias esse mês possui.
Vamos resolver usando apenas SWITCH e cases acumulados.

Exercício:
Crie um programa em C que receba um inteiro, de 1 até 12, representando os meses do ano e retorne o número de dias do mês.

Use switch e não use break. 
Use acúmulo de case e suponha que fevereiro tenha sempre 28 dias.


Como obter certificação de programação em C

Como programar: aplicativo que diz quantos dias um mês possui em C

Inicialmente, a variável 'dias' é declarada como tendo 31 dias.

Caso seja o mês 4, 6, 9 ou 11, é subtraído 1 da variável 'dias'  e o programa informa que esses meses possuem 30 dias.

Caso seja o mês 2, é subtraído 2  de 'dias', ficando 28 dias para o mês de fevereiro.

Caso não seja nenhum desses meses, não cai no switch, então continua com 31 dias (que são os meses 1, 3, 5, 7, 8, 10 e 12).

Assim, nosso código C fica:

#include <stdio.h>

int main()
{
        int mes,
            dias=31;

        printf("Digite o mes [1-12]: ");
        scanf("%d", &mes);

        if(mes>12 || mes<1)
            printf("Mes invalido");
        else
            switch( mes )
                {
                    // fevereiro: subtraímos 2 dias aqui e 1 dia no próximo case
                    case 2:
                        dias -=2;

                    //meses que possuem 30 dias: só subtraímos 1 dia
                    case 4: case 6: case 9: case 11:
                        dias--;

                }

        printf("O mes %d possui %d dias", mes, dias);

}




11 comentários:

  1. Olá!

    Antes de mais nada, gostaria de parabenizar pelo excelente trabalho que estão fazendo.

    Fiquei com uma dúvida, por o C não subtraiu a variável dia duas vezes?
    Como o C se achou sem o break?

    Agradeço desde já.

    ResponderExcluir
  2. Olá
    Fiquei surpreso com a solução do exercício. Não ficou claro na aula que podia por uma única instrução para vários cases em cascata.
    Entendi que cada case seria executado sem o break;, mas não que podia juntar todos os cases como um só!

    ResponderExcluir
  3. To gostando muito do curso, Parabens e Obrigado.

    Esse exercício eu o modifiquei porque achei mais interessante e fica a dica pra quem quiser tentar ao inves de somente dizer quantos dias tem o mes, mandar ele calcular qual o numero do dia durante o ano. 10/02 somaria 31 dias de janeiro + 10 de fevereiro chegando 10/02 sendo o 41º dia do ano e por ae vai.

    ResponderExcluir
  4. Por que a resposta do ultimo exercicio não tem default?

    Estou gostando muito do curso!

    ResponderExcluir
  5. Bom dia!

    Ainda estou aprendendo.

    O curso de vcs é ótimo, a lógica dos exercícios resolvidos super simples.

    Nesse exercício do Switch quando digito um numero de mês invalido ele aparece a mensagem " mês invalido mês 13 possui 31 dias".Fiquei com duvida no default porque nesse exercício você não colocou?

    Obrigado pela atenção.

    parabéns pelo curso excente!

    ResponderExcluir
  6. #include
    //2. Faça uma função que receba um número inteiro de 1 a 12 e imprima em tela o mês e a sua quantidade de dias
    //de acordo com o número digitado pelo usuário. Exemplo: Entrada = 4. Saída = abril.
    void imprimaMes_1(){
    printf("[Janeiro] //");
    }

    void imprimaMes_2(){
    printf("[Fevereiro] //");
    }
    void imprimaMes_3(){
    printf("[Marco ] //");
    }
    void imprimaMes_4(){
    printf("[Abril] //");
    }
    void imprimaMes_5(){
    printf("[Maio] //");
    }
    void imprimaMes_6(){
    printf("[Junho] //");
    }
    void imprimaMes_7(){
    printf("[Julho] //");
    }
    void imprimaMes_8(){
    printf("[Agosto] //");
    }
    void imprimaMes_9(){
    printf("[Setembro] //");
    }
    void imprimaMes_10(){
    printf("[Outubro] //");
    }
    void imprimaMes_11(){
    printf("[Novembro] //");
    }
    void imprimaMes_12(){
    printf("[Dezembro] //");
    }
    void Invalidomes(){
    //if(mes>12 || mes<1)
    printf("ERRO: MES INVALIDO:\n\n //");
    // return main;
    }
    int main()
    {
    int mes,
    dias=31;

    printf("Digite o mes [1-12]: ");
    scanf("%d", &mes);


    switch( mes )
    {
    case 1:
    imprimaMes_1();
    break;
    // fevereiro: subtraímos 2 dias aqui e 1 dia no próximo case
    case 2:
    imprimaMes_2();
    dias -=3;
    break;
    case 3:
    imprimaMes_3();
    break;
    //meses que possuem 30 dias: só subtraímos 1 dia
    case 4:
    imprimaMes_4();
    dias--;
    break;
    case 5:
    imprimaMes_5();
    break;
    case 6:
    imprimaMes_6();
    dias--;
    break;
    case 7:
    imprimaMes_7();
    break;
    case 8:
    imprimaMes_8();
    break;
    case 9:
    imprimaMes_9();
    dias--;
    break;
    case 11:
    imprimaMes_10();
    dias--;
    break;
    case 12:
    imprimaMes_3();
    break;
    default:
    Invalidomes();
    break;
    }

    printf("O mes %d possui %d dias", mes, dias);

    }

    ResponderExcluir
  7. #include
    //2. Faça uma função que receba um número inteiro de 1 a 12 e imprima em tela o mês e a sua quantidade de dias
    //de acordo com o número digitado pelo usuário. Exemplo: Entrada = 4. Saída = abril.
    void imprimaMes_1(){
    printf("[Janeiro] //");
    }

    void imprimaMes_2(){
    printf("[Fevereiro] //");
    }
    void imprimaMes_3(){
    printf("[Marco ] //");
    }
    void imprimaMes_4(){
    printf("[Abril] //");
    }
    void imprimaMes_5(){
    printf("[Maio] //");
    }
    void imprimaMes_6(){
    printf("[Junho] //");
    }
    void imprimaMes_7(){
    printf("[Julho] //");
    }
    void imprimaMes_8(){
    printf("[Agosto] //");
    }
    void imprimaMes_9(){
    printf("[Setembro] //");
    }
    void imprimaMes_10(){
    printf("[Outubro] //");
    }
    void imprimaMes_11(){
    printf("[Novembro] //");
    }
    void imprimaMes_12(){
    printf("[Dezembro] //");
    }
    void Invalidomes(){
    //if(mes>12 || mes<1)
    printf("ERRO: MES INVALIDO:\n\n //");
    // return main;
    }
    int main()
    {
    int mes,
    dias=31;

    printf("Digite o mes [1-12]: ");
    scanf("%d", &mes);


    switch( mes )
    {
    case 1:
    imprimaMes_1();
    break;
    // fevereiro: subtraímos 2 dias aqui e 1 dia no próximo case
    case 2:
    imprimaMes_2();
    dias -=3;
    break;
    case 3:
    imprimaMes_3();
    break;
    //meses que possuem 30 dias: só subtraímos 1 dia
    case 4:
    imprimaMes_4();
    dias--;
    break;
    case 5:
    imprimaMes_5();
    break;
    case 6:
    imprimaMes_6();
    dias--;
    break;
    case 7:
    imprimaMes_7();
    break;
    case 8:
    imprimaMes_8();
    break;
    case 9:
    imprimaMes_9();
    dias--;
    break;
    case 11:
    imprimaMes_10();
    dias--;
    break;
    case 12:
    imprimaMes_3();
    break;
    default:
    Invalidomes();
    break;
    }

    printf("O mes %d possui %d dias", mes, dias);

    }

    ResponderExcluir
  8. #include
    //2. Faça uma função que receba um número inteiro de 1 a 12 e imprima em tela o mês e a sua quantidade de dias
    //de acordo com o número digitado pelo usuário. Exemplo: Entrada = 4. Saída = abril.
    void imprimaMes_1(){
    printf("[Janeiro] //");
    }

    void imprimaMes_2(){
    printf("[Fevereiro] //");
    }
    void imprimaMes_3(){
    printf("[Marco ] //");
    }
    void imprimaMes_4(){
    printf("[Abril] //");
    }
    void imprimaMes_5(){
    printf("[Maio] //");
    }
    void imprimaMes_6(){
    printf("[Junho] //");
    }
    void imprimaMes_7(){
    printf("[Julho] //");
    }
    void imprimaMes_8(){
    printf("[Agosto] //");
    }
    void imprimaMes_9(){
    printf("[Setembro] //");
    }
    void imprimaMes_10(){
    printf("[Outubro] //");
    }
    void imprimaMes_11(){
    printf("[Novembro] //");
    }
    void imprimaMes_12(){
    printf("[Dezembro] //");
    }
    void Invalidomes(){
    //if(mes>12 || mes<1)
    printf("ERRO: MES INVALIDO:\n\n //");
    // return main;
    }
    int main()
    {
    int mes,
    dias=31;

    printf("Digite o mes [1-12]: ");
    scanf("%d", &mes);


    switch( mes )
    {
    case 1:
    imprimaMes_1();
    break;
    // fevereiro: subtraímos 2 dias aqui e 1 dia no próximo case
    case 2:
    imprimaMes_2();
    dias -=3;
    break;
    case 3:
    imprimaMes_3();
    break;
    //meses que possuem 30 dias: só subtraímos 1 dia
    case 4:
    imprimaMes_4();
    dias--;
    break;
    case 5:
    imprimaMes_5();
    break;
    case 6:
    imprimaMes_6();
    dias--;
    break;
    case 7:
    imprimaMes_7();
    break;
    case 8:
    imprimaMes_8();
    break;
    case 9:
    imprimaMes_9();
    dias--;
    break;
    case 11:
    imprimaMes_10();
    dias--;
    break;
    case 12:
    imprimaMes_3();
    break;
    default:
    Invalidomes();
    break;
    }

    printf("O mes %d possui %d dias", mes, dias);

    }

    ResponderExcluir
  9. #include
    //2. Faça uma função que receba um número inteiro de 1 a 12 e imprima em tela o mês e a sua quantidade de dias
    //de acordo com o número digitado pelo usuário. Exemplo: Entrada = 4. Saída = abril.
    void imprimaMes_1(){
    printf("[Janeiro] //");
    }

    void imprimaMes_2(){
    printf("[Fevereiro] //");
    }
    void imprimaMes_3(){
    printf("[Marco ] //");
    }
    void imprimaMes_4(){
    printf("[Abril] //");
    }
    void imprimaMes_5(){
    printf("[Maio] //");
    }
    void imprimaMes_6(){
    printf("[Junho] //");
    }
    void imprimaMes_7(){
    printf("[Julho] //");
    }
    void imprimaMes_8(){
    printf("[Agosto] //");
    }
    void imprimaMes_9(){
    printf("[Setembro] //");
    }
    void imprimaMes_10(){
    printf("[Outubro] //");
    }
    void imprimaMes_11(){
    printf("[Novembro] //");
    }
    void imprimaMes_12(){
    printf("[Dezembro] //");
    }
    void Invalidomes(){
    //if(mes>12 || mes<1)
    printf("ERRO: MES INVALIDO:\n\n //");
    // return main;
    }
    int main()
    {
    int mes,
    dias=31;

    printf("Digite o mes [1-12]: ");
    scanf("%d", &mes);


    switch( mes )
    {
    case 1:
    imprimaMes_1();
    break;
    // fevereiro: subtraímos 2 dias aqui e 1 dia no próximo case
    case 2:
    imprimaMes_2();
    dias -=3;
    break;
    case 3:
    imprimaMes_3();
    break;
    //meses que possuem 30 dias: só subtraímos 1 dia
    case 4:
    imprimaMes_4();
    dias--;
    break;
    case 5:
    imprimaMes_5();
    break;
    case 6:
    imprimaMes_6();
    dias--;
    break;
    case 7:
    imprimaMes_7();
    break;
    case 8:
    imprimaMes_8();
    break;
    case 9:
    imprimaMes_9();
    dias--;
    break;
    case 11:
    imprimaMes_10();
    dias--;
    break;
    case 12:
    imprimaMes_3();
    break;
    default:
    Invalidomes();
    break;
    }

    printf("O mes %d possui %d dias", mes, dias);

    }

    ResponderExcluir
  10. Parabéns pelo trabalho de vocês. Como ficaria esse código, substituindo o switch pelo elso if? Obrigado

    ResponderExcluir
  11. Parabéns pelo trabalho de vocês. Como ficaria esse código substituindo o switch pelo else if?

    ResponderExcluir

É quase impossível criar centenas de páginas voltadas para programação C e não cometer algum erro.

- Se notar algum conceito, letra ou trecho de código errado, deixe sua correção

- Se perceber uma maneira melhor ou mais eficiente de fazer algo, deixe sua ideia

- Se algo não ficar claro ou for confuso, nos avise

Aos poucos vamos aumentando e melhorando a qualidade de nosso material, e para isso contamos com sua ajuda.