fork download
  1. #include <ctime>
  2. #include <cstdio>
  3.  
  4. const char *months[]={
  5. "\nJanuary","\nFebruary","\nMarch","\nApril","\nMay","\nJune","\nJuly","\nAugust","\nSeptember","\nOctober","\nNovember","\nDecember"
  6. };
  7.  
  8. int month_days[] = {31, 28, 31, 30, 31, 30, 31 ,31 ,30, 31, 30, 31};
  9.  
  10. int first_day_year(int year)
  11. {
  12. int first_day;
  13. int x;
  14. int y;
  15. int z;
  16.  
  17. x = (year - 1.)/4.0;
  18. y = (year - 1.)/100.;
  19. z = (year - 1.)/400.;
  20.  
  21. first_day = (year + x - y + z) %7;
  22.  
  23. return first_day;
  24. }
  25.  
  26. int leapyear(int year)
  27. {
  28. if((year% 4 == 0 && year%100 != 0) || year%400 == 0){
  29. month_days[1] = 29; //agora com mês posição 1, que é o segundo
  30. return 1;
  31. }
  32.  
  33. return 0;
  34. }
  35.  
  36. int calendar(int month, int year, int first_day)
  37. {
  38. int i;
  39. month--;//agora reduz o próprio month, pois em todos os locais que é
  40. //utilizado daqui para a frente tem de ter 1 a menos
  41.  
  42. printf("%s %d\n\n", months[month], year); //sem -1 aqui, pois já foi reduzido acima
  43. printf("Sun Mon Tue Wed Thu Fri Sat\n");
  44.  
  45. //volta ao i=0 que era o que tinha. month também tem agora -1 que veio de cima
  46. for(i = 0; i < month; i++)
  47. {
  48. first_day = ((first_day + month_days[i])%7);
  49. }
  50.  
  51. for(i = 1; i <= 1 + first_day * 5; i++)
  52. {
  53. printf(" ");
  54. }
  55.  
  56. for(i = 1; i <= month_days[month]; i++)
  57. {
  58. printf("%2d", i);
  59.  
  60. if((i + first_day)%7 > 0)
  61. printf(" ");
  62. else
  63. printf("\n ");
  64. }
  65. }
  66.  
  67. int main(void)
  68. {
  69. int year;
  70. int month;
  71. int first_day;
  72.  
  73. do{
  74. printf("Enter a month (1 - 12): ");
  75. scanf("%d", &month);
  76. } while (month < 1 || month > 12);
  77.  
  78. do{
  79. printf("Enter a year (1000 - 3000): ");
  80. scanf("%d", &year);
  81. } while (year < 1000 || year > 3000);
  82.  
  83. first_day = first_day_year(year);
  84.  
  85. leapyear(year);
  86.  
  87. calendar(month, year, first_day);
  88.  
  89. printf("\n");
  90.  
  91. return 0;
  92. }
Success #stdin #stdout 0s 16064KB
stdin
2
2004
stdout
Enter a month (1 - 12): Enter a year (1000 - 3000): 
February 2004

Sun  Mon  Tue  Wed  Thu  Fri  Sat
  1    2    3    4    5    6    7
  8    9   10   11   12   13   14
 15   16   17   18   19   20   21
 22   23   24   25   26   27   28
 29