C語言實現分三列顯示的萬年曆
阿新 • • 發佈:2018-12-25
筆者提示:初學C語言,瞭解for,if,函式,陣列初步就可寫下面的效果出來了!
執行環境:VC++6.0
效果
程式碼
//本程式旨在製作分三列顯示的萬年曆 #include<stdio.h> void printblank(int n) //本函式用來控制每月的一號是星期n的時候,輸出不同的格式,使輸出規範 { if(n==1)printf(""); if(n==2)printf(" "); if(n==3)printf(" "); if(n==4)printf(" "); if(n==5)printf(" "); if(n==6)printf(" "); if(n==7)printf(" "); } int wek(int yea) //本函式用來計算每年的一月一號是周幾 { int a[10005]; int k=1; int i; a[1]=1; for(i=2;i<10001;i++) { if(k%400==0 || (k%4==0 && k%100!=0)) { if(a[i-1]==7)a[i]=2; else if(a[i-1]==6)a[i]=1; else a[i]=a[i-1]+2; } else { if(a[i-1]==7)a[i]=1; else a[i]=a[i-1]+1; } k++; } return a[yea]; } void main() { int i1; int week,year; //year表示某年,week表示該年的一月一號是星期幾 int week1,week2,week3,week4,week5,week6,week7,week8,week9,week10,week11,week12; //week1表示一月份最後一天是星期幾,依次類推 int wee2,wee3,wee4,wee5,wee6,wee7,wee8,wee9,wee10,wee11,wee12;//wee2表示二月1號是星期幾,下面類同 printf("Please input any year between 1 and 10000,such as 1,152,1689,2017 and so on, then you will see the year's calendar\n"); scanf("%d",&year); if(year>10000 || year<0)printf("You input a wrong year!!! Please input a correct year according to the hint above.\n"); else { week=wek(year); //本程式分四層顯示,下面對日曆逐層完成輸出 printf("\n\n *************%04d年日曆*************************%04d年日曆*************\n\n",year,year,year); //第一層實現輸出如下(本程式共分四層實現萬年曆分三列列印) printf("*********************************** ******************************** ***********************************\n"); printf("%19d年1月%30d年2月%30d年3月\n",year,year,year); printf(" 一 二 三 四 五 六 日***一 二 三 四 五 六 日***一 二 三 四 五 六 日\n"); //顯示日曆本層核心行第1行(本日曆每層核心行共六行) printf(" "); printblank(week); for(i1=1;i1<=8-week;i1++)printf("%2d ",i1); //輸出一月份的第1行 if(week<6)week1=week+2; //確定一月份的最後 else week1=week-5; //一天是星期幾,下面類同 if(week1==7)wee2=1; //確定二月1號是星期幾,下面類同 else wee2=week1+1; printblank(wee2); for(i1=1;i1<=8-wee2;i1++)printf("%2d ",i1); //輸出二月份的第1行 if((year%400==0) || (year%4==0 && (year%100!=0))){week2=wee2;} else { if(wee2==1)week2=7; else week2=wee2-1; } if(week2==7)wee3=1; //確定三月1號是周幾 else wee3=week2+1; printblank(wee3); for(i1=1;i1<=8-wee3;i1++)printf("%2d ",i1); //輸出三月份的第1行 if(wee2<6)week3=wee2+2; else week3=wee2-5; if(week3==7)wee4=7; else wee4=week3+1; //確定四月1號是周幾 printf("\n"); //顯示日曆本層核心行第2行(本日曆每層核心行共六行) printf(" "); for(i1=9-week;i1<=15-week;i1++)printf("%2d ",i1); //輸出一月份第2行 for(i1=9-wee2;i1<=15-wee2;i1++)printf("%2d ",i1); //輸出二月份第2行 for(i1=9-wee3;i1<=15-wee3;i1++)printf("%2d ",i1); //輸出三月份第2行 printf("\n"); //顯示日曆本層核心行第3行(本日曆每層核心行共六行) printf(" "); for(i1=16-week;i1<=22-week;i1++)printf("%2d ",i1); //輸出一月份第3行 for(i1=16-wee2;i1<=22-wee2;i1++)printf("%2d ",i1); //輸出二月份第3行 for(i1=16-wee3;i1<=22-wee3;i1++)printf("%2d ",i1); //輸出三月份第3行 printf("\n"); //顯示日曆本層核心行第4行(本日曆每層核心行共六行) printf(" "); for(i1=23-week;i1<=29-week;i1++)printf("%2d ",i1); //輸出一月份第4行 for(i1=23-wee2;i1<=29-wee2;i1++)printf("%2d ",i1); //輸出二月份第4行 for(i1=23-wee3;i1<=29-wee3;i1++)printf("%2d ",i1); //輸出三月份第4行 printf("\n"); //顯示日曆本層核心行第5行(本日曆每層核心行共六行) printf(" "); if(31-(29-week)==7){for(i1=25;i1<=31;i1++)printf("%2d ",i1);} //輸出一月份第5行 else if(week+2==8){{for(i1=24;i1<=30;i1++)printf("%2d ",i1);}} else if(week+2==9){{for(i1=23;i1<=29;i1++)printf("%2d ",i1);}} else if(week+2==6){{for(i1=26;i1<=31;i1++)printf("%2d ",i1);}printf(" ");} else if(week+2==5){{for(i1=27;i1<=31;i1++)printf("%2d ",i1);}printf(" ");} else if(week+2==4){{for(i1=28;i1<=31;i1++)printf("%2d ",i1);}printf(" ");} else{for(i1=29;i1<=31;i1++)printf("%2d ",i1);printf(" ");} if((year%400==0) || (year%4==0 && (year%100!=0))) //輸出二月份第5行 { if(29-(29-wee2)==1)printf("%2d ",29); else if(wee2==2)printf("%2d %2d ",28,29); else if(wee2==3)printf("%2d %2d %2d ",27,28,29); else if(wee2==4){for(i1=26;i1<=29;i1++)printf("%2d ",i1);printf(" ");} else if(wee2==5){for(i1=25;i1<=29;i1++)printf("%2d ",i1);printf(" ");} else if(wee2==6){for(i1=24;i1<=29;i1++)printf("%2d ",i1);printf(" ");} else{for(i1=23;i1<=29;i1++)printf("%2d ",i1);} } else { if(28-(29-wee2)==0)printf(" "); else if(wee2-1==1)printf("%2d ",28); else if(wee2==3)printf("%2d %2d ",27,28); else if(wee2==4)printf("%2d %2d %2d ",26,27,28); else if(wee2==5)printf("%2d %2d %2d %2d ",25,26,27,28); else if(wee2==6)printf("%2d %2d %2d %2d %2d ",24,25,26,27,28); else{for(i1=23;i1<=28;i1++)printf("%2d ",i1);printf(" ");} } if(31-(29-wee3)==7){for(i1=25;i1<=31;i1++)printf("%2d ",i1);} //輸出三月份第5行 else if(wee3+2==8){{for(i1=24;i1<=30;i1++)printf("%2d ",i1);}} else if(wee3+2==9){{for(i1=23;i1<=29;i1++)printf("%2d ",i1);}} else if(wee3+2==6){{for(i1=26;i1<=31;i1++)printf("%2d ",i1);}printf(" ");} else if(wee3+2==5){{for(i1=27;i1<=31;i1++)printf("%2d ",i1);}printf(" ");} else if(wee3+2==4){{for(i1=28;i1<=31;i1++)printf("%2d ",i1);}printf(" ");} else{for(i1=29;i1<=31;i1++)printf("%2d ",i1);printf(" ");} printf("\n"); //顯示日曆本層核心行第6行(本日曆每層核心行共六行) printf(" "); if(week+2==8)printf("%2d ",31); //輸出一月份第6行 else if(week+2==9)printf("%2d %2d ",30,31); else printf(" "); printf(" "); //輸出二月份第6行 if(wee3+2==8)printf("%2d ",31); //輸出三月份第6行 else if(wee3+2==9)printf("%2d %2d ",30,31); else printf(" "); printf("\n"); //第二層實現輸出如下(本程式共分四層實現萬年曆分三列列印) printf("*********************************** ******************************** ***********************************\n"); printf("%19d年4月%30d年5月%30d年6月\n",year,year,year); printf(" 一 二 三 四 五 六 日***一 二 三 四 五 六 日***一 二 三 四 五 六 日\n"); //顯示日曆本層核心行第1行(本日曆每層核心行共六行) printf(" "); printblank(wee4); for(i1=1;i1<=8-wee4;i1++)printf("%2d ",i1); //輸出四月份的第1行 if(wee4<=6)week4=wee4+1; //確定四月份的最後 else week4=1; //一天是星期幾,下面類同 if(week4==7)wee5=1; //確定五月1號是星期幾,下面類同 else wee5=week4+1; printblank(wee5); for(i1=1;i1<=8-wee5;i1++)printf("%2d ",i1); //輸出五月份的第1行 if(wee5<6)week5=wee5+2; else week5=wee5-5; if(week5==7)wee6=7; else wee6=week5+1; //確定六月1號是周幾 printblank(wee6); for(i1=1;i1<=8-wee6;i1++)printf("%2d ",i1); //輸出六月份的第1行 if(wee6<=6)week6=wee6+1; else week6=1; if(week6==7)wee7=7; else wee7=week6+1; //確定七月1號是周幾 printf("\n"); //顯示日曆本層核心行第2行(本日曆每層核心行共六行) printf(" "); for(i1=9-wee4;i1<=15-wee4;i1++)printf("%2d ",i1); //輸出四月份第2行 for(i1=9-wee5;i1<=15-wee5;i1++)printf("%2d ",i1); //輸出五月份第2行 for(i1=9-wee6;i1<=15-wee6;i1++)printf("%2d ",i1); //輸出六月份第2行 printf("\n"); //顯示日曆本層核心行第3行(本日曆每層核心行共六行) printf(" "); for(i1=16-wee4;i1<=22-wee4;i1++)printf("%2d ",i1); //輸出四月份第3行 for(i1=16-wee5;i1<=22-wee5;i1++)printf("%2d ",i1); //輸出五月份第3行 for(i1=16-wee6;i1<=22-wee6;i1++)printf("%2d ",i1); //輸出六月份第3行 printf("\n"); //顯示日曆本層核心行第4行(本日曆每層核心行共六行) printf(" "); for(i1=23-wee4;i1<=29-wee4;i1++)printf("%2d ",i1); //輸出四月份第4行 for(i1=23-wee5;i1<=29-wee5;i1++)printf("%2d ",i1); //輸出五月份第4行 for(i1=23-wee6;i1<=29-wee6;i1++)printf("%2d ",i1); //輸出六月份第4行 printf("\n"); //顯示日曆本層核心行第5行(本日曆每層核心行共六行) printf(" "); if(30-(29-wee4)==2)printf("%2d %2d ",29,30);//輸出四月份第5行 else if(wee4+1==3){for(i1=28;i1<=30;i1++)printf("%2d ",i1);printf(" ");} else if(wee4+1==4){for(i1=27;i1<=30;i1++)printf("%2d ",i1);printf(" ");} else if(wee4+1==5){for(i1=26;i1<=30;i1++)printf("%2d ",i1);printf(" ");} else if(wee4+1==6){for(i1=25;i1<=30;i1++)printf("%2d ",i1);printf(" ");} else if(wee4+1==7){for(i1=24;i1<=30;i1++)printf("%2d ",i1);} else {for(i1=23;i1<=29;i1++)printf("%2d ",i1);} if(31-(29-wee5)==7){for(i1=25;i1<=31;i1++)printf("%2d ",i1);} //輸出五月份第5行 else if(wee5+2==8){{for(i1=24;i1<=30;i1++)printf("%2d ",i1);}} else if(wee5+2==9){{for(i1=23;i1<=29;i1++)printf("%2d ",i1);}} else if(wee5+2==6){{for(i1=26;i1<=31;i1++)printf("%2d ",i1);}printf(" ");} else if(wee5+2==5){{for(i1=27;i1<=31;i1++)printf("%2d ",i1);}printf(" ");} else if(wee5+2==4){{for(i1=28;i1<=31;i1++)printf("%2d ",i1);}printf(" ");} else{for(i1=29;i1<=31;i1++)printf("%2d ",i1);printf(" ");} if(30-(29-wee6)==2)printf("%2d %2d ",29,30);//輸出六月份第5行 else if(wee6+1==3){for(i1=28;i1<=30;i1++)printf("%2d ",i1);printf(" ");} else if(wee6+1==4){for(i1=27;i1<=30;i1++)printf("%2d ",i1);printf(" ");} else if(wee6+1==5){for(i1=26;i1<=30;i1++)printf("%2d ",i1);printf(" ");} else if(wee6+1==6){for(i1=25;i1<=30;i1++)printf("%2d ",i1);printf(" ");} else if(wee6+1==7){for(i1=24;i1<=30;i1++)printf("%2d ",i1);} else {for(i1=23;i1<=29;i1++)printf("%2d ",i1);} printf("\n"); //顯示日曆本層核心行第6行(本日曆每層核心行共六行) printf(" "); if(30-(29-wee4)==8)printf("%2d ",30);//輸出四月份第6行 else printf(" "); if(wee5+2==8)printf("%2d ",31); //輸出五月份第6行 else if(wee5+2==9)printf("%2d %2d ",30,31); else printf(" "); if(30-(29-wee6)==8)printf("%2d ",30);//輸出六月份第6行 else printf(" "); printf("\n"); //第三層實現輸出如下(本程式共分四層實現萬年曆分三列列印) printf("*********************************** ******************************** ***********************************\n"); printf("%19d年7月%30d年8月%30d年9月\n",year,year,year); printf(" 一 二 三 四 五 六 日***一 二 三 四 五 六 日***一 二 三 四 五 六 日\n"); //顯示日曆本層核心行第1行(本日曆每層核心行共六行) printf(" "); printblank(wee7); for(i1=1;i1<=8-wee7;i1++)printf("%2d ",i1); //輸出七月份的第1行 if(wee7<6)week7=wee7+2; else week7=wee7-5; if(week7==7)wee8=1; else wee8=week7+1; printblank(wee8); for(i1=1;i1<=8-wee8;i1++)printf("%2d ",i1); //輸出八月份的第1行 if(wee8<6)week8=wee8+2; else week8=wee8-5; if(week8==7)wee9=1; else wee9=week8+1; printblank(wee9); for(i1=1;i1<=8-wee9;i1++)printf("%2d ",i1); //輸出九月份的第1行 if(wee9<=6)week9=wee9+1; else week9=1; if(week9==7)wee10=1; else wee10=week9+1; printf("\n"); //顯示日曆本層核心行第2行(本日曆每層核心行共六行) printf(" "); for(i1=9-wee7;i1<=15-wee7;i1++)printf("%2d ",i1); //輸出七月份第2行 for(i1=9-wee8;i1<=15-wee8;i1++)printf("%2d ",i1); //輸出八月份第2行 for(i1=9-wee9;i1<=15-wee9;i1++)printf("%2d ",i1); //輸出九月份第2行 printf("\n"); //顯示日曆本層核心行第3行(本日曆每層核心行共六行) printf(" "); for(i1=16-wee7;i1<=22-wee7;i1++)printf("%2d ",i1); //輸出七月份第3行 for(i1=16-wee8;i1<=22-wee8;i1++)printf("%2d ",i1); //輸出八月份第3行 for(i1=16-wee9;i1<=22-wee9;i1++)printf("%2d ",i1); //輸出九月份第3行 printf("\n"); //顯示日曆本層核心行第4行(本日曆每層核心行共六行) printf(" "); for(i1=23-wee7;i1<=29-wee7;i1++)printf("%2d ",i1); //輸出七月份第4行 for(i1=23-wee8;i1<=29-wee8;i1++)printf("%2d ",i1); //輸出八月份第4行 for(i1=23-wee9;i1<=29-wee9;i1++)printf("%2d ",i1); //輸出九月份第4行 printf("\n"); //顯示日曆本層核心行第5行(本日曆每層核心行共六行) printf(" "); if(31-(29-wee7)==7){for(i1=25;i1<=31;i1++)printf("%2d ",i1);} //輸出七月份第5行 else if(wee7+2==8){{for(i1=24;i1<=30;i1++)printf("%2d ",i1);}} else if(wee7+2==9){{for(i1=23;i1<=29;i1++)printf("%2d ",i1);}} else if(wee7+2==6){{for(i1=26;i1<=31;i1++)printf("%2d ",i1);}printf(" ");} else if(wee7+2==5){{for(i1=27;i1<=31;i1++)printf("%2d ",i1);}printf(" ");} else if(wee7+2==4){{for(i1=28;i1<=31;i1++)printf("%2d ",i1);}printf(" ");} else{for(i1=29;i1<=31;i1++)printf("%2d ",i1);printf(" ");} if(31-(29-wee8)==7){for(i1=25;i1<=31;i1++)printf("%2d ",i1);} //輸出八月份第5行 else if(wee8+2==8){{for(i1=24;i1<=30;i1++)printf("%2d ",i1);}} else if(wee8+2==9){{for(i1=23;i1<=29;i1++)printf("%2d ",i1);}} else if(wee8+2==6){{for(i1=26;i1<=31;i1++)printf("%2d ",i1);}printf(" ");} else if(wee8+2==5){{for(i1=27;i1<=31;i1++)printf("%2d ",i1);}printf(" ");} else if(wee8+2==4){{for(i1=28;i1<=31;i1++)printf("%2d ",i1);}printf(" ");} else{for(i1=29;i1<=31;i1++)printf("%2d ",i1);printf(" ");} if(30-(29-wee9)==2)printf("%2d %2d ",29,30);//輸出九月份第5行 else if(wee9+1==3){for(i1=28;i1<=30;i1++)printf("%2d ",i1);printf(" ");} else if(wee9+1==4){for(i1=27;i1<=30;i1++)printf("%2d ",i1);printf(" ");} else if(wee9+1==5){for(i1=26;i1<=30;i1++)printf("%2d ",i1);printf(" ");} else if(wee9+1==6){for(i1=25;i1<=30;i1++)printf("%2d ",i1);printf(" ");} else if(wee9+1==7){for(i1=24;i1<=30;i1++)printf("%2d ",i1);} else {for(i1=23;i1<=29;i1++)printf("%2d ",i1);} printf("\n"); //顯示日曆本層核心行第6行(本日曆每層核心行共六行) printf(" "); if(wee7+2==8)printf("%2d ",31); //輸出七月份第6行 else if(wee7+2==9)printf("%2d %2d ",30,31); else printf(" "); if(wee8+2==8)printf("%2d ",31); //輸出八月份第6行 else if(wee8+2==9)printf("%2d %2d ",30,31); else printf(" "); if(30-(29-wee9)==8)printf("%2d ",30);//輸出九月份第6行 else printf(" "); printf("\n"); //第四層實現輸出如下(本程式共分四層實現萬年曆分三列列印) printf("*********************************** ******************************** ***********************************\n"); printf("%19d年10月%29d年11月%29d年12月\n",year,year,year); printf(" 一 二 三 四 五 六 日***一 二 三 四 五 六 日***一 二 三 四 五 六 日\n"); //顯示日曆本層核心行第1行(本日曆每層核心行共六行) printf(" "); printblank(wee10); for(i1=1;i1<=8-wee10;i1++)printf("%2d ",i1); //輸出十月份的第1行 if(wee10<6)week10=wee10+2; else week10=wee10-5; if(week10==7)wee11=1; else wee11=week10+1; printblank(wee11); for(i1=1;i1<=8-wee11;i1++)printf("%2d ",i1); //輸出十一月份的第1行 if(wee11==7)week11=1; else week11=wee11+1; if(week11==7)wee12=1; else wee12=week11+1; printblank(wee12); for(i1=1;i1<=8-wee12;i1++)printf("%2d ",i1); //輸出十二月份的第1行 printf("\n"); //顯示日曆本層核心行第2行(本日曆每層核心行共六行) printf(" "); for(i1=9-wee10;i1<=15-wee10;i1++)printf("%2d ",i1); //輸出十月份第2行 for(i1=9-wee11;i1<=15-wee11;i1++)printf("%2d ",i1); //輸出十一月份第2行 for(i1=9-wee12;i1<=15-wee12;i1++)printf("%2d ",i1); //輸出十二月份第2行 printf("\n"); //顯示日曆本層核心行第3行(本日曆每層核心行共六行) printf(" "); for(i1=16-wee10;i1<=22-wee10;i1++)printf("%2d ",i1); //輸出十月份第3行 for(i1=16-wee11;i1<=22-wee11;i1++)printf("%2d ",i1); //輸出十一月份第3行 for(i1=16-wee12;i1<=22-wee12;i1++)printf("%2d ",i1); //輸出十二月份第3行 printf("\n"); //顯示日曆本層核心行第4行(本日曆每層核心行共六行) printf(" "); for(i1=23-wee10;i1<=29-wee10;i1++)printf("%2d ",i1); //輸出十月份第4行 for(i1=23-wee11;i1<=29-wee11;i1++)printf("%2d ",i1); //輸出十一月份第4行 for(i1=23-wee12;i1<=29-wee12;i1++)printf("%2d ",i1); //輸出十二月份第4行 printf("\n"); //顯示日曆本層核心行第5行(本日曆每層核心行共六行) printf(" "); if(31-(29-wee10)==7){for(i1=25;i1<=31;i1++)printf("%2d ",i1);} //輸出十月份第5行 else if(wee10+2==8){{for(i1=24;i1<=30;i1++)printf("%2d ",i1);}} else if(wee10+2==9){{for(i1=23;i1<=29;i1++)printf("%2d ",i1);}} else if(wee10+2==6){{for(i1=26;i1<=31;i1++)printf("%2d ",i1);}printf(" ");} else if(wee10+2==5){{for(i1=27;i1<=31;i1++)printf("%2d ",i1);}printf(" ");} else if(wee10+2==4){{for(i1=28;i1<=31;i1++)printf("%2d ",i1);}printf(" ");} else{for(i1=29;i1<=31;i1++)printf("%2d ",i1);printf(" ");} if(30-(29-wee9)==2)printf("%2d %2d ",29,30); //輸出十一月份第5行 else if(wee11+1==3){for(i1=28;i1<=30;i1++)printf("%2d ",i1);printf(" ");} else if(wee11+1==4){for(i1=27;i1<=30;i1++)printf("%2d ",i1);printf(" ");} else if(wee11+1==5){for(i1=26;i1<=30;i1++)printf("%2d ",i1);printf(" ");} else if(wee11+1==6){for(i1=25;i1<=30;i1++)printf("%2d ",i1);printf(" ");} else if(wee11+1==7){for(i1=24;i1<=30;i1++)printf("%2d ",i1);} else {for(i1=23;i1<=29;i1++)printf("%2d ",i1);} if(31-(29-wee12)==7){for(i1=25;i1<=31;i1++)printf("%2d ",i1);} //輸出十二月份第5行 else if(wee12+2==8){{for(i1=24;i1<=30;i1++)printf("%2d ",i1);}} else if(wee12+2==9){{for(i1=23;i1<=29;i1++)printf("%2d ",i1);}} else if(wee12+2==6){{for(i1=26;i1<=31;i1++)printf("%2d ",i1);}printf(" ");} else if(wee12+2==5){{for(i1=27;i1<=31;i1++)printf("%2d ",i1);}printf(" ");} else if(wee12+2==4){{for(i1=28;i1<=31;i1++)printf("%2d ",i1);}printf(" ");} else{for(i1=29;i1<=31;i1++)printf("%2d ",i1);printf(" ");} printf("\n"); //顯示日曆本層核心行第6行(本日曆每層核心行共六行) printf(" "); if(wee10+2==8)printf("%2d ",31); //輸出十月份第6行 else if(wee10+2==9)printf("%2d %2d ",30,31); else printf(" "); if(30-(29-wee11)==8)printf("%2d ",30); //輸出十一月份第6行 else printf(" "); if(wee12+2==8)printf("%2d ",31); //輸出十二月份第6行 else if(wee12+2==9)printf("%2d %2d ",30,31); else printf(" "); printf("\n"); printf("*********************************** ******************************** ***********************************\n"); } }