#include<stdio.h>
#include<stdlib.h>
int daily(int year,int month,int bg);
int begin(int y,int m);
void menu(int year,int month);
int main(){
int year,month;
printf("请输入年份:");
scanf("%d",&year);
printf("请输入月份:");
scanf("%d",&month);
menu(year,month);
return 0;
}
int begin(int y,int m){ //得出该年的起始位置,其中一天占7个字节,以2021年为基准年
int dy,a,e,i,c;
int sum,fact;
dy=y-2021;
e=dy%4;
printf("e=%d",e);
if(y<2025){//四年一周期,在2021周期内进入这个条件语句
a=35;//从2021年起始年开始算,2021年第一天周五
switch(e){
case 0: sum=a;break;
case 1: sum=a+365*7; break;
case 2: sum=a+365*14;break;
case 3: sum=a+365*21;break;
}
fact=sum%49;
}
else{//大于2021年内的周期,进行该条件语句
for(i=2021;i<=y;i=i+4){
sum=0;
sum=a+365*21+366*7;
fact=sum%49;
a=fact;
}
switch(e){
case 0: sum=fact;break;
case 1: sum=fact+365*7; break;
case 2: sum=fact+365*14;break;
case 3: sum=fact+365*21;break;
}
fact=sum%49;
}
printf("fact=%d,y=%d",fact,y);
printf("sum=%d\n",sum);
return fact;
}
int daily(int year,int month,int bg){//对每个月的天数进行单独的书写 ,打印
int i,j,k,a;
printf("年份:%d,月份:%d\n",year,month);
printf("SUN MON TUE WED THU FRI SAT \n");
if(year%4==0)
a=29;
else
a=28;
switch(month){
case 1:for(j=1;j<=bg;j++){
printf(" ");
}
for(i=1;i<=9;i++){
printf("%d ",i);
k=bg+7*i;
if(k%49==0)
printf("\n");
}
for(i;i<=31;i++){
printf("%d ",i);
k=bg+7*i;
if(k%49==0)
printf("\n");
}
break;
case 2: bg=bg+31*7;
bg=bg%49;
for(j=1;j<=bg;j++){
putchar(' ');
}
for(i=1;i<=9;i++){
printf("%d ",i);
k=bg+7*i;
if(k%49==0)
printf("\n");
}
for(i;i<=a;i++){
printf("%d ",i);
k=bg+7*i;
if(k%49==0)
printf("\n");
}
break;
case 3: bg=bg+(a+31)*7;
bg=bg%49;
for(j=1;j<=bg;j++){
putchar(' ');
}
for(i=1;i<=9;i++){
printf("%d ",i);
k=bg+7*i;
if(k%49==0)
printf("\n");
}
for(i;i<=31;i++){
printf("%d ",i);
k=bg+7*i;
if(k%49==0)
printf("\n");
}
break;
case 4: bg=bg+(a+31+31)*7;
bg=bg%49;
for(j=1;j<=bg;j++){
putchar(' ');
}
for(i=1;i<=9;i++){
printf("%d ",i);
k=bg+7*i;
if(k%49==0)
printf("\n");
}
for(i;i<=30;i++){
printf("%d ",i);
k=bg+7*i;
if(k%49==0)
printf("\n");
}
break;
case 5: bg=bg+(a+31*2+30)*7;
bg=bg%49;
for(j=1;j<=bg;j++){
putchar(' ');
}
for(i=1;i<=9;i++){
printf("%d ",i);
k=bg+7*i;
if(k%49==0)
printf("\n");
}
for(i;i<=31;i++){
printf("%d ",i);
k=bg+7*i;
if(k%49==0)
printf("\n");
}
break;
case 6: bg=bg+(a+31*3+30)*7;
bg=bg%49;
for(j=1;j<=bg;j++){
putchar(' ');
}
for(i=1;i<=9;i++){
printf("%d ",i);
k=bg+7*i;
if(k%49==0)
printf("\n");
}
for(i;i<=30;i++){
printf("%d ",i);
k=bg+7*i;
if(k%49==0)
printf("\n");
}
break;
case 7: bg=bg+(a+31*3+30*2)*7;
bg=bg%49;
for(j=1;j<=bg;j++){
putchar(' ');
}
for(i=1;i<=9;i++){
printf("%d ",i);
k=bg+7*i;
if(k%49==0)
printf("\n");
}
for(i;i<=31;i++){
printf("%d ",i);
k=bg+7*i;
if(k%49==0)
printf("\n");
}
break;
case 8: bg=bg+(a+31*4+30*2)*7;
bg=bg%49;
for(j=1;j<=bg;j++){
putchar(' ');
}
for(i=1;i<=9;i++){
printf("%d ",i);
k=bg+7*i;
if(k%49==0)
printf("\n");
}
for(i;i<=31;i++){
printf("%d ",i);
k=bg+7*i;
if(k%49==0)
printf("\n");
}
break;
case 9: bg=bg+(a+31*5+30*2)*7;
bg=bg%49;
for(j=1;j<=bg;j++){
putchar(' ');
}
for(i=1;i<=9;i++){
printf("%d ",i);
k=bg+7*i;
if(k%49==0)
printf("\n");
}
for(i;i<=30;i++){
printf("%d ",i);
k=bg+7*i;
if(k%49==0)
printf("\n");
}
break;
case 10: bg=bg+(a+31*5+30*3)*7;
bg=bg%49;
for(j=1;j<=bg;j++){
putchar(' ');
}
for(i=1;i<=9;i++){
printf("%d ",i);
k=bg+7*i;
if(k%49==0)
printf("\n");
}
for(i;i<=31;i++){
printf("%d ",i);
k=bg+7*i;
if(k%49==0)
printf("\n");
}
break;
case 11: bg=bg+(a+31*6+30*3)*7;
bg=bg%49;
for(j=1;j<=bg;j++){
putchar(' ');
}
for(i=1;i<=9;i++){
printf("%d ",i);
k=bg+7*i;
if(k%49==0)
printf("\n");
}
for(i;i<=30;i++){
printf("%d ",i);
k=bg+7*i;
if(k%49==0)
printf("\n");
}
break;
case 12: bg=bg+(a+31*6+30*4)*7;
bg=bg%49;
for(j=1;j<=bg;j++){
putchar(' ');
}
for(i=1;i<=9;i++){
printf("%d ",i);
k=bg+7*i;
if(k%49==0)
printf("\n");
}
for(i;i<=31;i++){
printf("%d ",i);
k=bg+7*i;
if(k%49==0)
printf("\n");
}
break;
default: break;
}
return bg;
}
void menu(int year,int month){
int i,bg2,bg1,a;
bg2=begin(year,month);//算所给年的起始位置
bg1=daily(year,month,bg2);//打印该年的某一月的日历
for(i=1;i<=1000;i++){//功能页,进行下一月或上一月的翻转;
printf("\n");
printf("1:last month 2:next month 3:exit\n");
printf("please chose the choice:");
scanf("%d",&a);
switch(a){
case 1:if(month==1){
year=year-1;
month=12;
}
else{
month=month-1;
}
break;
case 2:{
if(month<12)
month=month+1;
else if(month==12){
year=year+1;
month=1;
}
break;
}
case 3:
exit(0);
}
bg2=begin(year,month);
bg1=daily(year,month,bg2);
}
}
问题代码在36至55行