250 lines
4.4 KiB
C++
250 lines
4.4 KiB
C++
#include<stdio.h>
|
|
void fun(void);
|
|
int year;
|
|
int shiji;
|
|
int yue;
|
|
int ri;
|
|
int w;//星期
|
|
int y; //年份后两位
|
|
void getday(int first_day[],int y);
|
|
void shuchurili(int days[],int first_day[]);
|
|
|
|
int main()
|
|
{{
|
|
int a;
|
|
printf("查询某年某月某日的日期是周几,该年是否为闰年 请输入1\n");
|
|
printf("输入年份,输出这一年的日历,要求能够单列输出和双列输出 请输入2\n");
|
|
scanf("%d",&a);
|
|
if(a==1)
|
|
{
|
|
scanf("%d-%d-%d",&year,&yue,&ri);
|
|
if((year<=0||yue<=0||ri<=0)||(year==1582&&yue==10&&(ri==5||ri==6||ri==7||ri==8||ri==9||ri==10||ri==11||ri==12||ri==13||ri==14))
|
|
{{
|
|
printf("输入错误,请重新输入:");
|
|
scanf("%d-%d-%d",&year,&yue,&ri);
|
|
} }else {
|
|
if(yue<3)
|
|
{
|
|
year--;
|
|
yue+=12;
|
|
}
|
|
shiji=(year/100);
|
|
y=year%100;
|
|
w=shiji/4-2*shiji+y+y/4+13*(yue+1)/5+ri-1;
|
|
if(w%7==0)
|
|
printf("星期7");
|
|
else
|
|
printf("星期%d ",w%7);
|
|
if((year%4==0&&year%100!=0)||(year%400==0))
|
|
printf("闰年");
|
|
else
|
|
printf("非闰年");
|
|
}
|
|
}}
|
|
|
|
|
|
//第二部分
|
|
|
|
|
|
|
|
|
|
|
|
if(a==2)
|
|
{
|
|
//单双列输出选择
|
|
printf("请选择您要输出的格式\n");
|
|
printf("单列输出请按1\n");
|
|
printf("双列输出请按2\n");
|
|
int b;
|
|
scanf("%d",&b);
|
|
if(b==1)
|
|
{
|
|
int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
|
|
int first_day[12]={0};
|
|
int year=0;
|
|
int i=0;
|
|
int a=1;
|
|
while(a)
|
|
{
|
|
printf("请输入年份:");
|
|
scanf("%d",&year);
|
|
//报错
|
|
if(year<=0)
|
|
{
|
|
printf("输入错误,请重新输入:");
|
|
scanf("%d",&year);
|
|
}
|
|
--a;
|
|
}
|
|
//获取该年每个月所属星期
|
|
getday(first_day,year);
|
|
if((year%4==0&&year%100!=0)||(year%400==0))
|
|
days[1]=29;
|
|
//输出日历
|
|
shuchurili(days,first_day);
|
|
return 0;
|
|
}else
|
|
|
|
|
|
//双列输出
|
|
|
|
|
|
|
|
{
|
|
int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
|
|
int first_day[12]={0};
|
|
int year=0;
|
|
int i=0;
|
|
int a=1;
|
|
while(a)
|
|
{
|
|
printf("请输入年份:");
|
|
scanf("%d",&year);
|
|
//报错
|
|
if(year<=0)
|
|
{
|
|
printf("输入错误,请重新输入:");
|
|
scanf("%d",&year);
|
|
}
|
|
--a;
|
|
}
|
|
//获取该年每个月所属星期
|
|
getday(first_day,year);
|
|
if((year%4==0&&year%100!=0)||(year%400==0))
|
|
days[1]=29;
|
|
//输出日历
|
|
shuchurili(days,first_day);
|
|
return 0;
|
|
|
|
|
|
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void getday(int first_day[],int y)
|
|
{
|
|
int m=0;
|
|
int d=1;
|
|
int w=0;
|
|
for(m=3;m<=12;m++)
|
|
{
|
|
w=(d+1+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
|
|
first_day[m-1]=w;
|
|
}
|
|
y-=1;
|
|
for (m=13;m<=14;m++)
|
|
{
|
|
w = (d+1+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
|
|
first_day[m-13] = w;
|
|
}
|
|
}
|
|
void shuchurili(int days[],int first_day[])
|
|
{
|
|
int dyt=0;
|
|
int d=0,i=0,j=0;
|
|
for(i=0;i<12;i++)
|
|
{
|
|
dyt=first_day[i];
|
|
printf(" %2d 月 \n", i+1);
|
|
printf(" 日 一 二 三 四 五 六 \n");
|
|
//1号前的空格
|
|
//改后
|
|
for(j=0;j<dyt;j++)
|
|
printf(" ");
|
|
for(d=1;d<=days[i];d++)
|
|
{
|
|
printf(" %2d",d);
|
|
if((d+dyt)%7==0)
|
|
printf("\n");
|
|
}
|
|
printf("\n");
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
//第二部分
|
|
|
|
|
|
#include<string.h>
|
|
//判断闰年的函数
|
|
int isleapyear(int year)
|
|
{
|
|
return ((year%4==0&&year%100!=0)||(year%400==0));
|
|
}
|
|
|
|
//计算每月天数的函数
|
|
int month(int year,int yue)
|
|
{
|
|
int run[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
|
|
if(yue==2&&isleapyear(year))
|
|
{
|
|
return 29;
|
|
}
|
|
return run[yue];
|
|
}
|
|
|
|
//计算给定日期是星期几(蔡勒公式)
|
|
int week(int year,int yue,int ri)
|
|
{
|
|
if(yue<3)
|
|
{
|
|
year--;
|
|
yue+=12;
|
|
}
|
|
shiji=(year/100);
|
|
y=year%100;
|
|
w=shiji/4-2*shiji+y+y/4+13*(yue+1)/5+ri-1;
|
|
return (w%7+7)%7;
|
|
}
|
|
|
|
//输出日历函数
|
|
void rili(int year)
|
|
{
|
|
char *week[]={"一","二","三","四","五","六","日"};
|
|
scanf("&d-%d-%d",&year,&yue,&ri);
|
|
for(yue=1;yue<=12;yue++)
|
|
{
|
|
int i;
|
|
printf("%d ",yue);
|
|
for(i=0;i<7;i++)
|
|
printf("%s",week[i]);
|
|
printf("\n");
|
|
int w=week(year,yue,1);//w为每月第一日是星期几
|
|
int jx=month(year,yue);
|
|
char a[w]={"0"};
|
|
char b[][7];//输出日期的数组
|
|
if((year%4==0&&year%100!=0)||(year%400==0))
|
|
{
|
|
for(int n=0;n<7;n++)
|
|
{
|
|
for(int m=1;m<jx;m++)
|
|
{
|
|
for(int e=1;e<jx;e++)
|
|
b[m][n]='e';
|
|
}
|
|
}
|
|
for(int m=0;m<6;m++)
|
|
{
|
|
for(int n=0;n<7;n++)
|
|
printf("%d",a[m][n]);
|
|
printf("\n");
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
*/
|