永发信息网

c语言万年历

答案:1  悬赏:10  手机版
解决时间 2021-05-08 03:26
要求既可以打印年历又可以打印月历
最佳答案

#include <stdio.h>
#include <stdlib.h>
#define TRUE 1

enum{Sunday, Monday, Tuesday, Wednesday,
Thursday, Friday, Saturday};

int M_GetYear(void);
void M_PrintMonthNum(int year);
void M_PrintMonth(int month, int year);
char *M_MonthName(int month);
int M_MonthDays(int year, int month);
int M_IsLeapYear(int year);
int M_YeFirstMonthDay(int year, int month);
void M_BlankUnit(int weekday);
int main(void)
{
int year;

year = M_GetYear();

M_PrintMonthNum(year);

getch();
}


int M_GetYear(void)
{
int year;

while(TRUE)
{
printf("(大于1900)请输入年份 : ");
scanf("%d", &year);
if(year > 1900)
{
return year;
}
}
}


void M_PrintMonthNum(int year)
{
int month;

for(month = 1; month <= 12; month++)
{
M_PrintMonth(month, year);
printf("\n");
}
}


void M_PrintMonth(int month, int year)
{
int weekday, ndays, day;

printf(" %s", M_MonthName(month));
printf("\n Su Mo Tu We Th Fr Sa\n");

ndays = M_MonthDays(year, month);

weekday = M_YeFirstMonthDay(year, month);

M_BlankUnit(weekday);

for(day = 1; day <= ndays; day++)
{
printf(" %2d", day);

if(weekday == Saturday)
{
printf("\n");
}
weekday = (weekday + 1) % 7;
}

if(weekday != Sunday)
printf("\n");
}


char *M_MonthName(int month)
{
char *name[] = {
"Illegal month",
"January", "February", "March",
"April", "May", "June",
"July", "August", "September",
"October", "November", "December"
};

return (month < 1 || month > 12) ? name[1] : name[month];
}


int M_MonthDays(int year, int month)
{
switch(month)
{
case 2 :
if(M_IsLeapYear(year))
{
return 29;
}
return 28;
case 4 : case 6 : case 9 : case 11 :
return 30;

default :
return 31;
}
}


int M_IsLeapYear(int year)
{
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}


int M_YeFirstMonthDay(int year, int month)
{
int i, weekday;

weekday = Monday;
for(i = 1900; i < year; i++)
{
weekday = (weekday + 365) % 7;

if(M_IsLeapYear(i))
{
weekday = (weekday + 1) % 7;
}
}

for(i = 1; i < month; i++)
{
weekday = (weekday + M_MonthDays(year, i)) % 7;
}

return weekday;
}


void M_BlankUnit(int weekday)
{
int i;

for(i = 0; i < weekday; i++)
{
printf(" ");
}
}


懒得写,百度上面找的,还真找着了

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
魔法增效和魔法抑制有什么区别
手机WAP下载MP3有好地址吗?
在诗句中带有名、国、欢、倾、相、花、两的
萍缘旅社地址在什么地方,想过去办事
想求助一下 克鲁兹这车 保值不?
啊怎么组词,颗字的组词三个
我要做下睑凹陷矫正整形手术,不知道效果怎么
玫瑰花代表爱情、是因为它的花瓣还是因为它的
帮取个名!姓张!听起来要很冷漠但又不会别扭
怎样去了解自己心爱的女人?
孕妇肚子为什么有两个硬疙瘩
怎样才能让2岁多的小孩继续喝奶粉?
诺基亚下载什麽软件可以看电子书
我要好听的空间名?想想办法?…
请问中国触摸屏前10大厂商有哪些?
推荐资讯
这个季节用什么洗面奶比较好?
生活照怎样拍更上镜
齐红图文地址在哪,我要去那里办事
为什么晚上老是做梦每天如此,而且白天也如此
生理盐水是怎么配的?
十七岁女生生理期一个月不好是怎么回事?
代理货源 开网店的货源 淘宝网店货源 网店货
爱情与面包你要哪一 样???????
在哪里下载系统比较好,word字体哪里下载比较
09本如何去掉自己的自动回复
usb被保护怎么解除
我的系统这是怎么了?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?