万年历(C语言代码实现)
来源:互联网 发布:java web方面的书籍 编辑:程序博客网 时间:2024/04/20 03:50
学了一个学期的C,由于C语言基础不扎实,所以重新学习了一次。参考了一部分网上代码,按照框架思路自己再编写了程序代码。只是简单万年历功能的实现。一些不足之处,还请多多包涵~~
#include <stdio.h>#include <windows.h> enum weekday { Sun, Mon, Jue, Wed, Thu, Fri, Sat };enum month { January = 1, February, Match, Apirl, May, June, July, August, September, October, November, December };void color(int a) //颜色函数 {SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), a);}void printMonthHeader(void) //输出日历每个月份的表头{printf("周日周一周二周三周四 周五 周六\n");}int judgeYear(int Y) //判断平年闰年,若为平年则为 0,闰年为 1{enum differentYear{ nonleapYear, leapYear };return ( Y % ( Y % 100 ? 4:400) ? nonleapYear : leapYear);}void printMonth( int firstDay, int days ) //输出每个月份的日历表,firstDay是每个月的第一天,days是一个月的总天数{int position = firstDay;int i;printMonthHeader();for( i = 0; i < position; ++i ){printf("");}for( i = 1; i <= days; ++i ){position = (++position) % 7;printf("%-7d", i);if(position == 0)printf("\n");}printf("\n");}int firstDayOfYear(const int getYear) //计算一年中第一天是周几 {int weekDay;weekDay = ( (getYear - 1) + (getYear - 1) / 4 - (getYear / 100) + (getYear / 400) + 1 ) % 7;return weekDay;}void printfYear(const int year){weekday yDay = (enum weekday)(firstDayOfYear(year));//计算一年的第一天是周几int aDay = judgeYear(year);//判断平年闰年,若为平年则为0,闰年为1int monDays[13];//每个月的天数int monFirstday[13];//计算每个月的第一天是周几monDays[January] = 31;monDays[February]=28+aDay;monDays[Match]=31; monDays[Apirl]=30;monDays[May]=31;monDays[June]=30; monDays[July]=31;monDays[August]=31;monDays[September]=30; monDays[October]=31;monDays[November]=30;monDays[December]=31; monFirstday[0]=0; monFirstday[January] = yDay; monFirstday[February] = ((monFirstday[January] +monDays[January] )%7); monFirstday[Match] = ((monFirstday[February] +monDays[February] )%7); monFirstday[Apirl] = ((monFirstday[Match] +monDays[Match] )%7); monFirstday[May] = ((monFirstday[Apirl] +monDays[Apirl] )%7); monFirstday[June] = ((monFirstday[May] +monDays[May] )%7); monFirstday[July] = ((monFirstday[June] +monDays[June] )%7); monFirstday[August] = ((monFirstday[July] +monDays[July] )%7); monFirstday[September] = ((monFirstday[August] +monDays[August] )%7); monFirstday[October] = ((monFirstday[September] +monDays[September] )%7); monFirstday[November] = ((monFirstday[October] +monDays[October] )%7); monFirstday[December] = ((monFirstday[November] +monDays[November] )%7); int j;for( j = January; j <= December; ++j ){printf("\n*******************************************************************\n\n");printf(" %d %d \n\n", year, j);printMonth(monFirstday[j], monDays[j]);printf("\n");}return;}int main(){color(11);int quit = 0;int year = 0;do{printf("请输入您想查询的年份(选择0退出): ");scanf("%d", &year);printf("\n");if( year == 0 )quit = 1;elseprintfYear(year);}while(!quit);return 0;}//大概每四年一个闰年,所以可计算:// 公元一年到公元 year-1 年内的闰年个数 = (year - 1) / 4//但是每一百年要扣掉一个闰年,所以修正后:// 公元一年到公元 year-1 年内的闰年个数 = (year - 1) / 4 - (year / 100) //其实每四百年又要增加一个闰年,再次修正:// 公元一年到公元 year-1 年内的闰年个数 = (year - 1) / 4 - (year / 100) + (year / 400)//一年的第一天距离起始天的差是:// (year - 1)*365 + (公元一年到公元year-1年内的闰年个数(每个闰年多一天))//故得到// (year - 1)*365 + (year - 1) / 4 - (year / 100) + (year / 400)//这天是周几// [(year - 1)*365 + (year - 1) / 4 - (year / 100) + (year / 400)] % 7 + 1// = [(year - 1)*365 + (year - 1) / 4 - (year / 100) + (year / 400) + 1] % 7 // = [(year - 1)*364 + (year - 1) + (year - 1) / 4 - (year / 100) + (year / 400) + 1] % 7// = [ (year - 1) + (year - 1) / 4 - (year / 100) + (year / 400) + 1 ] % 7
1 0
- 万年历(C语言代码实现)
- 万年历C语言代码
- 万年历C语言代码
- C语言实现:万年历
- C语言实现万年历
- c语言实现万年历
- C语言实现万年历
- c语言实现万年历
- C语言实现万年历
- C语言实现万年历
- C语言实现万年历
- C语言实现:万年历(TR4.2)
- C语言实现万年历程序
- 万年历系统(C语言)
- c语言万年历(源代码)
- 万年历代码(C++实现)
- C语言实现简单的万年历
- C语言万年历.c
- 模拟器使用
- zoj3494 BCD Code ac自动机+数位dp
- Intent中的四个重要属性——Action、Data、Category、Extras
- 抽象类(Abstract) && 接口(Interface)区别比较
- osgearth加载请求节点优化方案
- 万年历(C语言代码实现)
- Python os.system
- mac下myEclipse安装及配置
- 就这样开始吧
- UIColor为0~1的小数
- Visual Studio 2013 手动缩进
- Docker的镜像和容器的区别
- PCI总线驱动
- centos SSH免密码登录 使用公钥