问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

编写万年历C语言高手进

发布网友 发布时间:2022-04-23 05:26

我来回答

1个回答

热心网友 时间:2023-11-04 22:02

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

enum{Sunday, Monday, Tuesday, Wednesday,
Thursday, Friday, Saturday};/*0,1,2....*/

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();
}

/*************************************************
函数名称:M_GetYear

函数功能:输入一个年份

被本函数调用的函数清单:无

函数返回值:(int)
*************************************************/
int M_GetYear(void)
{
int year;

while(TRUE)
{
printf("(大于1900)请输入年份 : ");
scanf("%d", &year);
if(year > 1900)/*计人最多活106岁*/
{
return year;
}
}
}

/*************************************************
函数名称:M_PrintMonthNum

函数功能:调用每个月份

被本函数调用的函数清单:M_PrintMonth

输入参数:year

函数返回值:(void)
**************************************************/
void M_PrintMonthNum(int year)
{
int month;

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

/*************************************************
函数名称:M_PrintMonth

函数功能:打印万年历

被本函数调用的函数清单:M_MonthName,M_YeFirstMonthDay
,M_BlankUnit..

调用本函数的函数清单:M_PrintMonthNum

输入参数:month, year

函数返回值:(void)
**************************************************/
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");
}

/*************************************************
函数名称:MonthName

函数功能:返回每个月份的英文

调用本函数的函数清单:M_PrintMonth

输入参数:month

函数返回值:(char)
**************************************************/
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];
}

/*************************************************
函数名称:M_MonthDays

函数功能:返回每个月份的天数

被本函数调用的函数清单:IsLeapYear

调用本函数的函数清单:M_PrintMonth, M_YeFirstMonthDay

输入参数:year, month

函数返回值:(int)
**************************************************/
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;
}
}

/*************************************************
函数名称:IsLeapYear

函数功能:返回是否是闰年的bool值

调用本函数的函数清单:M_MonthDays

输入参数:year

函数返回值:(int,返回bool值1或0)
**************************************************/
int M_IsLeapYear(int year)
{
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}

/*************************************************
函数名称:M_YeFirstMonthDay

函数功能:年份第一个月第一天是星期几,开头enum
从Sunday(0开始),则从(weekday + 1) %7,weekday
是过几天后,能推出几天后就是星期几了,后面依次类推

被本函数调用的函数清单:M_MonthDays

调用本函数的函数清单:M_PrintMonth

输入参数:year, month

函数返回值:(int)
**************************************************/
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))/* 如果是闰年就加1*/
{
weekday = (weekday + 1) % 7;
}
}

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

return weekday;
}

/*************************************************
函数名称:M_BlankUnit

函数功能:年份第一个月第一天星期几就要空几个空格

调用本函数的函数清单:M_PrintMonth

输入参数:weekday

函数返回值:(void)
**************************************************/
void M_BlankUnit(int weekday)
{
int i;

for(i = 0; i < weekday; i++)
{
printf(" ");
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 笔记本电脑如何调亮屏幕亮度 大伙说说洗衣机要不要带烘干好 热烘干洗衣机怎么样 ef英语哪个好 给出年、月、日,请编写函数sum_day(int yea,int month,int day)计算该日是该年的第几天 使用指针数组,编写一个通用的英文月份名显示函数 void display(int month) 给出日期求星期(用C语言编程) 用C++定义一个结构体用于存储年、月、日数据,并定义函数用于求两个日期之间的天数。 java数组问题;int month[][]=new int[2][3]; 编写函数int Days(int year,int month),根据年份和月份可以获取该年该月有多少天 用int和month函数算季度例如Int(month(A2+2&#47;3)),请问A2后面加减是什么意思? Cache中文名称是什么 给你用日语怎么说?? 日语“你叫什么名字”怎么说? 你 字用日语怎么说 你日语怎么说? 请问日文“我”,“你”,“他” 怎么说? 用日语“你”怎么说? 你用日语怎么说 日语 你 怎么说 你,用日语怎么说,要平假名 日语的&quot;你&quot;怎么说? 你 用日语怎么说 你用日语怎么说? 函数公式=“第”&INT((MONTH(A2+2)/3)&“季度”是什么意思? 为什么用INT和month函数求季度,会求出个第五季度啊&#128561; 应该是第一季度才对 c语言 用库函数计算两日期相差的天数 //编写函数得到某年一个月的天数 月还款额计算公式的编程题 =&quot;第&quot;&int(1+(month(a3)-1)/3)&&quot;季度&quot;怎么解释 用int Dayo Year(int year,int month,int day);这个函数原型实现输入某年某月某 将出生年月换算成年龄的函数是什么 Excel表格中,在原有日期数据上自动加上1个月的函数该怎么设定,求解 计算机二级office int公式,让算几月是第几季度,这个怎么做啊 C++代码,Tdate::Tdate(int m,int d,int y):month(m),day(d)月和天怎么定义的,求解释,多谢 锁定任务栏是什么意思? 锁定任务栏有什么作用? WIN7锁定任务栏是什么意思? 请问锁定任务栏是什么意思 什么是锁定任务栏? 锁定任务栏是什么意思?为什么我的任务栏不会自动隐藏呢? 淘宝密码忘了怎么办,绑定的手机号换了? 电脑桌面的锁定任务栏是什么意思? “控制面板—锁定任务栏”是什么意思