UIT2024_Calendar/stu2024/虚拟2402康诗曼(1).c
2024-12-07 16:23:34 +08:00

174 lines
3.3 KiB
C

#include<stdio.h>
#include<stdlib.h>
int fangbao()
{
int i;
char x;
printf("1.查询日期所对应的星期\n2.查询该年份日历并竖向输出\n3.查询该年份日历并以2*6格式输出\n4.查询该年是否为闰年\n5.退出程序\n");
scanf(" %c",&x);
if(x=='1')
x=1;
else if(x=='2')
x=2;
else if(x=='3')
x=3;
else if(x=='4')
x=4;
else if(x='5')
x=5;
else
x=6;
return x;
}
int runnian(int year,int month)
{
int md[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if((year%4==0&&year%100!=0||year%400==0)&&month==2)
return 29;
else
return md[month];
}
int date(int year,int month,int day)
{
int c;
if(month<3)
{
month+=12;
year--;
}
if(year!=1582)
{
int a,b;
a=year/100;
b=year%100;
c=(a/4-2*a+b+b/4+13*(month+1)/5+day-1)%7;
if(c<0)
c+=7;
}
else if(year==1582&&month<=10&&day<=4)
c=(day+1+2*month+3*(month+1)/5+year+year/4+5)%7;
else if(year==1582&&month>=10&&day>=15)
c=(day+1+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;
return c;
}
void yeartb(int year,int month)
{
int h,j,i;
h=runnian(1582,month);
j=date(1582,month,1);
for(i=0;i<j;i++)
printf(" ");
for(i=1;i<=h;i++)
{
if(month==10&&i==5)
{
i+=10;
}
printf("%3d",i);
if(month==10&&i>=5&&(i-10+j)%7==0)
printf("\n");
else if(month!=10&&(i+j)%7==0)
printf("\n");
}
printf("\n");
}
void monthtwo(int year, int month)
{
int w,k,e;
w=runnian(year,month);
k=date(year,month,1);
for(e=0;e<k;e++)
printf(" ");
for(e=1;e<=w;e++)
{
printf("%3d",e);
if((e+k)%7==0)
printf("\n");
}
printf("\n");
}
int main(void)
{
for(;;)
{
int year,month,day,d,e;
d=fangbao();
if(d==6)
{
printf("输入错误请从新输入\n\n");
}
if(d==5)
break;
if(d==1)
{
int year,month,day,m;
printf("请输入日期:\n");
scanf("%d%d%d",&year,&month,&day);
if(year<0||month>12||(month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&day>31||(month==4||month==6||month==9||month==11)&&day>30)
printf("输入错误\n");
if((year%4==0&&year%100!=0||year%400==0)&&month==2&&day>29||(year%4!=0&&year%100==0||year%400!=0)&&day>28)
printf("输入错误\n");
if(year==1582)
{
if(month==10&&day>4&&day<15)
printf("输入错误\n\n");
}
m=date(year,month,day);
if(m==0)
printf("该日期为星期日\n");
else
printf("该日期为星期%d\n",m);
}
if(d==2)
{
int f,g;
printf("请输入年份:\n");
scanf("%d",&year);
if(year<0)
printf("输入错误\n");
printf("%4d年的日历为:\n",year);
for(month=1;month<=12;month++)
{
printf("%d月\n",month);
printf(" 日 一 二 三 四 五 六\n");
if(year!=1582)
monthtwo(year,month);
else
yeartb(year,month);
if(month!=12)
printf("\n");
}
}
if(d==3)
{
printf("请输入年份:\n");
scanf("%d",&year);
if(year<0)
printf("输入错误\n");
printf("%4d年的日历为:\n",year);
for(month=1;month<=12;month+=2)
{
printf("%d月",month);
printf("%d月\n",month+1);
printf(" 日 一 二 三 四 五 六");
printf(" 日 一 二 三 四 五 六\n");
monthtwo(year,month);
}
}
if(d==4)
{
int year;
printf("请输入年份:\n");
scanf("%d",&year);
if(year<0)
printf("输入错误\n");
if(year%4==0&&year%100!=0||year%400==0)
printf("该年份为闰年\n");
else
printf("该年份不是闰年\n");
}
}
return 0;
}