回复 2楼 炎天
去掉多余的不行。
这是全部代码:
#include<stdio.h>
void print(int x,int y);//x表示这个月总天数,y表示这个月的一号星期
int month_day(int x,int y);//x表示年份,y表示月份。用于计算该月多少天
int run(int y); //判断是不是闰年 y表示月份
int month_cha(int x,int y);//每月一号的星期
x表示年份,y表示月份
int year_cha(int x);//每年一月一号的星期
x表示年份
void main(){
int year,month,day,cha;
char key='y';
while(key=='y'){
printf("请输入年月:");
scanf("%d%d",&year,&month);
day=month_day(year,month);
cha=month_cha(year,month);
print(day,cha);
printf("(y/n):");
scanf("%c",&key);
scanf("%c",&key);
}
}
void printf(int x,int y){
int i,j;
printf("sun
Mon
Tue
Wed
Thu
Fri
Sat\n");
for (i=0;i<y;i++)
printf("\t");
for(j=1;j<=x;j++,i++){
printf("%d\t",j);
if(i%7==6){
printf("\n");
}
}
printf ("\n");
}
int run(int y){//计算闰年
int r;
if(y%4!=0) r=0;
else if((y%100==0)&&(y%400!=0))
r=0;
else r=1;
return r;
}
int month_day(int x,int y){
int day;
switch(y){
case 1:day=31;break;case 2:day=28+run(x);break;case 3:day=31;break;case 4:day=30;break;
case 5:day=31;break;case 6:day=30;break;case 7:day=31;break;case 8:day=31;break;
case 9:day=30;break;case 10:day=31;break;case 11:day=30;break;case 12:day=31;break;
}
return day;
}
int month_cha(int x,int y){
int day;
switch(y){ //12个月份 每个月一号的星期与下个月星期互推
case 1:day=0;break;case 2:day=3;break;case 3:day=3+run(x);break;case 4:day=6+run(x);break;
case 5:day=1+run(x);break;case 6:day=4+run(x);break;case 7:day=6+run(x);break;case 8:day=2+run(x);break;
case 9:day=5+run(x);break;case 10:day=0+run(x);break;case 11:day=3+run(x);break;case 12:day=5+run(x);break;
}
day=day+year_cha(x);
if(day<0){
day=7-(-day)%7;
}
if(day>6){
day=day%7;
}
return day;
}
int year_cha(int x){
int i,day=0;
if(x>2012){
for(i=2012;i<x;i++){
day=day+run(i);
day++;
}
}
else if(x<2012){
for(i=x;i<2012;i++){
day=day-run(x);
day--;
}
}
else day=0;
printf ("day=%d\n",day);
return day;
}