万年历星期的算法(C语言)

合集下载

计算星期程序

计算星期程序
星期二
输入0退出,其他继续:d
2008,1,1
星期二
输入0退出,其他继续:l
2008,8,8
星期五
输入0退出,其他继续:0
请按任意键继续. . .
注:用来算现在真实日期的星期是没有问题的。原理是根据已知公元1年1月1日的星期数来推算。如果在你的题目中约定了某天是星期几,你要注意那天的星期是否跟真实的星期相同,如果不同,需要考虑相差几天!
由于我们要计算的是当前要计算的年之前的闰年数,所以要将年减1,得到了如下的公式:
w = [d-1+y + (y-1)/4-(y-1)/100+(y-1)/400] % 7 -----公式⑵
现在,我们得到了按年扩展的公式⑵,用这个公式可以计算任一年的1月份的星期
四、扩展到其它月
考虑这个问题颇费了一翻脑筋,后来还是按前面的方法大胆假才找到突破口。
#include <stdio.h>
void CaculateWeekday(int y, int m, int d)
{
int w; //代表星期几
if (m==1 || m==2)
{
m += 12;
y--;
}
w = (d+1 + 2*m + 3*(m+1)/5 + y + y/4 - y/100 + y/400)%7;
flushall();
printf("按 Esc 键退出,其他键继续!");
ch = getch();
printf("\n");
flushall();

单片机万年历C语言程序完整

单片机万年历C语言程序完整
sbit out = P2^3; //立刻跳出调整模式按钮
sbit DQ = P3^0;
char done,count,temp,flag,up_flag,down_flag,t_value;
uchar TempBuffer[5],week_value[2];
void show_time(); //液晶显示程序
unsigned char Day;
unsigned char Month;
unsigned char Year;
unsigned char DateString[11];
unsigned char TimeString[9];
}SYSTEMTIME;//定义的时间类型
#define AM(X)X
#define PM(X)(X+12)//转成24小时制
{
unsigned char ucData;
DS1302_RST = 0;
DS1302_CLK = 0;
DS1302_RST = 1;
DS1302InputByte(ucAddr|0x01); //地址,命令
ucData = DS1302OutputByte(); //读1Byte数据
DS1302_CLK = 1;
#define DS1302_SECOND0x80 //时钟芯片的寄存器位置,存放时间
#define DS1302_MINUTE0x82
#define DS1302_HOUR0x84
#define DS1302_WEEK0x8A
#define DS1302_DAY0x86
#define DS1302_MONTH0x88
#define uchar unsigned char

用c语言编写万年历思路

用c语言编写万年历思路

用c语言编写万年历思路摘要:1.编写万年历的思路2.C 语言编程基础3.实现万年历的算法4.具体编写代码5.测试与优化正文:编写万年历的思路:万年历是一种能够显示任意一年中每月每日的日历,它可以方便地帮助人们查询日期和节日。

在C 语言中编写万年历需要运用一些基本的编程知识和算法。

本文将从编写万年历的思路、C 语言编程基础、实现万年历的算法、具体编写代码以及测试与优化等方面来介绍如何用C 语言编写万年历。

C 语言编程基础:在开始编写万年历之前,我们需要了解一些C 语言的基础知识,例如变量、循环、条件语句等。

C 语言是一种高级编程语言,它可以用来编写操作系统、编译器等各种应用程序。

C 语言具有语法简单、执行效率高的特点,因此在编写万年历时,我们可以选择使用C 语言来进行编程。

实现万年历的算法:万年历的实现需要运用一些基本的算法,例如计算平年和闰年的天数、计算每个月的天数等。

我们可以通过一个数组来存储每一年的天数信息,然后根据需要输出相应的日期。

在实现万年历的过程中,我们需要注意闰年的判断,根据闰年的规则,每4 年一闰,每100 年不闰,每400 年再闰。

具体编写代码:在具体编写代码时,我们需要按照一定的逻辑顺序进行编程。

首先,我们需要输入年份,然后根据年份计算出该年的天数信息。

接着,我们可以使用循环语句来逐月输出日期。

在输出日期时,我们需要注意每个月的天数,以及每个月的日期格式。

测试与优化:在编写完万年历程序后,我们需要对其进行测试和优化。

首先,我们可以通过输入一些年份来测试程序的正确性。

在测试过程中,我们需要注意程序的运行速度和正确性。

如果发现程序存在问题,我们需要及时进行优化和修改。

总之,用C 语言编写万年历需要掌握一定的编程基础和算法知识。

在编写程序时,我们需要注意代码的逻辑性和正确性,以便能够输出正确的日期信息。

万年历C语言报告范文1

万年历C语言报告范文1

万年历C语言报告范文1万年历实验报告---软件工程老师:班级:学号:姓名:-1-实验题目:编制一个万年历程序要求:输入一个年份(1-3000),然后显示12个月的月历,如屏幕显示不下,则应提供翻页功能。

一.实验目的通过实例使同学们掌握结构化数据流分析技术。

二.实验内容软件需求分析:1.总体而言,根据老师的要求来做一个万年历的C程序,要求分页输出每个月的月历,首先输入想要知道日历的年份,然后可按ENTER键逐月显示日历,这样就可以达到要求了。

3.求出一年中的第一天是周几(year+(year-1)/4-(year-1)/100+(year-1)/400)%7。

4.用FOR循环输出各月份的日历。

数据流图:软件设计与编码:实验完整代码:#include\longintf(intyear,intmonth){if(month<3)returnyear-1;elereturnyear;}longintg(intmonth){if(month<3)returnmonth+13;elereturnmonth+1;}longintn(intyear,intmonth,intday){return1461L某f(year,month)/4+153L某g(month)/5+day;}intw(intyear,intmonth,intday){return(int)((n(year,month,day)%7-621049L%7+7)%7);}intdate[12][6][7];intday_tbl[][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31, 29,31,30,31,30,31,31,30,31,30,31}};main(){intw,leap,i,j,k,wd,day;intyear;chartitle[]=\printf(\请输入您想要知道万年历的年份:\输入年某/canf(\输入年份值和掠过值后的回车某/w=w(year,1,1);for(k=0;k<7;k++)date[i][j][k]=0;/某日期表置0某/for(i=0;i<12;i++)/某一年十二个月某/-3-for(wd=0,day=1;day<=day_tbl[leap][i];day++){/某将第i+1月的日期填入日期表某/date[i][wd][w]=day;w=++w%7;/某每星期七天,以0至6计数某/if(w==0)wd++;/某日期表每七天一行,星期天开始新的一行某/}printf(\年的年历===========|\\n\for(i=0;i<12;i++){/某先测算第i+1月的最大星期数某/for(wd=0,k=0;k<7;k++)/某日期表的第六行有日期,则wd!=0某/wd+=date[i][5][k]+date[i+6][5][k];wd=wd6:5;put(\printf(\月%|\\n|\for(j=0;jprintf(\\for(k=0;k<7;k++)if(date[i][j][k])printf(\eleprintf(\\printf(\\printf(\}put(\canf(\键入回车输出下一个月的日历某/}put(\put(\按任意键退出...\getch();}截图:-4--5-三.总结1.实验内容总结经过运行和调试得到了想要的结果——“万年历”,任意输入一个年份能按当初设计的格式输出每个月份的日历。

C语言实训--万年历源代码

C语言实训--万年历源代码

C语言实训--万年历源代码# include#include#include#include#include# define YEAR 365int numday[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31}, {31,29,31,30,31,30,31,31,30,31,30,31}};int leap(int year);int calday(int y,int m);int counterdays(int year,int month,int day);int week(int year,int month,int day);int eachyeartotal(int year,int month,int day);int maxDay(int y,int month);void print(int y,int m,int w);void festival (int year,int month,int day);int IsLeap(int y);int guanli(int i);void rili(int year,int month);int rili1();void rili2();void rili3();void rili4();void rili5();void fan();void show(int year,int month,int date,int sec,int mini,int hour);int main(){int i;printf("***************************************\n"); printf("1.查询日历,输入年份:\n");printf("2.查询该月日历及对应星期,输入年份和月份:\n"); printf("3.查询星期几及节日,输入年月日:\n");printf("4.距您输入日期还有多少天,输入日期:\n"); printf("5.通过键盘上下控制不同年月日:\n");scanf("%d",&i);guanli(i);return 0;}int guanli(int i){switch(i){case 1:rili1();return main();case 2:rili2();return main();case 3:rili3();return main();case 4:rili4();return main();case 5:rili5();return main();}return 0;}int rili1(){int year;int n,i;printf("输入年份:");scanf("%d",&year);printf("the calendar of the year%d\n",year);printf("\n");printf("=============================\n"); for(i=1;i<13;i++){printf(" %d月份\n",i);rili(year,i);}n = leap(year);return 0;}void rili2(){int year,month,w;printf("输入年月:");scanf("%d%d",&year,&month);w=calday(year,month);print(year,month,w);}void rili3(){int year,month,day,number;printf("输入年月日:");scanf("%d%d%d",&year,&month,&day);festival(year,month,day);number= week(year,month,day);printf("星期%d",number);}void rili4(){int year,month,day;printf("输入年月日:");scanf("%d%d%d",&year,&month,&day); eachyeartotal( year,month,day);counterdays(year,month,day);}void rili5(){int year,month,date,sec,mini,hour;fan();show(year,month,date,sec,mini,hour);}int leap(int year){int n=(year%4==0 && year%100!=0 || year%100!=0); return n;}void rili(int year,int month){int i,day,first_day,flag,year1,year2;int temp = 6;flag =leap(year);year1=year/100;year2=year%100;if(year>2000){year1=year1-20;day = year1/4;day+=(YEAR+24)*year1+YEAR*year2+(year2-1)/4;if(year>2000)day++;switch(month){case 1:day; break;case 2:day+=31;break;case 3:day+=59+flag;break;case 4:day+=90+flag;break;case 5:day+=120+flag;break;case 6:day+=151+flag;break;case 7:day+=181+flag;break;case 8:day+=212+flag;break;case 9:day+=243+flag;break;case 10:day+=273+flag;break;case 11:day+=304+flag;break;case 12:day+=334+flag;break;}day+=temp;first_day=day%7;}else{year1 = 20-1-year;year2=100-year2-1;day+=(YEAR+24)*year1+YEAR*year2+year2/4; switch(month){case 12:day+=31;break;case 11:day+=61;break;case 10:day+=92;break;case 9:day+=122;break;case 8:day+=153;break;case 7:day+=184;break; case 6:day+=214;break; case 5:day+=245;break; case 4:day+=275;break; case 3:day+=306;break; case 2:day+=334+flag;break; case 1:day+=365+flag;break; }day-=temp;day = day%7;first_day=(7-day)%7;}switch(month){case 1:case 2:month=28+flag;break; case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:month=30;break; case 12:month =31;break;}for(i=1;i<4*first_day;i++) printf(" ");for(i=0;i<month;i++)< p="">{printf("%4d",i+1);if((first_day+i)%7==6)printf("\n");}printf("\n");printf("===============================\n");}///////////////////////////////////////////////////////////int counterdays(int year,int month,int day){int year1,days0,days1,month1,days,day1;time_t timep;struct tm*p;time(&timep);p=gmtime(&timep);year1=(1900+p->tm_year);month1=(1+p->tm_mon);day1=(p->tm_mday);days0=(year-1)*365 + (year-1)/4 - (year-1)/100 + (year-1)/400 +eachyeartotal (year,month,day);days1=(year1 - 1)*365+(year1-1)/4-(year1-1)/100 + (year1 - 1)/400 +eachyeartotal (year1,month1,day1);days=days0-days1;printf("\n今天距%d年%d月%d日还有%d天\n\n",year,month,day,days);return days;}int eachyeartotal(int year,int month,int day){int i,sum=0;for(i=1;i<month;i++)< p="">{sum+=maxDay(year,i);}sum+=day;return sum;}int IsLeap(int y){if(y%4==0 && y%100!=0 || y%400==0) return 1; else return 0;}int maxDay(int y,int month){int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};if(IsLeap(y))a[1]=29;return a[month-1];}///////////////////////////////////////void festival (int year,int month,int day){if (month==1 && day==1) printf (",这天是元旦");if (month==2 && day==14) printf (",这天是情人节"); if (month == 3)switch(day){case 8:printf (",这天是妇女节"); break;case 12:printf (",这天是植树节");}if (month==1 && day==1) printf (",这天是愚人节");if(month == 5)switch (day){case 1:printf(",这天是劳动节");break;case 4:printf(",这天是青年节");}if (month==6 && day==1) printf (",这天是儿童节");if (month==7 && day==1) printf (",这天是建党节");if (month==8 && day==1) printf (",这天是建军节");if (month==9 && day==10) printf (",这天是教师节");if (month==10 && day==1) printf (",这天是国庆节");printf("\n");}int week(int year,int month,int day){int number = (year-1)+(year-1)/4 - (year-1)/100+(year-1)/400+eachyeartotal(year,month,day);number = number%7;return number;}/////////////////////////////////////////////void print(int y,int m,int w){int i,l;printf("Calendar %d-%02d\n",y,m);printf("---------------------\n");printf("Su Mo Tu We Th Fr Sa \n");printf("---------------------\n");for (i=0;i<w;i++)< p=""> printf(" ");if (IsLeap(y))l=1;elsel=0;for (i=1;i<=numday[l][m-1];i++) {printf("%-3d",i);w++;if (w%7==0)printf("\n");}if (w%7) printf("\n");printf("---------------------\n"); }int calday(int y,int m){int d=0,w;while (y>1910){if (IsLeap(y)) d+=366;else d+=365;y--;}while (m>1){ --m;d+=numday[0][m-1];}w=(d+1)%7;return w;}//////////////////////////////////////////void show(int year,int month,int date,int sec,int mini,int hour) {const char month_str[][4]={"","Jan","Feb","Mar","Apl", "May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};const int month_day[]={0,31,28,31,30,31,30,31,31,30,31,30,31};int i,j,wdays,mdays,days;for(i=1,days=0;i<year;i++)< p="">{if(leap(i))days += 366;}else{days += 365;}}for(i=1;i<month;i++)< p="">{if(i==2 && leap(year)){days+=29;}else{days+=month_day[i];}}printf(" %s.%d.%d %d:%d:%d \n",month_str[month],date,year,hour,mini,sec);printf(" 一二三四五六日\n");wdays = days % 7;for( j = 0; j < wdays; j++){printf(" ");}if(month == 2 && leap(year)){mdays=29;}else{mdays= month_day[month];}for(i=1;i<=mdays;i++){if( i > 1 && days % 7 == 0 ){printf("\n");}printf("%4d",i);days=days+1; }printf("\n---------------------------\n\n\n");}{time_t rawtime;struct tm *info;int year,month,date,sec,mini,hour; char ch;time ( &rawtime );info = localtime ( &rawtime );year =info->tm_year + 1900; month =info->tm_mon + 1;date =info->tm_mday;hour =info->tm_hour;mini =info->tm_min;sec =info->tm_sec;while(1){show(year,month,date,sec,mini,hour); printf("↑......上一年\n\n");printf("↓......下一年\n\n");printf("←....前一个月\n\n");pr intf("→....后一个月\n\n");printf("Esc.......退出\n\n");ch=getch();switch(ch){case 27://Ecs exit(0);case -32://Navigatorch=getch();if(ch==77){//Rightyear+=(month==12)?1:0;month=month%12+1;}else if(ch==75){year-=(month==1)?1:0; month=(month-2+12)%12+1; }else if(ch==72)year--;else if(ch==80)year++;system("cls");}}</month;i++)<></year;i++)<></w;i++)<></month;i++)<></month;i++)<>。

C语言根据日期(年,月,日)判断星期几(使用基姆拉尔森计算公式)

C语言根据日期(年,月,日)判断星期几(使用基姆拉尔森计算公式)

C语⾔根据⽇期(年,⽉,⽇)判断星期⼏(使⽤基姆拉尔森计算公式)C语⾔根据⽇期判断星期⼏(使⽤基姆拉尔森计算公式)算法如下:基姆拉尔森计算公式W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7在公式中d表⽰⽇期中的⽇数,m表⽰⽉份数,y表⽰年数。

注意:在公式中有个与其他公式不同的地⽅:把⼀⽉和⼆⽉看成是上⼀年的⼗三⽉和⼗四⽉,例:如果是2004-1-10则换算成:2003-13-10来代⼊公式计算。

以公元元年为参考,公元元年1⽉1⽇为星期⼀程序如下:/*利⽤基姆拉尔森计算⽇期公式 w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)*/#include <stdio.h>const char * getWeekdayByYearday(int iY, int iM, int iD){int iWeekDay = -1;if (1 == iM || 2 == iM){iM += 12;iY--;}iWeekDay = (iD + 1 + 2 * iM + 3 * (iM + 1) / 5 + iY + iY / 4 - iY / 100 + iY / 400) % 7;switch(iWeekDay){case0 : return"Sunday"; break;case1 : return"Monday"; break;case2 : return"Tuesday"; break;case3 : return"Wednesday"; break;case4 : return"Thursday"; break;case5 : return"Friday"; break;case6 : return"Saturday"; break;default : return NULL; break;}return NULL;}int main(){int year,month,day;char ch='1';while(ch != '\033'){printf("\n请输⼊⽇期:\n格式为:1900,1,1\n");scanf("%d,%d,%d",&year,&month,&day);const char * p = getWeekdayByYearday(year, month, day);printf("WeekDay : %s\n", p);ch = getchar();printf("\n");}}运⾏效果:$ ./getweekdaybyday请输⼊⽇期:格式为:1900,1,12008,4,29WeekDay : Tuesday请输⼊⽇期:格式为:1900,1,12015,2,4WeekDay : Wednesday请输⼊⽇期:格式为:1900,1,1编者注:⽤来算现在真实⽇期的星期是没有问题的。

C语言课程设计万年历 完整版

C语言课程设计万年历  完整版

目录一引言 (2)二系统功能和数据说明 (3)一)功能简介 (3)二)程序中的数据说明 (3)三程序总体设计及流程图 (4)一)应用到的c语言 (4)二)程序的总框架 (5)四功能模块设计及调试 (5)一)算法说明 (5)1.总天数的算法 (5)2.计算输入日期是星期几 (6)3.对输入信息的汇总 (8)4..界面的控制 (10)二)调试结果 (11)五程序清单 (12)六结束语 (17)一引言通过大一上学期对C语言的学习,了解到了很多C语言的相关知识。

