源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C语言实现的一个万年历小程序

  • 时间:2021-12-18 09:21 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C语言实现的一个万年历小程序
该程序简单地输入一个年份(1901年之后的年份),随后程序输出该年份十二个月的日历。
#include<stdio.h>

#define Mon   1
#define Tues  2
#define Wed   3
#define Thur  4
#define Fri   5
#define Sat   6
#define Sun   0

#define January_days   31
#define February_days   28
#define March_days    31
#define April_days    30
#define May_days     31
#define June_days     30
#define July_days     31
#define August_days    31
#define September_days  30
#define October_days   31
#define November_days   30
#define December_days   31

#define first1month January_days
#define first2month January_days+February_days
#define first3month January_days+February_days+March_days
#define first4month January_days+February_days+March_days+April_days
#define first5month January_days+February_days+March_days+April_days+May_days
#define first6month January_days+February_days+March_days+April_days+May_days+June_days
#define first7month January_days+February_days+March_days+April_days+May_days+June_days \
          +July_days
#define first8month January_days+February_days+March_days+April_days+May_days+June_days \
          +July_days+August_days
#define first9month January_days+February_days+March_days+April_days+May_days+June_days \
          +July_days+August_days+September_days
#define first10month January_days+February_days+March_days+April_days+May_days+June_days \
          +July_days+August_days+September_days+October_days
#define first11month January_days+February_days+March_days+April_days+May_days+June_days \
          +July_days+August_days+September_days+October_days+November_days

int known_weekday = Tues;
int known_year = 1901;
int konwn_month = 1;
int known_day = 1;

int day_count(int month)
{ 
 switch(month)
 {
  case 1: return 0;break;
  case 2: return first1month;break;
  case 3: return first2month;break;
  case 4: return first3month;break;
  case 5: return first4month;break;
  case 6: return first5month;break;
  case 7: return first6month;break;
  case 8: return first7month;break;
  case 9: return first8month;break;
  case 10: return first9month;break;
  case 11: return first10month;break;
  case 12: return first11month;break;
 }
}


/*char * month_name(int month)
{
 switch(month)
 {
  case 1:
   return "January";
   break;
  case 2:
   return "February";
   break;
  case 3:
   return "March";
   break;
  case 4:
   return "April";
   break;
  case 5:
   return "May";
   break;
  case 6:
   return "June";
   break;
  case 7:
   return "July";
   break;
  case 8:
   return "August";
   break;
  case 9:
   return "September";
   break;
  case 10:
   return "October";
   break;
  case 11:
   return "November";
   break;
  case 12:
   return "December";
   break;
  default:
   break;
 }
}*/

char * month_name(int month)
{
 switch(month)
 {
  case 1:
   return "一月";
   break;
  case 2:
   return "二月";
   break;
  case 3:
   return "三月";
   break;
  case 4:
   return "四月";
   break;
  case 5:
   return "五月";
   break;
  case 6:
   return "六月";
   break;
  case 7:
   return "七月";
   break;
  case 8:
   return "八月";
   break;
  case 9:
   return "九月";
   break;
  case 10:
   return "十月";
   break;
  case 11:
   return "十一月";
   break;
  case 12:
   return "十二月";
   break;
  default:
   break;
 }
}

/*按格式打印某年某月名称*/
void first_line_print(int month, int year)
{
 //printf("%20s %d \n",month_name(month),year);
 printf("%8d年 %s \n",year, month_name(month));
}

/*按格式打印星期名称*/
void week_print()
{
 //printf("%-6s%-6s%-6s%-6s%-6s%-6s%-6s\n","Sun.", "Mon.", "Tues.", "Wed.", "Thur.", "Fri.", "Sat.");
 printf("%-3s%-3s%-3s%-3s%-3s%-3s%-3s\n","日", "一", "二", "三", "四", "五", "六");
}

/*计算该年该月份与已知日子之间的距离天数*/
int date_distance_count(int month, int year)
{
 int leap_year_count = 0;
 int i;
 int distance;

 if (year > known_year)
 {
  for (i=known_year; i<year; i++)
  {
   if(((i%4 == 0) && (i0 != 0) ) || (i%400 == 0))
   {
    leap_year_count++;  
   }
  }

  if (month > 2)
  {
   if(((year%4 == 0) && (year0 != 0) ) || (year%400 == 0))
   {
    leap_year_count++;  
   }
  }
 }
 else
 if (year == known_year)
 {
  if (month > 2)
  {
   leap_year_count = 1;
  }
 }
 

 distance = (year - known_year)*365 + leap_year_count + day_count(month);

 return distance; 
}

/*确定该月份第一天是星期几*/
int makesure_firstday_weekday(int month, int year)
{
 int date_distance = 0;
 int weekday;

 date_distance = date_distance_count(month, year);
 weekday = (known_weekday + date_distance)%7;

 return weekday; 
}

/*依次打印出该月份的日子*/
void print_in_turn(int month, int firstday, int year)
{
 int i = 1;
 int weekday;

 switch(firstday)
 {
  case Sun:
   break;
  case Mon:
   printf("%-3s","");
   break;
  case Tues:
   printf("%-6s","");
   break;
  case Wed:
   printf("%-9s","");
   break;
  case Thur:
   printf("%-12s","");
   break;
  case Fri:
   printf("%-15s","");
   break;
  case Sat:
   printf("%-18s","");
   break;
 }

 switch(month)
 {
  case 1:
  case 3:
  case 5:
  case 7:
  case 8:
  case 10:
  case 12:
  {
   for(i=0; i<31; i++)
   {
    weekday = (firstday + i)%7;
    printf("%-3d",i+1);
    
    if(weekday == Sat)
    {
     printf("\n");
    }     
   }
   break;
  }
  case 2:
  {
   if(((year%4 == 0) && (year0 != 0) ) || (year%400 == 0)) /*闰年*/
   {
    for(i=0; i<29; i++)
    {
     weekday = (firstday + i)%7;
     printf("%-3d",i+1);
     
     if(weekday == Sat)
     {
      printf("\n");
     }     
    }
    break;
   }
   else /*平年*/
   {
    for(i=0; i<28; i++)
    {
     weekday = (firstday + i)%7;
     printf("%-3d",i+1);
     
     if(weekday == Sat)
     {
      printf("\n");
     }     
    }
    break;
   }
  
  }
  case 4:
  case 6:
  case 9:
  case 11:
  {
   for(i=0; i<30; i++)
   {
    weekday = (firstday + i)%7;/*计算该天是星期几*/
    printf("%-3d",i+1);
    
    if(weekday == Sat)
    {
     printf("\n");/*如果是星期六,则换行*/
    }     
   }
   break;
  }   
 }
}

void date_print(int month, int year)
{
 int firstday;

 firstday = makesure_firstday_weekday(month, year);
 print_in_turn(month, firstday, year);
 printf("\n");
}

void main_month(int month, int year)
{
 first_line_print(month, year);
 week_print();
 date_print(month, year);
 printf("\n\n");
}

void main_calendar(int year)
{
 int i;
 for(i=1; i<=12; i++)
 {
  main_month(i, year);
 }
}

int main()
{
 int year;

 printf("请输入年份:year = ");
 scanf("%d",&year);
 printf("\n");

 while(year < 1902)
 {
  printf("请输入大于1901的年份\n");

  printf("请输入年份:year = ");
  scanf("%d",&year);
  printf("\n");
 }
 
 main_calendar(year);
 
 scanf(" ");
 return 0;
}
运行效果图: [img]http://files.jb51.net/file_images/article/201407/201475115418572.jpg?201465115429[/img]
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部