⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 单片机万年历.c

📁 自己写的测试程序,调试已通过,可以直接使用, 而且有的还有详细的注释.单片机万年历
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "stdio.h"
#include "math.h"
#include"stdlib.h"

int year;
int month;
int h,k,j;
 int main()
{
    /*定义输入变量,利用年月的值可求得每月的第一天与2006年1月相差的天数,由权威
    资料得知公元2006年1月1日是星期一,所以可以利用相差的天数求出每月第一日的星
    期数,然后确定这一月的每一天的星期数,从而实现万年历的算法.*/ 
  
    char r;
         do
     {
       printf("please input the year and month(just like:2006,8):");
       scanf("%4d,%d",&year,&month);
       if((month<1)||(month>12))
       /*检查输入是否合法,若不合法跳出本次循环,重新循环*/
            { 
               printf("输入有误,请按照格式重新输入.\n") ;
               continue;
            }
       if(year>=2006)
          up(year,month);
       else 
          down(year,month);
      dayin();
      printf("\n");
      printf("若退出,请输入q键+回车键,继续请按格式输入.\n");
      r=getchar();/*可以根据输入的r,结束循环*/

      }while(r!='q'&&r!='Q');
   system("pause");
   return 0;
}





 int  up()/*计算得出求2006后年历所需的数据h,j,k*/
{
  int i ;
  int now=0; /*now等于该年该月与2006年1月1日距离的天数*/ 
  
     {
           for(i=2006;i<year;i++)
          /*先计算该年的1月1日于2006年1月1日距离的天数,逐年相加可以求出该值*/
                  { 
                       if(((i%4==0)&&(i%100!=0))||(i%400==0))
                        now=now+366;
                           /*如果i年份是闰年,则now的值增加366*/ 
                        else now=now+365;
                          /*如果i年份不是闰年,则now的值增加355*/ 
                  } 
	       if  (((year%4==0)&&(year%100!=0))||(year%400==0))
	              /*若该年份是闰年,则该月第一日与该年第一日距离的天数由month的值
                 决定分别是0,(0+31),(0+31+29),(0+31+29+31),(0+31+29+231+30)..... 
                   该月的天数同时也由month的值决定*/
                  {
	                    switch(month)
	                        {
	                                  case 1 : 
	                                       {
	                                          now=now+0;
                                               j =31;
                                             /* momth=1,第1月第1日与该年1月1日相距0天故now加上0,
                                               1月全月共有31天*/
                                           }
                                           break;
         
                                      case  2: 
                                           {
                                                now=now+31;
                                                j=29;
                                                /* month=2,第2月第1日与该年1月1日相距0+31天
                                                故now加上31,闰年的2月全月共有29天*/
                                           }
                                           break;
            
                                     case  3:
                                           {
                                                 now=now+60;
                                                 j=31;
                                           }
                                            break;
                
                                     case  4: 
                                           {
                                                  now=now+91;
                                                  j=30;
                                           }
                                            break;
               
                                     case  5:
                                           {
                                                   now=now+121;
                                                   j=31;
                                           }
                                            break;
                
                                    case  6: 
                                           {
                                                   now=now+152;
                                                   j=30;
                                           }
                                            break;
               
                                     case  7:
                                           {
                                                    now=now+182;
                                                    j=31;
                                           }
                                            break;
                
                                      case  8: 
                                            {
                                                     now=now+213;
                                                     j=31;
                                             }
                                              break;
               
                                      case  9:
                                             {
                                                      now=now+244;
                                                      j=30;
                                             }
                                              break;
                
                                       case  10: 
                                              {
                                                     now=now+274;
                                                     j=31;
                                              }
                                              break;
               
                                       case  11:
                                              {
                                                     now=now+305;
                                                     j=30;
                                               }
                                                break;
                
                                       case  12: 
                                              {
                                                       now=now+335;
                                                       j=31;
                                              }
                                                break;        
                              }
                      }
   
        else
         {
             /*若该年份不是闰年,则该月第一日与该年第一日距离的天数由month的值
                 决定分别是0,(0+31),(0+31+29),(0+31+29+31),(0+31+29+231+30)..... 
                   该月的天数同时也由month的值决定*/
		         switch(month)
                      {
                                     case 1 :
                                             {
                                                   now=now+0;
                                                    j=31;
                                              /* momth=1,第1月第1日与该年1月1日相距0天故now加上0
                                               1月全月共有31天*/ 
                                             }
                                            break;
                
                                      case  2: 
                                             {
                                                   now=now+31;
                                                   j=28;
                                                 /* month=2,第2月第1日与该年1月1日相距0+31天
                                                故now加上31,非闰年的2月全月共有28天*/   
                                              } 
                                              break;
               
                                      case  3: 
                                             {
                                                     now=now+59;
                                                     j=31;
                                            }
                                            break;
               
                                       case  4: 
                                              {
                                                      now=now+90;
                                                       j=30;
                                              }
                                              break;
               
                                       case 5 :
                                               { 
                                                      now=now+120;
                                                      j=31;
                                               }
                                                break;
               
                                       case  6: 
                                               {
                                                       now=now+151;
                                                       j=30;
                                               }
                                               break;
               
	                                   case 7 : 
                                               {
                                                        now=now+181;j=31;
                                               }
                                                 break;
            
                                       case  8:
                                               {
                                                         now=now+212;
                                                         j=31;
                                              }
                                              break;
                
                                      case 9 : 
                                             {
                                                        now=now+243;
                                                        j=30;
                                            }
                                             break;
               
                                      case  10: 
                                             {
                                                      now=now+273;
                                                      j=31;
                                            }
                                            break;
               
                                     case  11: 
                                           {
                                                      now=now+304;
                                                      j=30;
                                           }
                                          break;
               
                                    case 12 :
                                          { 
                                                   now=now+334;
                                                   j=31;
                                         }
                                         break;   
                        	   } 
                  }
     h=(now%7)*8-1;
     /*(now%7)的值是该月第一日的星期数(日,一,二...),为使日历排列整齐
     在日历的第一排(第一日不是星期日时)空出h个空格,相邻俩数相隔8个空格*/
     k=now;
    }   
}     
  
 
  
  int   down()
{
   int i ;
   int now=0;  /*计算得出求2006前的年历所需的数据h,j,k*/ 
  
        {
              for(i=2006;i>year+1;i=i-1)
                /*先计算该年的1月1日于2006年1月1日距离的天数,逐年相加可以求出该值*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -