Enviar um café pro programador

Pode me ajudar a transformar cafeína em código?

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:

Douglas disse...

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á.

joagostini disse...

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ó!

Unknown disse...

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.

Unknown disse...

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

Estou gostando muito do curso!

Unknown disse...

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!

Andre Kaique estudando da UNIP disse...

#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);

}

Andre Kaique estudando da UNIP disse...

#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);

}

Andre Kaique estudando da UNIP disse...

#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);

}

Andre Kaique estudando da UNIP disse...

#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);

}

Danillo Assunção disse...

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

Danillo Assunção disse...

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