北邮同学C语言题啊~我哭啊~在线等答案啊

打印形式
Input the year and month<yyyy-mm>:2006-12
2006-12
Sun. Mon. Tue. Wed. Thu. Fri. Sat.
1 2
题目:打印日历:输入年份和月份,输出该月日历。
提示:
假设公元0001年1月1日到第x年12月31好的总天数为days天,则days的计算公式如下:
days=x*365+x/400+x/4-x/100
判断第days天时星期几:
WeekDay=days%7
(weekDay值为0,表示周日,weekDay为1~6,分别表示周一到周六)
int GetWeekDay(int year,int month,int day)
函数功能:求year年month月day日时星期几
参数:要求天数的年和月。
返回值:0~6,0表示周日,1~6表示周一到周六
int GetMonthDays(int year,int month)
函数功能:求year年month月共有几天;
参数:要求天数的年和月
返回值:该月的天数
void PrintMonthCalender(int startDay,int days)
函数功能:打印某月日历
参数:startDay表示该月一号是星期几,startDay取值为0~6,其中0代表周日,1~6代表周一到周六,days:该月共有几天
返回值:无
int CheckLeap(int year)
函数功能:检测是否是闰年。
参数:year:要检测的年
返回值:0或1,0不是闰年,1是闰年
额 最好就用那几个函数嘛!最好不要哦!谢谢哈!

//---------------------------------------------------------------------------

#include <stdio.h>

int CheckLeap(int year)
{
return ((year%4==0)&&(year%100)||(year%400==0));
}
int GetWeekDay(int year,int month,int day)
{
if (month<3) {
month+=12;
year--;
}
return (day+2*month+3*(month+1)/5+year+year/4-year/100+year/400+1) % 7 ;
}

int GetMonthDays(int year,int month)
{
switch (month) {

default:
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:return 31;break;
case 4:
case 6:
case 9:
case 11:return 30;break;
case 2:return CheckLeap(year)?29:28;break;
}
}
void PrintMonthCalender(int startDay,int days)
{
int i,j=0;

printf("Sun.\tMon.\tTue.\tWed.\tThu.\tFri.\tSat.\n");
for (i = 0; i<startDay; i++) {
putchar('\t');
j++;
}
for (i=1; i<=days; j++,i++) {
if (j&&j%7==0) {
putchar('\n');
}
printf("%d\t",i);

}

}

int main(int argc, char* argv[])
{
int year,month;
printf("Input the year and month<yyyy-mm>:");
scanf("%d-%d",&year,&month);
printf("\t\t%d-%02d\n",year,month);
PrintMonthCalender(GetWeekDay(year,month,1),GetMonthDays(year,month));
return 0;
}
//---------------------------------------------------------------------------
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-11-14
搞定了,可是贴不上去。
#include <stdio.h>

int monthdy[12] = {
31, 28, 31,
30, 31, 30,
31, 31, 30,
31, 30, 31
};

struct sdate
{
int year;
int month;
int day;
};

/* 判断闰年 */
int leap(unsigned year)
{
if((year%4==0&&year%100!=0)||year%400==0)
return 1;
else return 0;
}
第2个回答  2009-11-14
这么难,才100分
第3个回答  2009-11-14
不懂