c++打印月历
已知1900年一月一日是周一 输入年份(1900年之后)和月份打印月历
我的思路是算出输入的月份1号是星期几然后利用下边数组和for循环进行打印,具体怎么做?
y m
n =y-1900
v=1+n/4+365n+n%4*365
if n*4==0
for (int i=0;i<=m-1;i++)
sum=0
sum=sum+monping[i]
else
for (int i=0;i<=m-1;i++)
sum=0
sum=sum+monping[i]
sumdays=v+sum
monping[12]={31,28,31,30,31,30,31,31,30,30,31,30,30,31}
monrun[12]={31,29,31,30,31,30,31,31,30,30,31,30,30,31}
答案:这个我觉得应该分几步
第一步:确定这个年份这个月的第一天是1900年后的第多少天,确定这一天是星期几
第二步:确定这个年这个月份的天数
第三步:确定这个月份每天是星期几,方法是以7为循环
你要注意其中的瑞年,这个一定要注意。
//月历打印
#include<iostream>
#include<iomanip>
using namespace std;
int day=0;//过去的日子数
int month;
int year;
bool rui(int year)//判断是否是瑞年
{
if(year%100==0)
{
if(year%400==0)
return 1;
else
return 0;
}
else
{
if(year%4==0)
return 1;
else
return 0;
}
}
bool tian(int a,int b);//确定输入的这一年是1900年后的第几天,a是年份,b是月份
void print();
void main()
{
while(1)
{
day=0;
month=0;
year=0;
cout<<"输入年份和月份"<<endl;
cin>>year>>month;
if(tian(year,month))
print();
}
}
bool tian(int a,int b)
{
if(a<1900||b<1||b>12)
{
cout<<"输入的年份过早或者月份不规范,无法查询"<<endl;
return 0;
}
else
{
//先确定本年份第一天是1900年后第几天
int nian=1900;//年份累加直到现在这一年
for(nian=1900;nian<a;nian++)
{
if(rui(nian))
day+=366;
else
day+=365;
}
int yue=0;
for(yue=1;yue<=b;yue++)
{
switch(yue)
{
case 1:day+=0;break;
case 3:
{
if(rui(a))
day+=29;
else
day+=28;
}break;
case 5:day+=30;break;
case 7:day+=30;break;
case 10:day+=30;break;
case 12:day+=30;break;
default:day+=31;break;
}
}
}
return 1;
}
void print()
{
day=(day+1)%7;
cout<<"the first day of this month is:";
switch(day)
{
case 0:cout<<"SUN"<<endl;break;
case 1:cout<<"MON"<<endl;break;
case 2:cout<<"TUE"<<endl;break;
case 3:cout<<"WED"<<endl;break;
case 4:cout<<"THU"<<endl;break;
case 5:cout<<"FRI"<<endl;break;
case 6:cout<<"SAT"<<endl;break;
}
int i=0;
int j=0;
int k=0;
switch(month)
{
case 2:
{
if(rui(year))
k+=29;
else
k+=28;
}break;
case 4:k+=30;break;
case 6:k+=30;break;
case 9:k+=30;break;
case 11:k+=30;break;
default:k+=31;break;
}
cout<<year<<"年"<<month<<"月月历"<<endl;
cout<<setw(6)<<"SUN"<<setw(6)<<"MON"<<setw(6)<<"TUES"<<setw(6)<<"WED"<<setw(6)<<"THU"<<setw(6)<<"FRI"<<setw(6)<<"SAT"<<endl;
for(i=1;i<=k;i++)
{
if(i==1)
{
for(j=0;j<day;j++)
{
cout<<setw(6)<<" ";
}
cout<<setw(6)<<i;
}
else
{
cout<<setw(6)<<i;
}
if(day%7==6)
cout<<endl;
day++;
}
cout<<endl;
}
上一个:c语言gets()、puts()
下一个:在c语言中 stream是什么函数?