学习的过程有很多困惑但是当自己能够独立的看懂,能过独立的完成一个简单的程序时,心中就会收获无限的喜悦和成就感。

我可以里哟哦那个它看懂一些简单的程序,编写一些简单的计算程序,更多的是学会了一种思想——编程,它让我在去思考很多日常生活中的事物是怎么样通过一个个小小的函数实现功能的,激发我对探究的兴趣。

C语言是近年在国内外得到迅速推广应用的一种语言。

C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。

因此,C语言特别适合于编写各种软件。

在这次的课程设计中我将把日常生活中最经常接触的——日期的查询利用C语言的程序编成一个简单的日历。

通过这个小小的日历可以实现很多功能。

在程序中你能看到很多熟悉的C语言关键字,同时也加入了很多自己课外了解到的一些关键字。

在不断的调试中最终才获得最为完整的程序。

接下来就是我的C 语言课程设计的具体内容来了二系统功能和数据说明(一)功能简介在我们的日常生活中能接触到很多不同类型的日历,在日历上我们通常希望它能简介明了的给我们最想要的日期信息。

在我的万年历当中,就是将日历,月历做的简单明了,很方便我们的使用。

下面是它要实现的一些基本功能:用C语言编写万年历1、输入年份,判断是否为闰年2、输入年月日,判断改日为星期几3、输入年份,打出12个月历,输入月份,打出该月的日历4、要求用多个函数实现[名称]万年历[修改]1、对输入的日期进行容错处理2、增加和修改为英文的月份和星期显示3、采用指针形式的weeks和month数组(二)程序中的数据说明①int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};这是定义的关于每个月天数的数组,根据大小月以及二月分的特殊情况将每个月的天数最为数组中的元素存入数组当中。

万年历c语言代码讲解

万年历c语言代码讲解

万年历c语言代码讲解万年历是一种常见的日历形式,可以显示一年中每一天的日期和星期几。

在计算机编程中,我们可以使用C语言编写一个万年历的程序来实现这个功能。

我们需要了解一个概念:闰年。

闰年是指能被4整除但不能被100整除的年份,或者能被400整除的年份。

闰年的2月份有29天,而普通年份的2月份只有28天。

接下来,我们可以开始编写程序了。

首先,我们需要定义一个结构体来表示日期,结构体中包含年、月和日三个成员变量。

然后,我们可以编写一个函数来判断某一年份是否是闰年。

根据闰年的定义,我们可以使用取余运算符(%)来判断。

接下来,我们需要编写一个函数来计算某一年月的某一天是星期几。

这个函数的核心思想是根据已知的某一天是星期几,然后通过计算得出某一天之后或之前的日期是星期几。

我们可以使用一个数组来保存每个月份的天数,并根据年份是否是闰年来调整2月份的天数。

在计算星期几的过程中,我们可以使用蔡勒公式。

蔡勒公式是一种计算星期几的方法,根据蔡勒公式,我们可以得出某一天是星期几。

具体的计算公式可以在代码中实现,但是根据要求,我们不能输出公式,所以在这里就不展开讲解了。

