求一个用c语言编写的万年历程序
1个回答
展开全部
/*
打印万年历
要求:每一横排打印X个月,整数X可选取1,2,3,4,6五个选项。
可能用到的公式:y年元旦是星期W(取值为0-6,其中0为周日)
则: w=(y+(y-1)/4-(y-1)/100+(y-1)/400)%7;
*/
#include<stdio.h>
int fun(int y)//判断是否是闰年,闰年返回1
{
if(y%4==0 && y%100!=0 || y%400==0)
return 1;
return 0;
}
int main()
{
int y,w;//y年,w存储该年的1月1日是星期几
int i,a,d;
int m[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};//存储每月的天数,如m[3] = 31;表示3月份有31天
char title[] = "Sun Mon Tue Wed Thu Fri Sat ";//打印标题
while(1)//循环接收用户输入的年份
{
printf("Please input year:");
scanf("%d",&y);
if(fun(y))//若该年为闰年,将2月份的天数设置为29
m[2] = 29;
w=(y+(y-1)/4-(y-1)/100+(y-1)/400)%7;//利用公式计算该年元旦是星期几,0为周日
printf("======year:%d======\n",y);
for(i=1;i<=12;i++)//循环控制12个月份
{
printf("\n=======month:%d========\n",i);
puts(title);
a = 0;//用于控制每周输出7天,换行
while(a<w)//如果a小于元旦或上月最后一天的星期几
{
printf(" ");//打印空格,控制格式
a++;
}
for(d=1;d<=m[i];d++)//打印i月份的天数
{
printf("%3d ",d);
if(++a%7==0)//控制换行
printf("\n");
}
w = a%7;//设置第i月份的最后一天w,0为周日
}
printf("\n");
}
return 0;
}
打印万年历
要求:每一横排打印X个月,整数X可选取1,2,3,4,6五个选项。
可能用到的公式:y年元旦是星期W(取值为0-6,其中0为周日)
则: w=(y+(y-1)/4-(y-1)/100+(y-1)/400)%7;
*/
#include<stdio.h>
int fun(int y)//判断是否是闰年,闰年返回1
{
if(y%4==0 && y%100!=0 || y%400==0)
return 1;
return 0;
}
int main()
{
int y,w;//y年,w存储该年的1月1日是星期几
int i,a,d;
int m[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};//存储每月的天数,如m[3] = 31;表示3月份有31天
char title[] = "Sun Mon Tue Wed Thu Fri Sat ";//打印标题
while(1)//循环接收用户输入的年份
{
printf("Please input year:");
scanf("%d",&y);
if(fun(y))//若该年为闰年,将2月份的天数设置为29
m[2] = 29;
w=(y+(y-1)/4-(y-1)/100+(y-1)/400)%7;//利用公式计算该年元旦是星期几,0为周日
printf("======year:%d======\n",y);
for(i=1;i<=12;i++)//循环控制12个月份
{
printf("\n=======month:%d========\n",i);
puts(title);
a = 0;//用于控制每周输出7天,换行
while(a<w)//如果a小于元旦或上月最后一天的星期几
{
printf(" ");//打印空格,控制格式
a++;
}
for(d=1;d<=m[i];d++)//打印i月份的天数
{
printf("%3d ",d);
if(++a%7==0)//控制换行
printf("\n");
}
w = a%7;//设置第i月份的最后一天w,0为周日
}
printf("\n");
}
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询