求一篇c语言的万年历程序,要求输入年份和月份就会自动打印出当月的日历,且要用到调用函数。谢谢。

 我来答
cpucash
2012-12-22 · TA获得超过1584个赞
知道小有建树答主
回答量:1457
采纳率:66%
帮助的人:970万
展开全部
不难
先说道理
公元一年一月一日是周一,计算到这一天有多少天再除以7,余下的余数就是周几
不过这个可以简化,一年365天,364是7的倍数,那么下一年的第一天就是这一年加上一天
闰年再加上一天。这样就一个循环判断闰年即可
还可以简化一下,400年是一个轮回。400年多出400天,再加上闰年的个数,也就是97个,这样400+97=497,这个也是7的倍数。所以就计算400年以内的就可以
子函数这样
int ye(int year)
{
int y=year%400;
int i,day=y;
for(i=0;i<y;i++)
if(y%4==0&&y%100!=0)
day++;
return day%7;
}
这个是计算year的第一天是周几的

int m[12]={31,28,31,30,31,30,31,31,30,31,30,31}; //这个做为全局变量来用
int mo(int year,int mouth)
{
int i,day=ye(year);
if(闰年判断)
m[1]=29;
else
m[1]=28;
for(i=0;i<nouth-1)
day+=m[i];
return day%7;
}
这个是计算year年mouth月的第一天是周几的
这两个子函数返回值可能差一天,自己调整一下吧
打印子函数
void pr(int mm,int x)
{
int i;
printf("%d\n日 一 二 三 四 五 六\n",mm);
for(i=0;i<k;i++)
printf(" "); //打印前面的空缺
for(i=1;i<=m[mm-1];i++)
{
printf("%4d',i);
k++;
if(k==7)
{
printf("\n");
k=0;
}
}
if(k!=0)
printf("\n");
}

主函数
main()
{
int y,m,k;
scanf("%d %d",&y,&m);
k=mo(y,m);
pr(m,k);
}
追问
不好意思我还想问一下,那么要打印月的第一天离1800年1月1日的总天数又要怎么求呢?O(∩_∩)O谢谢了。。
追答
计算天数的问题,就是用循环来做

一般来说,两个日子之间的天数就是求三个数
一个是前面的日子这一年省下的天数,
一个是中间年的天数
后面日子到一月一日的天数
这三个天数相加就可以

这三个数都可以做成子函数
第一个和第三个用月份当循环条件,最后加上日所占的天数
中间年这个用年做循环条件,判断闰年,加一天,所有的用365乘以年数即可
百度网友594d205f21
2012-12-22 · TA获得超过271个赞
知道小有建树答主
回答量:769
采纳率:0%
帮助的人:342万
展开全部
楼上正解
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式