鱼C论坛

 找回密码
 立即注册
查看: 1926|回复: 3

[已解决]如何制作万年历

[复制链接]
发表于 2021-10-26 11:01:06 | 显示全部楼层 |阅读模式
60鱼币
课堂作业,毫无头绪,能否讲讲思路及相应的代码分析?
最佳答案
2021-10-26 11:01:07
#include <stdio.h>  
#include <stdlib.h>  
#include <time.h>  
#include<conio.h>  
typedef struct today  
{  
    int day;  
    int month;  
    int year;  
} today;  
  
int day_cankao[2][13]={  
    {0,31,28,31,30,31,30,31,31,30,31,30,31},  
    {0,31,29,31,30,31,30,31,31,30,31,30,31}  
};  
char *week[]=  
{  
    "Sun","Mon","Tue","Wen","Thu","Fir","Sat"  
};  
struct tm *todayuse;//struct tm定义c语言中time的结构体  
today today_current;  
int getweekday(today today_usenow)  
{  
    // w = y + [y/4] + [ c/4 ] – 2c+ [13 * (m+1) / 5] + d – 1  
    //其中,c是年份的前两位,y是年份的后两位,m是月份,d是日期,这里需要注意的是,如果是1月和2月,c和y需要按照上一年来取值。  
    int w=0;  
      
    int year=today_usenow.year;  
    int month=today_usenow.month;  
    if(today_usenow.month==1 || today_usenow.month==2)  
    {  
        month+=12;  
        year--;  
    }  
    int y=year%100;  
    int c=year/100;  
    int m=month;  
      
    w=y + y/4 +  c/4  - 2*c+ 26* (m+1) / 10 + today_usenow.day -1;  
    while(w<0)  
    {  
        w+=7;  
    }  
    return (w%7);  
  
}  
int is_leap(int year)  
{  
  
    if( (year%4==0 && year%100!=0) || (year%400==0))  
    {  
        return 1;  
    }  
    else  
        return 0;  
}  
int  getmonthdays(int year,int month)  
{  
    return day_cankao[is_leap(year)][month];  
}  
  
  
void print_calendar(today today_usenow)  
{  
    printf("---------------------------\n");  
    printf("Sun Mon Tue Wen Thu Fir Sat\n");  
    int firstday=0;  
    today today_usehere=today_usenow;  
    today_usehere.day=1;  
    int day=getweekday(today_usehere);//日期前  
    //int  daysuseafter  
    int days=getmonthdays(today_usenow.year,today_usenow.month);//月总数  
    // 0 1 2 3 4 5 6  // 6   
    int daysbefore=0;  
    if((today_usenow.month-1)==0)  
    {  
        //现在为1月,去年的十二月份  
        daysbefore=getmonthdays(today_usenow.year-1,12);  
        //  printf("%d is",daysbefore);  
    }  
    else  
    {  
  
  
        daysbefore=getmonthdays(today_usenow.year,today_usenow.month-1);  
    }  
    int daysbefoeit=daysbefore-day+1;  
    printf("");  
    int count=1;  
         if(day==0)  
         {  
             daysbefoeit-=7;  
             for(int i=0;i<day+7;i++)  
             {  
                  
                 printf("%d  ", daysbefoeit);  
                 daysbefoeit++;  
                  
             }  
               printf("\n");  
             count=7;  
         }  
         else  
         {  
             for(int i=0;i<day;i++)  
             {  
                 printf("%d  ", daysbefoeit);  
                 daysbefoeit++;  
             }  
              count=day;  
         }  
         int m=1;  
         for(int i=0;i<=6-day;i++)  
         {  
             if(m<10)  
             {  
                 printf(" %d  ",m);  
             }  
             else  
             {  
  
  
                 printf("%d ",m);  
             }  
  
             m++;  
         }  
         printf("\n");  
         if(day==0)  
         {  
             count=14;  
         }  
         else  
         {  
             count=7;  
         }  
         int hang=0;  
         while(m<=days)  
         {  
             if(m<10)  
             {  
                 printf(" %d  ",m);  
             }  
             else  
             {  
  
  
                 printf("%d  ",m);  
             }  
             hang++;  
             if(hang==7)  
             {  
                 printf("\n");  
                 hang=0;  
             }  
  
             m++;  
         }  
        if(day==0)  
        {  
            count=days+7;  
        }  
        else  
        {  
            count=day+days;  
        }  
    int newmonth=1;  
    for(int j=hang;j<7;j++)  
    {  
  
        if(newmonth<10)  
        {  
            printf(" %d  ",newmonth);  
        }  
        else  
        {  
  
  
            printf("%d  ",newmonth);  
        }  
         
        newmonth++;  
    }  
    printf("\n");  
    count=count+7-hang;  
    for(int j=0;j< 42-count;j++)  
    {  
        if(newmonth<10)  
        {  
            printf(" %d  ",newmonth);  
        }  
        else  
        {  
  
  
            printf("%d  ",newmonth);  
        }  
        newmonth++;  
    }  
      
      
      
  
  
  
  
第一.jpg
第二.jpg
第三.jpg

最佳答案

查看完整内容

#include #include #include #include typedef struct today { int day; int month; int year; } today; int day_cankao[2][13]={ {0,31,28,31,30,31,30,31,31,30,31,30,31}, {0,31,29,31,30,31,30,31,31,30,31,30,31} }; char *week[]= { "Sun","Mon","Tue","Wen","Thu","Fir","Sat" }; struct tm *todayuse;//struct tm定义c语言中time的 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-26 11:01:07 | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>  
#include <stdlib.h>  
#include <time.h>  
#include<conio.h>  
typedef struct today  
{  
    int day;  
    int month;  
    int year;  
} today;  
  
int day_cankao[2][13]={  
    {0,31,28,31,30,31,30,31,31,30,31,30,31},  
    {0,31,29,31,30,31,30,31,31,30,31,30,31}  
};  
char *week[]=  
{  
    "Sun","Mon","Tue","Wen","Thu","Fir","Sat"  
};  
struct tm *todayuse;//struct tm定义c语言中time的结构体  
today today_current;  
int getweekday(today today_usenow)  
{  
    // w = y + [y/4] + [ c/4 ] – 2c+ [13 * (m+1) / 5] + d – 1  
    //其中,c是年份的前两位,y是年份的后两位,m是月份,d是日期,这里需要注意的是,如果是1月和2月,c和y需要按照上一年来取值。  
    int w=0;  
      
    int year=today_usenow.year;  
    int month=today_usenow.month;  
    if(today_usenow.month==1 || today_usenow.month==2)  
    {  
        month+=12;  
        year--;  
    }  
    int y=year%100;  
    int c=year/100;  
    int m=month;  
      
    w=y + y/4 +  c/4  - 2*c+ 26* (m+1) / 10 + today_usenow.day -1;  
    while(w<0)  
    {  
        w+=7;  
    }  
    return (w%7);  
  
}  
int is_leap(int year)  
{  
  
    if( (year%4==0 && year%100!=0) || (year%400==0))  
    {  
        return 1;  
    }  
    else  
        return 0;  
}  
int  getmonthdays(int year,int month)  
{  
    return day_cankao[is_leap(year)][month];  
}  
  
  
void print_calendar(today today_usenow)  
{  
    printf("---------------------------\n");  
    printf("Sun Mon Tue Wen Thu Fir Sat\n");  
    int firstday=0;  
    today today_usehere=today_usenow;  
    today_usehere.day=1;  
    int day=getweekday(today_usehere);//日期前  
    //int  daysuseafter  
    int days=getmonthdays(today_usenow.year,today_usenow.month);//月总数  
    // 0 1 2 3 4 5 6  // 6   
    int daysbefore=0;  
    if((today_usenow.month-1)==0)  
    {  
        //现在为1月,去年的十二月份  
        daysbefore=getmonthdays(today_usenow.year-1,12);  
        //  printf("%d is",daysbefore);  
    }  
    else  
    {  
  
  
        daysbefore=getmonthdays(today_usenow.year,today_usenow.month-1);  
    }  
    int daysbefoeit=daysbefore-day+1;  
    printf("");  
    int count=1;  
         if(day==0)  
         {  
             daysbefoeit-=7;  
             for(int i=0;i<day+7;i++)  
             {  
                  
                 printf("%d  ", daysbefoeit);  
                 daysbefoeit++;  
                  
             }  
               printf("\n");  
             count=7;  
         }  
         else  
         {  
             for(int i=0;i<day;i++)  
             {  
                 printf("%d  ", daysbefoeit);  
                 daysbefoeit++;  
             }  
              count=day;  
         }  
         int m=1;  
         for(int i=0;i<=6-day;i++)  
         {  
             if(m<10)  
             {  
                 printf(" %d  ",m);  
             }  
             else  
             {  
  
  
                 printf("%d ",m);  
             }  
  
             m++;  
         }  
         printf("\n");  
         if(day==0)  
         {  
             count=14;  
         }  
         else  
         {  
             count=7;  
         }  
         int hang=0;  
         while(m<=days)  
         {  
             if(m<10)  
             {  
                 printf(" %d  ",m);  
             }  
             else  
             {  
  
  
                 printf("%d  ",m);  
             }  
             hang++;  
             if(hang==7)  
             {  
                 printf("\n");  
                 hang=0;  
             }  
  
             m++;  
         }  
        if(day==0)  
        {  
            count=days+7;  
        }  
        else  
        {  
            count=day+days;  
        }  
    int newmonth=1;  
    for(int j=hang;j<7;j++)  
    {  
  
        if(newmonth<10)  
        {  
            printf(" %d  ",newmonth);  
        }  
        else  
        {  
  
  
            printf("%d  ",newmonth);  
        }  
         
        newmonth++;  
    }  
    printf("\n");  
    count=count+7-hang;  
    for(int j=0;j< 42-count;j++)  
    {  
        if(newmonth<10)  
        {  
            printf(" %d  ",newmonth);  
        }  
        else  
        {  
  
  
            printf("%d  ",newmonth);  
        }  
        newmonth++;  
    }  
      
      
      
  
  
  
  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-26 13:22:26 | 显示全部楼层
去CSDN找代码参考
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-28 17:43:17 | 显示全部楼层
路过看看,感觉应该不难实现,可惜不会C
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 21:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表