青山一道同云雨 发表于 2020-3-10 11:46

C语言 万年历--垃圾代码

因疫情在家,正好利用这段时间学习N大的C语言教程。该学习函数了,这个万年历是视频里的作业;实现全部堆在main()函数里面了,看着代码有点恶心;贴出来做个笔记而已

XP系统turboc2编译器

main()
{
      int a,b,c;
      int k = 0;
      int i ;
      int day = 0;
      int sum = 0;
        int msum = 0;
      int leap_i = 1;                                                                                /* 一年的天数 */               
      int leap_j = 0;                                                                                /* 是闰年 + 1*/
      int leap_k = 0;                                                                                /* 平年闰年的总天数 */       
        int leap_a = 1;                                                                                /* 计算星期几的天数,每过一年 +1*/
      int leap_year = 1980;
        int leap_week = 365;
        int leap_b = 0;                                                                                /* 是闰年+1,然后清0,计算礼拜几   */

        int m_i = 0;

        int len_i;
        int len_j;

        int m=0;
        int n=0;
       
      printf("Please Input Data(exp:2010-10-1): ");
      scanf("%d-%d-%d",&a,&b,&c);

/****************************** 检测输入的月份、日期(判断不够完整比如2月份的31号,懒的写了) *********************************************/               

      if(( b < 1) || ( b > 12) || ( c < 1 ) || (c > 31 ))                                       
      {
                printf("Your Input %d Data Error!!!Please Reinput Data!!");
      }
      else
      {
                if((!(a%4) && (a %100) ) || !(a%400))                                                /*检查日期是否为闰年定义标志位k */
                {
                        k = 1;
                }                     
      }

/***************************** 计算输入的日期是当年的第几天 **************************************/

      for(i = 1;i<=b;i++)                                                                                       
      {
                if(i== 2||i== 4||i== 6||i== 7||i== 9||i== 11)
                {
                        day = 31;
                }
                if(i== 5||i== 8||i== 10||i== 12)
                {
                        day = 30;
                }
                if(i == 1)
                {
                        day = 0;
                }
                if(i == 3)
                {
                        if(k == 1)
                        {
                              day = 29;
                        }
                        else
                        {
                              day = 28;
                        }
                }

         sum = sum + day ;
         }
         msum = sum + c;

       printf("This is days in the year: %d\n",msum);                                                 /* 输入一个日期,算这个日期是这一年中的第几天 */
         
/******** 以1980年(如果数据小于1980没做处理,也可以把基准年份变小)为基准计算输入年份的第一天是礼拜几,计算输入年份、月份的第一天是礼拜几*********************/
      
         for(leap_year = 1980;leap_year < a; leap_year++)
         {
                if((!(leap_year%4) && (leap_year %100) ) || !(leap_year%400))                                    
                {
                        leap_i = 366;
                        leap_j++;
                        leap_b = 1;
                        leap_a++;
                }
                else
                {
                        leap_i = 365;
                        leap_a++;
                }
                leap_k += leap_i;
                leap_a =leap_b + leap_a;
               
                leap_b = 0;      
       }
       
         
         leap_k = leap_k + leap_j;
       
       printf("The Year fist week: %d\n",(leap_week+leap_a) % 7);                                /*       输入一个日期 算这个年份的1月1号是礼拜几 */      
         
       m_i = (sum %7 + (leap_week+leap_a) % 7)%7;

       if(m_i == 0)
       {
                m_i = 7;
       }

       printf("This is Day in week: %d\n", m_i );                                                              /* 输入一个日期计算输入月份的第一天是礼拜几 */      


/**************************** 清零开始打印输入日期的万年历 *****************************************/               

       clrscr();
       
       printf("\n\n");

       printf(" Mon Tue Web Thu Fri Sat Sun");

       printf("\n\n");

               if(b== 1 ||b == 3||b == 5||b == 7||b == 8||b == 10||b == 12)
                {
               
                        len_i =31;
                }
                if(b== 4 ||b == 6||b == 9||b == 11)
                {
               
                        len_i =30;
                }
                if(b == 2)
                {
                        if(k == 1)
                        {
                                len_i = 29;
                        }
                        else
                        {
                                len_i = 28;
                        }
                }       

       for(len_j = 1;len_j<=len_i;len_j++)
       {

/********************* 第一个数是礼拜几,就先打印几个数的空格 ************/

                if(m_i-1)                                                                       
               {
               
                       while(m_i-1)
                        {
                                printf("   ");
                                m_i--;
                                m++;
                                n++;       
                        }       
                }

/*********************** 每打印7个数换行 ******************************/

                if(len_j-1 && !((len_j-1+m)%7))                                       
                {
                        printf("\n\n");
               
                }
               
/******************** 打印的日期数字也占一个位置 ************************/
                      
                while(n)
                {
                        printf(" ");
                        n--;
                }

/*************** 个位日期空两个格,两位日期空一个格 ********************/

                       
                if(len_j<10)
                {
                        if(len_j == c)
                        {
                                printf("[%d]",len_j);
                        }
                        else
                        {
                                printf("   %d",len_j);
                        }
                }
                if(len_j >= 10)
                {
                        if(len_j == c)
                        {
                                printf(" [%d]",len_j);
                        }
                        else
                        {
                                printf("%d",len_j);
                        }
                }
               
               
       }

                printf("\n\n\n\nYou input data : %d-%d-%d",a,b,c);


}

awdrg901 发表于 2020-3-10 17:09

不错,手动滑稽
页: [1]
查看完整版本: C语言 万年历--垃圾代码