接下来,我们可以编写一个主函数来调用上述的函数,并输出结果。

在主函数中,我们可以通过用户输入来获取需要查询的年月信息,然后调用函数来计算星期几,并输出结果。

为了使输出结果更加美观,我们可以使用制表符来对齐输出的结果。

在编写主函数的过程中,我们还可以加入一些错误处理的代码,例如判断用户输入的年月是否合法,以及判断计算结果是否正确。

这样可以增加程序的健壮性和用户体验。

我们还可以考虑加入一些额外的功能,例如输出某个月份的日历表格或者某一天所在的周的日期范围等。

这样可以提升程序的实用性和功能性。

通过以上的步骤,我们就可以完成一个简单的万年历程序的编写。

这个程序可以根据用户的输入来计算某一年月的某一天是星期几,并输出结果。

通过这个程序,我们可以更方便地查询任意日期的星期几,从而更好地了解和利用时间。

万年历星期的算法

万年历星期的算法

万年历星期的算法(C语言)#i nclude <stdio.h>code unsigned char WeekTab[] = {//闰年月星期表(3 << 5) + 31,//1月(6 << 5) + 29,//2月(0 << 5) + 31,//3月(3 << 5) + 30,//4月(5 << 5) + 31,//5月(1 << 5) + 30,//6月(3 << 5) + 31,//7月(6 << 5) + 31,//8月(1 << 5) + 30,//9月(4 << 5) + 31,//10月(0 << 5) + 30,//11月(2 << 5) + 31 //12月};/*---------------------------------------------------------2000年~2099年星期算法--------------------------------------------------------------------*/unsigned char WeekDay20(unsigned char y, unsigned char m, unsigned char d){unsigned char week, day;day = WeekTab[m - 1];//月表week = day >> 5;//月星期数day &= 0x1f;//月天数if ((m < 3) && (y & 0x03)){//平年if (m == 2) day--;//平年月天数week++;//平年月表+1}y = y + (y >> 2);//年+年/4week = (week + y + d + 2) % 7;//(星期=年+年/4+月表+2日)%7return (week << 5) | day;//返回星期和月天数}/*------------------------------------------------------------------------------ ----------0000年~9999年星期算法-------------------------------------------------------------------------------- ---------*/unsigned char WeekDay(unsigned char c, unsigned char y, unsigned char m,unsigned char d){unsigned char week, day;c &= 0x03;//百年%4c = c | (c << 2);//百年%4*5day = WeekTab[m - 1];//月表week = day >> 5;//月星期数day &= 0x1f;//月天数if ((m < 3) && !((c == 0) | (y & ((y & 0x03) == 0)))){//平年if (m == 2) day--;//平年月天数week++;//平年月表+1}y = y + (y >> 2);//年+年/4week = (week + c + y + d + 2) % 7;//(星期=百年%4*5+年+年/4+月表+日+2)%7 return (week << 5) | day;//返回星期和月天数}unsigned char BcdToBin(unsigned char val){val = (val >> 4) * 10 + (val & 0x0f);//将BCD码转换为10进制数return val;//返回10进制数}void main(void){unsigned char c, y, m, d;unsigned char cx, yx, mx, dx;unsigned char WDay, Week, Day;/*---------------------------------------------------------0001年1月1日星期天---------------------------------------------------------*/c = 0x00;y = 0x01;m = 0x01;d = 0x01;cx = BcdToBin(c);//百年yx = BcdToBin(y);//年mx = BcdToBin(m);//月dx = BcdToBin(d);//日WDay = WeekDay(cx, yx, mx, dx);//取星期和月天数Week = WDay >> 5;//得到星期Day = WDay & 0x1f;//得到最大月天数/*---------------------------------------------------------1918年1月21日星期一---------------------------------------------------------*/ c = 0x19;y = 0x18;m = 0x01;d = 0x21;cx = BcdToBin(c);//百年yx = BcdToBin(y);//年mx = BcdToBin(m);//月dx = BcdToBin(d);//日WDay = WeekDay(cx, yx, mx, dx);//取星期和月天数Week = WDay >> 5;//得到星期Day = WDay & 0x1f;//得到最大月天数/*--------------------------------------------------------- 9999年12月31日星期天---------------------------------------------------------*/ c = 0x00;y = 0x01;m = 0x01;d = 0x01;cx = BcdToBin(c);//百年yx = BcdToBin(y);//年mx = BcdToBin(m);//月dx = BcdToBin(d);//日WDay = WeekDay(cx, yx, mx, dx);//取星期和月天数Week = WDay >> 5;//得到星期Day = WDay & 0x1f;//得到最大月天数/*--------------------------------------------------------- 2004年6月18日星期五---------------------------------------------------------*/ c = 0x20;y = 0x04;m = 0x06;d = 0x18;cx = BcdToBin(c);//百年yx = BcdToBin(y);//年mx = BcdToBin(m);//月dx = BcdToBin(d);//日WDay = WeekDay20(yx, mx, dx);//取星期和月天数Week = WDay >> 5;//得到星期Day = WDay & 0x1f;//得到最大月天数/*--------------------------------------------------------- 2018年3月8日星期四---------------------------------------------------------*/ c = 0x20;y = 0x18;m = 0x03;d = 0x08;cx = BcdToBin(c);//百年yx = BcdToBin(y);//年mx = BcdToBin(m);//月dx = BcdToBin(d);//日WDay = WeekDay20(yx, mx, dx);//取星期和月天数 Week = WDay >> 5;//得到星期Day = WDay & 0x1f;//得到最大月天数while(1);}。

