永发信息网

用C语言怎么编写万年历

答案:3  悬赏:70  手机版
解决时间 2021-04-04 15:11
  • 提问者网友:凉末
  • 2021-04-04 03:16
用C语言怎么编写万年历
最佳答案
  • 五星知识达人网友:街头电车
  • 2021-04-04 03:57







#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 "一月"; 
            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 
",month_name(month),year); 
    printf("%8d年 %s 
",year, month_name(month)); 

  

void week_print() 

    //printf("%-6s%-6s%-6s%-6s%-6s%-6s%-6s
","Sun.", "Mon.", "Tues.", "Wed.", "Thur.", "Fri.", "Sat."); 
    printf("%-3s%-3s%-3s%-3s%-3s%-3s%-3s
","日", "一", "二", "三", "四", "五", "六"); 

  

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        { 
            if(((i%4 == 0) && (i%100 != 0) ) || (i%400 == 0)) 
            { 
                leap_year_count++;       
            } 
        } 
  
        if (month > 2) 
        { 
            if(((year%4 == 0) && (year%100 != 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("
"); 
                }                    
            } 
            break; 
        } 
        case 2: 
        { 
            if(((year%4 == 0) && (year%100 != 0) ) || (year%400 == 0)) 
            { 
                for(i=0; i<29; i++) 
                { 
                    weekday = (firstday + i)%7; 
                    printf("%-3d",i+1); 
                      
                    if(weekday == Sat) 
                    { 
                        printf("
"); 
                    }                    
                } 
                break; 
            } 
            else 
            { 
                for(i=0; i<28; i++) 
                { 
                    weekday = (firstday + i)%7; 
                    printf("%-3d",i+1); 
                      
                    if(weekday == Sat) 
                    { 
                        printf("
"); 
                    }                    
                } 
                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("
");
                }                    
            } 
            break; 
        }            
    } 

  
void date_print(int month, int year) 

    int firstday; 
  
    firstday = makesure_firstday_weekday(month, year); 
    print_in_turn(month, firstday, year); 
    printf("
"); 

  
void main_month(int month, int year) 

    first_line_print(month, year); 
    week_print(); 
    date_print(month, year); 
    printf("

"); 

  
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("
"); 
  
    while(year < 1902) 
    { 
        printf("请输入大于1901的年份
"); 
  
        printf("请输入年份:year = "); 
        scanf("%d",&year); 
        printf("
"); 
    } 
      
    main_calendar(year); 
      
    scanf(" "); 
    return 0; 
}
全部回答
  • 1楼网友:杯酒困英雄
  • 2021-04-04 04:58
C写界面不好
你用delphi或者vb很简单的
  • 2楼网友:蕴藏春秋
  • 2021-04-04 04:33
哈哈,我编的第一个正经的程序就是这个程序了!
我自己编出来的,超爽啊!
#include
int leap (int year)
{if(year%4==0&&year%100!=0||year%400==0)
return 1;
else return 0;
}
int days_month (int month,int year)
{
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
return 31;
if(month==4||month==6||month==9||month==11)
return 30;
if(month==2&&leap(year)==1) return 29;
else return 28;
}
int firstday(int month,int year)
{int w;
w=(1+2*month+3*(month+1)/5+year+year/4+year/400-year/100)%7+1;
return w;
}
main()
{int i,j=1,k=1,a,b,month,year;
printf("\n input month and year:\n");
scanf("%d%d",&month,&year);
b=days_month(month,year);
a=firstday (month,year);
printf(" Sun Mon Tue Wed Thu Fri Sat \n");
if(a==7)
{for(i=1;i<=b;i++)
{printf("%4d",i);
if(i%7==0)
{printf("\n");
}
}
}
if(a!=7)
{while (j<=4*a)
{printf(" ");
j++;
}
for(i=1;i<=b;i++)
{printf("%4d",i);
if(i==7*k-a)
{printf("\n");
k++;
}
}
}
getch();
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