用c语言编写一个年历,求代码,如果有注释就更感谢了

功能要求:输入年份,显示该年所有月份和日期(以日历形式,应该是矩阵形式),把当年假期用红色标注,若该年为闰年,年份用红色标出(主要是不知道怎么用红色标注)

第1个回答  2013-03-20
/*
打印万年历
要求:每一横排打印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;
}追问

非常感谢你刚才的解答,我想问刚才的问题能不能把每年的阳历节假日,比如元旦、五一、十一以及周六周日用红色字体标出呢?还有如果该年为闰年,能不能以红色字体标出?

相似回答