C语言农历表算法

C语言农历表算法

#include<stdio.h>void DateTrans(char *chDate,int *nYear,int *nMonth,int *nDay);// 1int IsLeapYear(int nYear);// 2int GetWeekOfFirstday(int nYear);// 3int GetWeek(int nYear,int nMonth,int nDay,int nWeekOfFirstday);// 4void PrintCalendar(int nWeek,int nDay,int nMonthDays,char *chDate);// 5void DateTrans(char *chDate,int *nYear,int *nMonth,int *nDay)// 1{*nYear=(chDate[0]-'0')*1000+(chDate[1]-'0')*100+(chDate[2]-'0')*10+chDate[3] -'0';*nMonth=(chDate[5]-'0')*10+chDate[6]-'0';*nDay=(chDate[8]-'0')*10+chDate[9]-'0';}int IsLeapYear(int nYear)// 2{if(nYear%4==0)return 1;elsereturn 0;}int GetWeekOfFirstday(int nYear)// 3{if(nYear>2000)return ((nYear-2001)*365+(nYear-2001)/4+1)%7;else if(nYear<2000)return 6-((2000-nYear)*365+(2000-nYear)/4)%7;elsereturn 6;}int GetWeek(int nYear,int nMonth,int nDay,int nWeekOfFirstday)// 4{int nDaysYear[]={31,28,31,30,31,30,31,31,30,31,30,31};int nDaysLeapYear[]={31,29,31,30,31,30,31,31,30,31,30,31};int i,sum=0;if(nYear%4==0){for(i=0;i<(nMonth-1);i++){sum+=nDaysLeapYear[i];}return (sum+nDay+nWeekOfFirstday-1)%7;}else{for(i=0;i<(nMonth-1);i++){sum+=nDaysYear[i];}return (sum+nDay+nWeekOfFirstday-1)%7;}}void PrintCalendar(int nWeek,int nDay,int nMonthDays,char *chDate) // 5{int i,j;printf("the calender of this month as following:\n");printf("*********************************\n");printf(" SUN MON TUE WEN THU FRI STA\n");for(i=1,j=1;j<=nMonthDays;i++){if(i<=nWeek+1)printf(" ");else{printf("%4d",j);j++;}if(i%7==0)printf("\n");}printf("\n********************************\n");printf("OK!\n");}main(){char chDate[11],i=0,j,isleapyear;int nYear,nMonth,nDay;int nWeekOfFirstday;int nMonthDays;int nWeek;char *Week;int nDaysYear[]={31,28,31,30,31,30,31,31,30,31,30,31};int nDaysLeapYear[]={31,29,31,30,31,30,31,31,30,31,30,31};printf("请输入你要查找的日期,如(2001\\01\\01或2001.01.01:\n或者是你想要日历的月份:如(2000\\01或2000.01):\n");do{scanf("%c",&chDate[i]);i++;}while(chDate[i-1]!='\n');if(i==11)chDate[i-1]='\0';elsefor(j=8;j<11;j++)chDate[j]='0';DateTrans(chDate,&nYear,&nMonth,&nDay);// 1while(nYear<=0||nMonth<1||nMonth>12){printf("查询年月chDate非法\n");return 0;}nWeekOfFirstday = GetWeekOfFirstday(nYear);// 3nWeek=GetWeek(nYear,nMonth,nDay,nWeekOfFirstday);// 4isleapyear=IsLeapYear(nYear);// 2if(isleapyear==1)nMonthDays=nDaysLeapYear[nMonth-1];else if(isleapyear==0)nMonthDays=nDaysYear[nMonth-1];if(i==11){while(nDay<1||nDay>nMonthDays){printf("查询日期chDate非法\n");return 0;}switch(nWeek){case 0:Week="SUNDAY";break;case 1:Week="MONDAY";break;case 2:Week="TUESDAY";break;case 3:Week="WEDNESDAY";break;case 4:Week="THUESDAY";break;case 5:Week="FRIDAY";break;case 6:Week="SATERDAY";break;}printf("This day (%s) is %s\n",chDate,Week);printf("OK!\n");}elsePrintCalendar(nWeek,nDay,nMonthDays,chDate); //5 }。

万年历c语言编程代码

万年历c语言编程代码

#include <stdio.h>// 函数声明int is_leap_year(int year);int get_first_day_of_year(int year);// 主函数int main() {int year, month, first_day_of_year, first_day_of_month, days_in_month;int i, j, k;printf("请输入年份(例如:2022):");scanf("%d", &year);first_day_of_year = get_first_day_of_year(year);for (month = 1; month <= 12; month++) {printf("%d 年%d 月\n", year, month);printf("日一二三四五六\n");if (month == 2) {if (is_leap_year(year)) {days_in_month = 29;} else {days_in_month = 28;}} else if (month == 4 || month == 6 || month == 9 || month == 11) { days_in_month = 30;} else {days_in_month = 31;}first_day_of_month = (first_day_of_year + (month-1)*28)%7;for (i = 1; i <= first_day_of_month; i++) {printf(" ");}for (j = 1; j <= days_in_month; j++) {printf("%2d ", j);k = (i + j - 1) % 7;if (k == 0) {printf("\n");}}printf("\n");}}// 判断是否闰年int is_leap_year(int year) {return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);}// 计算年份第一天是星期几int get_first_day_of_year(int year) {int first_day = (year - 1) * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400;first_day = (first_day + 1) % 7;return first_day;}这是一个简单的万年历示例代码,但它不是完整的代码。

