急:C++程序设计, 万年历:要求输入年份,输出该年各月的日历 ,谢谢各位大大了
3个回答
展开全部
计算每年的第一天是周几,这个道理很简单
400年的天数刚好是7的倍数,所以只求余下的那些年的天数就可
还有一点就是每年365天,364是7的倍数,所以一年多出一天,在加上闰年的多出来的那一天
int year(int ye)
{
int y=ye%400;
int i;
int dat=y-1;
for(i=1;i<y;i++)
if(y%4==0&&y%100!=0)
day+=1;
return day%7;
}
这个就是每年的第一天是周几
那么打印就可以了
设置一个全局变量数组
int c[12]={31,28,31,30,31,30,31,31,30,31,30,31}
这个在主函数中用if判断这一年是否是闰年来改变二月份的天数
接着打印就可以了
void pr(int k) //这里传递这一年的第一天是周几,也就是year函数求出的那个值
{
int i,j;
for(i=0;i<12;i++)
{
printf("周日 周一 周二 周三 周四 周五 周六\n");
for(j=0;j<k;j++) //这里是打印前面的空格
printf(" ");
for(j=1;j<c[i];j++)
{
printf("%4d",j);
if((k+i)%7==0) //这里判断是否换行
printf("\n");
}
k=(k+c[i])%7; //这个就是求出下一个月的第一天是周几
}
}
主函数就很简单了
main()
{
int yea,m;
scanf("%d",&yea);
if(yea%4==0&&(yea%400==0||yea%100!=0)) //这个判断闰年的公式可能不对,自己查一下
c[1]=29;
pr(year(yea));
}
400年的天数刚好是7的倍数,所以只求余下的那些年的天数就可
还有一点就是每年365天,364是7的倍数,所以一年多出一天,在加上闰年的多出来的那一天
int year(int ye)
{
int y=ye%400;
int i;
int dat=y-1;
for(i=1;i<y;i++)
if(y%4==0&&y%100!=0)
day+=1;
return day%7;
}
这个就是每年的第一天是周几
那么打印就可以了
设置一个全局变量数组
int c[12]={31,28,31,30,31,30,31,31,30,31,30,31}
这个在主函数中用if判断这一年是否是闰年来改变二月份的天数
接着打印就可以了
void pr(int k) //这里传递这一年的第一天是周几,也就是year函数求出的那个值
{
int i,j;
for(i=0;i<12;i++)
{
printf("周日 周一 周二 周三 周四 周五 周六\n");
for(j=0;j<k;j++) //这里是打印前面的空格
printf(" ");
for(j=1;j<c[i];j++)
{
printf("%4d",j);
if((k+i)%7==0) //这里判断是否换行
printf("\n");
}
k=(k+c[i])%7; //这个就是求出下一个月的第一天是周几
}
}
主函数就很简单了
main()
{
int yea,m;
scanf("%d",&yea);
if(yea%4==0&&(yea%400==0||yea%100!=0)) //这个判断闰年的公式可能不对,自己查一下
c[1]=29;
pr(year(yea));
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询