编写万年历c语言高手进
#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_**leapyear(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
函数功能:返回每个月份的天数
被本函数调用的函数清单:**leapyear
调用本函数的函数清单:m_printmonth, m_yefirstmonthday
输入参数:year, month
函数返回值:(int)
**************************************************/
int m_monthdays(int year, int month)
{
switch(month)
{
case 2 :
if(m_**leapyear(year))/* 如果是闰年*/
{
return 29;
}
return 28;
case 4 : case 6 : case 9 : case 11 :
return 30;
default :
return 31;
}
}
/*************************************************
函数名称:**leapyear
函数功能:返回是否是闰年的bool值
调用本函数的函数清单:m_monthdays
输入参数:year
函数返回值:(int,返回bool值1或0)
**************************************************/
int m_**leapyear(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_**leapyear(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(" ");
}
}
#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_**leapyear(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
函数功能:返回每个月份的天数
被本函数调用的函数清单:**leapyear
调用本函数的函数清单:m_printmonth, m_yefirstmonthday
输入参数:year, month
函数返回值:(int)
**************************************************/
int m_monthdays(int year, int month)
{
switch(month)
{
case 2 :
if(m_**leapyear(year))/* 如果是闰年*/
{
return 29;
}
return 28;
case 4 : case 6 : case 9 : case 11 :
return 30;
default :
return 31;
}
}
/*************************************************
函数名称:**leapyear
函数功能:返回是否是闰年的bool值
调用本函数的函数清单:m_monthdays
输入参数:year
函数返回值:(int,返回bool值1或0)
**************************************************/
int m_**leapyear(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_**leapyear(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(" ");
}
}
佚名
2024-11-16 02:35:58
类似问题(10)
-
佚名2024-11-16 08:14:18
问c语言万年历程序设计
答功能要求:模仿现实生活中的挂历. 当前页以系统当前日期的月份为准显...答:#include int leap (int year) {if(year%4==0...
-
佚名2024-11-16 08:00:00
问用c语言编写万年历
答#include <stdio.h>#include <process.h>int day_s();int year_s();int week_s(...
-
佚名2024-11-16 08:00:00
问c语言万年历程序
答出现无限递归的问题,我提供的头文件是不会有这样的问题的,请查看是否有递归调用的问题,同时,检查项目设置属性是否正确。另附原始头文件如下:#ifndef _hel...
-
佚名2024-11-16 08:00:00
问万年历c语言编程
答#include<iostream> using namespacestd; const intmon_day[2][12]={31,28,31,...
-
佚名2024-11-16 08:00:00
问用c语言编程万年历,可以显示时间的,越复杂越好。
答#include<stdio.h>#include<time.h> int leap (int year)//判断闰年 { if(year...
-
佚名2024-11-16 08:00:00
问万年历c语言编程全过程
答#include<stdio.h>#include<windows.h>void main(){char ans;do{int year,month...
-
佚名2024-11-16 08:00:00
问万年历怎么用c#编写
答有现成的控件,干吗给自己找麻烦自己编写?
-
佚名2024-11-16 08:00:00
问用c语言怎么编写这个万年历
答核心算法:星期(0~6)=(年份系数+月份系数+日期)%7;其中,年份系数我以2007年做参照,已知2007年,年份系数是0,往前往后分别是递减和递增。增减规律...
-
佚名2024-11-16 08:00:00
问关于万年历的c语言编程 第一次编这种大程序 不怎么懂 望有高手教教
答大哥你大几了?貌似这个不难吧。。注意一下格式的输出应该就很ok了
-
佚名2024-11-16 08:00:00
问c语言万年历程序
答已经编译运行确认过。#include <stdio.h> #include <stdlib.h> int leap(int); /*判断是否为闰年*...
风水
起名
网名
- 1 个性QQ网名排行榜
- 2 个性姐妹两个字网名大全
- 3 比较帅的三国网名
- 4 带夫人两字的网名
- 5 有带君字的3字qq昵称
- 6 高智商群昵称
- 7 qq昵称女生霸气二字
- 8 微信 昵称出特效
- 9 dnf角色昵称违规
- 10 淘宝昵称女生大全2015款
说说
- 1 求知己的个性签名
- 2 霸气个性签名套路
- 3 手机qq动态变成签名
- 4 qq背景签名图
- 5 无锡梅园说说
- 6 讨厌我干不掉我的说说
- 7 有些说说不能置顶
- 8 女室友征婚的说说
- 9 病假结束回岗位的说说
- 10 打呼噜舍友 说说