C语言万年历代码

C语言万年历代码

else if(ch=='n'||ch=='N')
{ month+=1;
if(month>12) {month=1;year+=1;}
}
printf("\t\t********e退出 p上一月 n下一月********");
}
void first_set(int *year,int *month)
{ do{
printf ("please input the year(1~9999):");
if (choose=='y'||choose=='Y') main();
}
days_of_month(int x,int y)
{
int z;
switch (y)
{case 1:
case 3:
case 5:
case 7:
case 8:
printf ("please input the month(1~12):");
scanf ("%d",month);
if(*month<1||*month>12) printf ("WANNING:ERROR,please input again!\n");
printf ("\n\n********************************************************************************\n\n");
自己做的日历(C语言)
本帖最后由 kekeyu 于 2010-8-15 16:59 编辑

万年历c语言代码讲解

万年历c语言代码讲解

万年历c语言代码讲解摘要:一、万年历C语言代码讲解简介1.万年历的概念及用途2.C语言代码讲解的重要性二、C语言代码基础1.C语言简介2.C语言基本语法3.C语言的数据类型与变量三、万年历C语言代码实现1.计算闰年2.计算月份的天数3.计算日期的星期4.输出万年历四、万年历C语言代码的优化与拓展1.代码性能优化2.功能的拓展与实现五、总结1.万年历C语言代码讲解的意义2.对编程能力的提升正文:一、万年历C语言代码讲解简介万年历是一种记录了公历日期的工具,它可以帮助我们快速查询公历日期对应的农历、节日、提醒等信息。

C语言是一种广泛应用于计算机领域的编程语言,掌握C语言编程对于学习其他编程语言有很大的帮助。

本文将详细讲解万年历C语言代码的实现过程,帮助读者更好地理解C语言编程。

二、C语言代码基础1.C语言简介C语言是一种高级编程语言,由丹尼斯·里奇(Dennis Ritchie)于20世纪70年代在贝尔实验室开发。

C语言具有良好的性能和可移植性,被广泛应用于操作系统、嵌入式系统、硬件驱动等领域。

2.C语言基本语法C语言的基本语法包括变量声明、数据类型、运算符、控制结构、函数等。

了解这些基本语法对于编写C语言代码至关重要。

3.C语言的数据类型与变量C语言的数据类型包括整型、浮点型、字符型等。

变量是存储数据的容器,通过变量名来表示。

声明变量时需要指定变量的数据类型和存储空间。

三、万年历C语言代码实现1.计算闰年闰年是指公历年份可以被4整除但不能被100整除的年份,或者是可以被400整除的年份。

通过编写一个函数,我们可以判断一个年份是否为闰年。

2.计算月份的天数根据公历规定,每个月的天数不同。

通过编写一个函数,我们可以计算指定月份的天数。

3.计算日期的星期通过编写一个函数,我们可以根据公历日期计算对应的星期。

4.输出万年历根据用户输入的日期范围,输出对应的万年历信息。

四、万年历C语言代码的优化与拓展1.代码性能优化在实现万年历C语言代码的过程中,可以通过优化算法、使用更高效的函数等方式提高代码性能。

c语言嘉勒公式

c语言嘉勒公式

c语言嘉勒公式
嘉勒(Zeller)公式是一个用于计算星期的公式。

给定一个日期,该公式可以推算出是星期几。

这个公式的核心公式是:
w=(y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1)%7
其中:
w 是星期几,对7取模可以得到0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六
y 是年份的后两位数,如果是公元前的年份且非整百数,y 应该等于cMOD100+100
c 是世纪,一般情况下取值为已经过去的世纪数,也就是年份除以一百的结果,而非正在进行的世纪,也就是现在常用的年份除以一百加一;不过如果年份是公元前的年份且非整百数的话,c 应该等于所在世纪的编号,如公元前253年,是公元前3世纪,c 就等于 -3
m 是月份,m 大于等于 3,小于等于 14,即在蔡勒公式中,某年的 1、2 月要看作上一年的 13、14 月来计算,比如 2003 年 1 月 1 日要看作 2002 年的 13 月 1 日来计算
d 是日期
注意:这个公式只适用于1582年10月15日之后的情形(当时的罗马教皇将恺撒大帝制订的儒略历修改成格里历,即今天使用的公历)。

C语言根据日期判断星期几使用基姆拉尔森计算公式

C语言根据日期判断星期几使用基姆拉尔森计算公式

C语言根据日期判断星期几(使用基姆拉尔森计算公式)算法如下:基姆拉尔森计算公式W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7在公式中d表示日期中的日数,m表示月份数,y表示年数。

注意:在公式中有个与其他公式不同的地方:把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。

以公元元年为参考,公元元年1月1日为星期一;;程序如下:#include &quot;stdio.h&quot;void CaculateWeekDay(int y,int m, int d){if(m==1||m==2) {m+=12;y--;}intiWeek=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;switch(iWeek){case 0: printf(&quot;星期一\n&quot;); break; case 1: printf(&quot;星期二\n&quot;); break; case 2: printf(&quot;星期三\n&quot;); break; case 3: printf(&quot;星期四\n&quot;); break; case 4: printf(&quot;星期五\n&quot;); break; case 5: printf(&quot;星期六\n&quot;); break; case 6: printf(&quot;星期日\n&quot;); break; }}void main(){int year=0,month=0,day=0;printf(&quot;请输入日期:\n格式为:1900,1,1\n&quot;);char temp = '1';while (temp != '0')scanf(&quot;%d,%d,%d&quot;,&amp;year,&amp;month,& amp;day);scanf(&quot;%c&quot;,&amp;temp);CaculateWeekDay(year,month,day);printf(&quot;输入0退出,其他继续:&quot;);scanf(&quot;%c&quot;,&amp;temp);}}运行效果:请输入日期:格式为:1900,1,12008,4,29星期二输入0退出,其他继续:d2008,1,1输入0退出,其他继续:l2008,8,8星期五输入0退出,其他继续:0请按任意键继续. . .编者注:用来算现在真实日期的星期是没有问题的。

c语言中,输入日期查询星期几的程序代码

c语言中,输入日期查询星期几的程序代码

C语言中,输入日期查星期的程序#include <stdio.h>void main(){int y,m,d,z,r,temp;start1:printf("请输入查询年(1901年-2200年):");scanf("%d",&y);if(y<=1900||y>=2200){printf("你输入的年份不在指定范围内,请重新输入!\n");goto start1;}start2:printf("请输入查询月(1月-12月):");scanf("%d",&m);if(m<=0||m>12){printf("该年份没有%d月!\n",m);goto start2;}if(m==4||m==6||m==9||m==11){start3:printf("请输入日期(1号-30号):");scanf("%d",&d);if(d<=0||d>30){printf("%d月没有%d号!?\n",m,d);goto start3;}}if(y%4==0&&m==2){start4:printf("请输入日期(1号-29号):");scanf("%d",&d);if(d<1||d>29){printf("2月没有%d号!?\n",d);goto start4;}}if(y%4!=0&&m==2){start5: printf("请输入日期(1号-28号):");scanf("%d",&d);if(d<0||d>=29){printf("%d年2月没有%d号!?\n",y,d);goto start5;}}if(m==1||m==3||m==5||m==7||m==8||m==8||m==10||m==12) {start6:printf("请输入日期(1号-31号):");scanf("%d",&d);if(d<1||d>31){printf("该月没有%d号!?\n",d);goto start6;}}r=(y-1901)/4;if(y%4==0&&m>=3)r=r+1;if(m==1)z=(y-1901)*365+r+d;if(m==2)z=(y-1901)*365+r+31+d; if(m==3)z=(y-1901)*365+r+59+d; if(m==4)z=(y-1901)*365+r+90+d; if(m==5)z=(y-1901)*365+r+120+d; if(m==6)z=(y-1901)*365+r+151+d; if(m==7)z=(y-1901)*365+r+181+d; if(m==8)z=(y-1901)*365+r+212+d; if(m==9)z=(y-1901)*365+r+243+d; if(m==10)z=(y-1901)*365+r+273+d; if(m==11)z=(y-1901)*365+r+304+d; if(m==12)z=(y-1901)*365+r+334+d;temp=z%7;if(temp==0)printf(" 这天是星期一!\n");else if(temp==1)printf(" 这天是星期二!\n");else if(temp==2)printf(" 这天是星期三!\n");else if(temp==3)printf(" 这天是星期四!\n");else if(temp==4)printf(" 这天是星期五!\n");else if(temp==5)printf(" 这天是星期六!\n");elseprintf(" 这天是星期天!\n"); }。

C语言实现农历万年历

C语言实现农历万年历

农历数据:
第 23 位 保留
第 22 至 17 位 农历正月初一的年内序数
第 16 至 13 位 闰月
第 12 至 0 位 月份大小信息
因此,农历数据使用 24 个位,即 3 字节。
上述四个块,分别有如下含义:
3 / 48
2016 年全新原创
C 语言实现农历万年历
paradise300
① 保留位始终为 0; ② 农历正月初一距离公历元旦的天数; ③ 0 表示无闰月,1 至 12 表示闰月月份; ④ 从低位到高位分别对应从正月到(闰)十二月的每个月的大小,“1”表 示大月,即该月有 30 天,“0”表示小月,即该月有 29 天。
//1899年农历十月及以后的月份,每月初一在1900年内的序数。 //cPreMonth中分别对应农历的十月、十一月、十二月、正月。 char const cPreMonth[4]={-59,-29,0,30};
//农历月份信息。一年用个字节表示
//+-----------------------------------------------------------------------+
节气数据:
经统计,公历年的首个节气均为“小寒”。
第 47 至 46 位
第 45 至 0 位
小寒的年内序数减 3 从大寒到冬至每个节气 2 个位,表示距上一节气天数
5 / 48
2016 年全新原创
C 语言实现农历万年历
paradise300
其中第一部分,在使用时,两位数据需要加上 3,才能得到小寒的年内序数, 第二部分,第 45 至 44 位,表示了大寒距离小寒的天数,第 43 至 42 位,表示立 春距离大寒的天数,……以此类推。

C语言万年历设计报告

C语言万年历设计报告

千里之行,始于足下。

C语言万年历设计报告设计报告:C语言万年历1. 引言本文旨在介绍一个基于C语言开发的万年历设计,并对其设计思路、代码细节、实现效果进行具体的阐述。

万年历是一种依据历法规章,能够显示任意年份任意月份的日历的工具。

在本设计中,我们使用C语言来编写一个简易的万年历程序,具备显示任意年份任意月份的日历、日期查询等功能。

2. 设计思路2.1 数据结构设计在设计万年历程序时,我们需要设计适用于存储日期信息的数据结构。

考虑到日历是依据年份和月份来呈现的,我们可以使用结构体来存储日期的年、月、日信息。

具体数据结构如下:```struct Date {int year;int month;int day;};```2.2 星期计算算法第1页/共3页锲而不舍,金石可镂。

在日历中,我们需要依据给定日期计算出其对应的星期。

这里我们接受Zeller公式来计算星期。

Zeller公式可以依据给定的年、月、日计算出一个对应的星期数。

具体公式如下:```h = (q + ((13*(m+1))/5) + K + (K/4) + (J/4) - (2*J)) % 7```其中,h是一个星期的编号,0代表星期一,1代表星期二,以此类推。

2.3 日历显示算法对于日历的显示,我们需要依据给定的年份和月份计算出该月的天数,并打印出日历表。

具体算法如下:- 首先,依据给定的年份和月份,计算出该月的天数。

- 然后,依据给定年份、月份、星期计算公式,计算出该月的第一天是星期几。

- 接下来,依据计算结果,打印出日历表。

3. 主要函数设计在C语言万年历程序的设计中,我们主要需要设计以下几个函数:3.1 输入函数该函数用于接收用户输入的年份和月份,并进行基本的输入验证,确保输入的年份和月份在合理范围内。

千里之行,始于足下。

3.2 星期计算函数该函数依据给定的年份、月份、日期,计算出对应的星期数,并返回星期数。

3.3 天数计算函数该函数依据给定的年份和月份,计算出该月的天数,并返回天数。

C语万年历

C语万年历

功能要求:1 输入任一年将显示出该年的所有月份日期,对应的星期2 注意闰年情况显示格式要求如下:1 月份(中英文都可以)2 下一行显示星期,从周日到周六,中英文都可以3 下一行开始显示日期从1号开始,并按其是周几实际情况与上面的星期数垂直对齐#include <stdio.h>#include <stdlib.h>int leap(int); /*判断是否为闰年*/int md(int m,int y); /*返回本月的天数*/void prtweek(void); /*输出表头*/int fw(int m,int y); /*返回本月一号是星期几*/void prtmonth(int m); /*输出月份表头*/int main(void){int y,m,i,test,week;printf("请输入您要查询的年份: ");scanf("%d",&y);for (m=1; m<=12; m++) {test=1;prtmonth(m);prtweek();week=fw(m,y);if (week!=6)for (i=0; i<=week; i++) {putchar('\t');test++;}for (i=1; i<=md(m,y); i++,test++) {printf("%d\t",i);if (test%7==0) {putchar('\n');}}putchar('\n');system("pause");//暂停,以便观察输出}return 0;}int leap(int y){return (y%4==0&&y%100||y%400==0)?1:0;}int md(int m,int y){int d;switch (m) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:d=31;break;case 4:case 6:case 9:case 11:d=30;break;case 2:d=leap(y)?29:28;break;}return d;}void prtweek(void){printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n","Sun","Mon","Tue","Wed","Thur","Fri","Sat"); }int fw(int m,int y){int f;if (m<3) {m+=12;y--;}f=(1+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; return f;}void prtmonth(int m){switch (m) {default:case 1:puts("===January===");break;case 2:puts("===February===");break;case 3:puts("===March===");break;case 4:puts("===April===");break;case 5:puts("===May===");break;case 6:puts("===June===");break;case 7:puts("===July===");break;case 8:puts("===August===");break;case 9:puts("===September===");break; case 10:puts("===October===");break;case 11:puts("===November===");break; case 12:puts("===December===");break;}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

万年历星期的算法(C语言)
#include <stdio.h>
code unsigned char WeekTab[] = { //闰年月星期表
(3 << 5) + 31,//1月
(6 << 5) + 29,//2月
(0 << 5) + 31,//3月
(3 << 5) + 30,//4月
(5 << 5) + 31,//5月
(1 << 5) + 30,//6月
(3 << 5) + 31,//7月
(6 << 5) + 31,//8月
(1 << 5) + 30,//9月
(4 << 5) + 31,//10月
(0 << 5) + 30,//11月
(2 << 5) + 31 //12月
};
/*------------2000年~2099年星期算法----------*/
unsigned char WeekDay20(unsigned char y, unsigned char m, unsigned char d) {
unsigned char week, day;
day = WeekTab[m - 1]; //月表
week = day >> 5; //月星期数
day &= 0x1f; //月天数
if ((m < 3) && (y & 0x03))
{ //平年
if (m == 2) day--; //平年月天数
week++; //平年月表+1
}
y = y + (y >> 2); //年+年/4
week = (week + y + d + 2) % 7; //(星期=年+年/4+月表+2日)%7 return (week << 5) | day; //返回星期和月天数
}
/*--------------0000年~9999年星期算法------------*/
unsigned char WeekDay(unsigned char c, unsigned char y, unsigned char m, unsigned char d)
{
unsigned char week, day;
c &= 0x03; //百年%4
c = c | (c << 2); //百年%4*5
day = WeekTab[m - 1]; //月表
week = day >> 5; //月星期数
day &= 0x1f; //月天数 if ((m < 3) && !((c == 0) | (y & ((y & 0x03) == 0)))) { //平年 if (m == 2) day--; //平年月天数 week++; //平年月表+1 }
y = y + (y >> 2); //年+年/4 week = (week + c + y + d + 2) % 7;
//(星期=百年%4*5+年+年/4+月表+日+2)%7 return (week << 5) | day; //返回星期和月天数
}
unsigned char BcdToBin(unsigned char val)
{
val = (val >> 4) * 10 + (val & 0x0f); //将BCD码转换为10进制数 return val; //返回10进制数
}
void main(void)
{
unsigned char c, y, m, d;
unsigned char cx, yx, mx, dx;
unsigned char WDay, Week, Day;
/*---------------------------------------------------------
0001年1月1日星期天
---------------------------------------------------------*/
c = 0x00;
y = 0x01;
m = 0x01;
d = 0x01;
cx = BcdToBin(c); //百年
yx = BcdToBin(y); //年
mx = BcdToBin(m); //月
dx = BcdToBin(d); //日
WDay = WeekDay(cx, yx, mx, dx); //取星期和月天数
Week = WDay >> 5; //得到星期
Day = WDay & 0x1f; //得到最大月天数
/*---------------------------------------------------------
1918年1月21日星期一
---------------------------------------------------------*/
c = 0x19;
y = 0x18;
m = 0x01;
d = 0x21;
cx = BcdToBin(c); //百年
yx = BcdToBin(y);/ /年
mx = BcdToBin(m); //月 dx = BcdToBin(d); //日 WDay = WeekDay(cx, yx, mx, dx); //取星期和月天数 Week = WDay >> 5; //得到星期 Day = WDay & 0x1f; //得到最大月天数/*--------------------------------------------------------- 9999年12月31日星期天
---------------------------------------------------------*/ c = 0x00;
y = 0x01;
m = 0x01;
d = 0x01;
cx = BcdToBin(c);//百年
yx = BcdToBin(y);//年
mx = BcdToBin(m);//月
dx = BcdToBin(d);//日
WDay = WeekDay(cx, yx, mx, dx);//取星期和月天数
Week = WDay >> 5;//得到星期
Day = WDay & 0x1f;//得到最大月天数
/*--------------------------------------------------------- 2004年6月18日星期五
---------------------------------------------------------*/ c = 0x20;
y = 0x04;
m = 0x06;
d = 0x18;
cx = BcdToBin(c);//百年
yx = BcdToBin(y);//年
mx = BcdToBin(m);//月
dx = BcdToBin(d);//日
WDay = WeekDay20(yx, mx, dx);//取星期和月天数
Week = WDay >> 5;//得到星期
Day = WDay & 0x1f;//得到最大月天数
/*--------------------------------------------------------- 2018年3月8日星期四
---------------------------------------------------------*/ c = 0x20;
y = 0x18;
m = 0x03;
d = 0x08;
cx = BcdToBin(c);//百年
yx = BcdToBin(y);//年
mx = BcdToBin(m);//月
dx = BcdToBin(d);//日
WDay = WeekDay20(yx, mx, dx);//取星期和月天数 Week = WDay >> 5;//得到星期
Day = WDay & 0x1f;//得到最大月天数
while(1);
}。

相关文档
最新文档