C语言 万年历程序
C语言 万年历程序
原代码:
chunli@Linux:~/c++$cat123.c#include<stdio.h>#defineMon1#defineTues2#defineWed3#defineThur4#defineFri5#defineSat6#defineSun0#defineJanuary_days31#defineFebruary_days28#defineMarch_days31#defineApril_days30#defineMay_days31#defineJune_days30#defineJuly_days31#defineAugust_days31#defineSeptember_days30#defineOctober_days31#defineNovember_days30#defineDecember_days31#definefirst1monthJanuary_days#definefirst2monthJanuary_days+February_days#definefirst3monthJanuary_days+February_days+March_days#definefirst4monthJanuary_days+February_days+March_days+April_days#definefirst5monthJanuary_days+February_days+March_days+April_days+May_days#definefirst6monthJanuary_days+February_days+March_days+April_days+May_days+June_days#definefirst7monthJanuary_days+February_days+March_days+April_days+May_days+June_days+July_days#definefirst8monthJanuary_days+February_days+March_days+April_days+May_days+June_days+July_days+August_days#definefirst9monthJanuary_days+February_days+March_days+April_days+May_days+June_days+July_days+August_days+September_days#definefirst10monthJanuary_days+February_days+March_days+April_days+May_days+June_days+July_days+August_days+September_days+October_days#definefirst11monthJanuary_days+February_days+March_days+April_days+May_days+June_days+July_days+August_days+September_days+October_days+November_daysintknown_weekday=Tues;intknown_year=1901;intkonwn_month=1;intknown_day=1;intday_count(intmonth){switch(month){case1:return0;break;case2:returnfirst1month;break;case3:returnfirst2month;break;case4:returnfirst3month;break;case5:returnfirst4month;break;case6:returnfirst5month;break;case7:returnfirst6month;break;case8:returnfirst7month;break;case9:returnfirst8month;break;case10:returnfirst9month;break;case11:returnfirst10month;break;case12:returnfirst11month;break;}}char*month_name(intmonth){switch(month){case1:return"一月";break;case2:return"二月";break;case3:return"三月";break;case4:return"四月";break;case5:return"五月";break;case6:return"六月";break;case7:return"七月";break;case8:return"八月";break;case9:return"九月";break;case10:return"十月";break;case11:return"十一月";break;case12:return"十二月";break;default:break;}}/*按格式打印某年某月名称*/voidfirst_line_print(intmonth,intyear){//printf("%20s%d\n",month_name(month),year);printf("%8d年%s\n",year,month_name(month));}/*按格式打印星期名称*/voidweek_print(){//printf("%-6s%-6s%-6s%-6s%-6s%-6s%-6s\n","Sun.","Mon.","Tues.","Wed.","Thur.","Fri.","Sat.");printf("%-4s%-4s%-4s%-4s%-4s%-4s%-4s\n","日","一","二","三","四","五","六");}/*计算该年该月份与已知日子之间的距离天数*/intdate_distance_count(intmonth,intyear){intleap_year_count=0;inti;intdistance;if(year>known_year){for(i=known_year;i<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++;}}}elseif(year==known_year){if(month>2){leap_year_count=1;}}distance=(year-known_year)*365+leap_year_count+day_count(month);returndistance;}/*确定该月份第一天是星期几*/intmakesure_firstday_weekday(intmonth,intyear){intdate_distance=0;intweekday;date_distance=date_distance_count(month,year);weekday=(known_weekday+date_distance)%7;returnweekday;}/*依次打印出该月份的日子*/voidprint_in_turn(intmonth,intfirstday,intyear){inti=1;intweekday;switch(firstday){caseSun:break;caseMon:printf("%-3s","");break;caseTues:printf("%-6s","");break;caseWed:printf("%-9s","");break;caseThur:printf("%-12s","");break;caseFri:printf("%-15s","");break;caseSat:printf("%-18s","");break;}switch(month){case1:case3:case5:case7:case8:case10:case12:{for(i=0;i<31;i++){weekday=(firstday+i)%7;printf("%-3d",i+1);if(weekday==Sat){printf("\n");}}break;}case2:{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("\n");}}break;}else/*平年*/{for(i=0;i<28;i++){weekday=(firstday+i)%7;printf("%-3d",i+1);if(weekday==Sat){printf("\n");}}break;}}case4:case6:case9:case11:{for(i=0;i<30;i++){weekday=(firstday+i)%7;/*计算该天是星期几*/printf("%-3d",i+1);if(weekday==Sat){printf("\n");/*如果是星期六,则换行*/}}break;}}}voiddate_print(intmonth,intyear){intfirstday;firstday=makesure_firstday_weekday(month,year);print_in_turn(month,firstday,year);printf("\n");}voidmain_month(intmonth,intyear){first_line_print(month,year);week_print();date_print(month,year);printf("\n\n");}voidmain_calendar(intyear){inti;for(i=1;i<=12;i++){main_month(i,year);}}intmain(){intyear;printf("请输入年份:year=");scanf("%d",&year);printf("\n");while(year<1902){printf("请输入大于1901的年份\n");printf("请输入年份:year=");scanf("%d",&year);printf("\n");}main_calendar(year);return0;}chunli@Linux:~/c++$
编译运行:
chunli@Linux:~/c++$gcc123.c&&./a.out请输入年份:year=20162016年一月日一二三四五六123456789101112131415161718192021222324252627282930312016年二月日一二三四五六12345678910111213141516171819202122232425262728292016年三月日一二三四五六123456789101112131415161718192021222324252627282930312016年四月日一二三四五六1234567891011121314151617181920212223242526272829302016年五月日一二三四五六123456789101112131415161718192021222324252627282930312016年六月日一二三四五六1234567891011121314151617181920212223242526272829302016年七月日一二三四五六123456789101112131415161718192021222324252627282930312016年八月日一二三四五六123456789101112131415161718192021222324252627282930312016年九月日一二三四五六1234567891011121314151617181920212223242526272829302016年十月日一二三四五六123456789101112131415161718192021222324252627282930312016年十一月日一二三四五六1234567891011121314151617181920212223242526272829302016年十二月日一二三四五六12345678910111213141516171819202122232425262728293031chunli@Linux:~/c++$
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。