永发信息网

用C语言怎么编写万年历

答案:3  悬赏:70  手机版
解决时间 2021-04-04 15:11
用C语言怎么编写万年历
最佳答案







#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; 
}
全部回答
C写界面不好
你用delphi或者vb很简单的
哈哈,我编的第一个正经的程序就是这个程序了!
我自己编出来的,超爽啊!
#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();
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
邢台市2017当兵毕业证发不下来怎么办?邢台市
张杰全职高手演的是谁
我妈妈在医院刚做完手术,我姐和我爸照顾她,
自动挡前驱车如何漂移,前驱车自动挡怎么漂移
小米手机开机出现雷锋兔修安卓是什么情况、
很想念婚外情人,我跟他说分手了,我还是想他
支付宝从银行转账突然转不了了,请问,出现这
玩物的意思,“胯下玩物”是什么意思。
我是公历1984年10月29晚上8点生想求生辰八字,
青岛2017年底神马时候下雪?
雪佛兰2012年赛欧能卖的多少钱
志怪东方朔的作者是谁,诸位道友,有人看过一
贝多芬的《欢乐颂》是出自他哪部作品的第四乐
什么是边幅钢丝绳/ 请问有没有高人知道,
惜去掉偏旁加新的的部首组成那些字并组词
推荐资讯
半世姻缘半世愁怎么解
VB6模拟键盘事件
想知道: 台山市 从台山市台城街道办到台山市
发质硬,剪了短发早上睡醒头发都支愣着,是软化
阅读下面的文字,按要求作文。(50分)时代的发
民间游戏蒸馍馍的活动反思
更新凯立德导航后激活码不能用了怎么办,或者
手机存储卡是什么,oppo手机里媒体储存是什么
描写秋日的好词好词
苹果4的home键按时间长了会坏吗?
有没有一些节奏很快的英文歌,适合女生跳舞的
在赵爽弦图中,已知直角三角形的短直角边长为
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?