您的位置:

日历计算器c语言源代码,日历c语言编程

本文目录一览:

C语言编程日期计算

#include stdio.h

#include windows.h

/* 以公元阳历来计算(非农历) */

int _MONTH[]={{31},{28},{31},{30},{31},{30},{31},{31},{30},{31},{30},{31}};

int days(int *m,int *day)

{

int i,md=0;

unsigned int d;

for(i=0;i(*m-1)(i11);i++)

md=md+_MONTH[i];

d=md+(*day);

return (int)((d+365)-365);

}

void main()

{

   int month,day;

RESET:

   month=day=1;

   printf("月份:");

   scanf("%d",month);

   printf("日期:");

   scanf("%d",day);

   while((month1||month12)||(day1||day31))

   {

  printf("月份或日期有误,请重新输入!\n");

  fflush(stdin);

  Sleep(3000);

  goto RESET;

   }

   printf("今天是今年的第%d天\n",days(month,day));

}

月份与日期是用户输入接受来的,如果你想一运行就显示当前日期是今年的第几天。你可以使用time.h头文件里的有关函数来获取。获取后你只需将将强制转换为int型即可带入实参。具体如何获取网上有很多成熟的例子。

这个例子的实现原理与日历实现的原理一样:

如日历的原理如下截图:

C语言万年历代码

#include"stdio.h"

#include"stdlib.h"

main( )

{

int Year,Month; //年、月

int FirstDay_Year,FirstDay_Month; //某年的第一天是星期几,某年某月的第一天是星期几(范围是0~6,其中0代表星期日)

int IsLeapYear; //是否为闰年,0表示不是闰年,1表示是闰年

int i,d,y; //临时变量

char YN; //Yes No,程序是否要继续

int Days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

//Days[1~12]存储每个月有多少天,其中二月的天数是可变的(闰年29天,平年28天),这里初始化为28天

printf(" C语言简单万年历\n"); //打印标题

XunHuan: //循环标号(可以通过goto跳转到这里)

printf("请输入年份0000~9999: "); //提示输入年份(0~9999)

scanf("%d",Year); //把输入的年份赋值给变量Year

printf("请输入月份0~12: "); //提示输入月份(1~12)

scanf("%d",Month); //把输入的月份赋值给变量Month

y=Year;

FirstDay_Year=5*(y/4)+(y%4)-(y/100)+(y/400);//蔡勒公式(计算某年的第一天是星期几)

IsLeapYear=(y%4==4y%100!=100||y%400==0)?1:0;

//判断是否为闰年

Days[2]=(IsLeapYear==1)?29:28; //闰年二月29天,非闰年二月28天

for(i=1,d=0;iMonth;i++)

d=d+Days[i];

FirstDay_Month=(d+FirstDay_Year)%7; //当月的第一天是星期几(0代表星期日)

printf("\n****************************************************\n");

printf("\t\t公元 %d 年 %2d 月",Year,Month); //打印年月

printf("\n****************************************************\n");

printf(" 星期日 星期一 星期二 星期三 星期四 星期五 星期六\n");

//打印星期表头

for(i=0;iFirstDay_Month;i++)

printf("%7c",' '); //当某月的第一天不是星期日时打印空格占位

for(d=1;d=Days[Month];d++) //循环,从每个月的第一天开始打印

{

printf("%7d",d);

if(((d+FirstDay_Month)%7)==0 dDays[Month])

printf("\n"); //当输出了星期六而且还未输出所有天数时,换行

}

printf("\n****************************************************\n");

printf("\n");

printf("是否继续(Y/N)?\n");

scanf("%c",YN);

scanf("%c",YN);

if(YN=='Y' || YN=='y')

goto XunHuan;

}

跪求C语言编写的万年历原代码,大哥们帮帮忙啊~

//-------------系统库定义-------------------

#include "stdio.h"

#include "BIOS.h"

#include "dos.h"

#define X " Sun Mon Tue Wed Thu Fri Sat"

#define LEFT 0x4b00

#define RIGHT 0x4d00

#define DOWN 0x5000

#define UP 0x4800

#define PGUP 0x4900

#define PGDW 0x5100

#define ESC 0x011b

#define QUERY 0x1071

#define QUERYD 0x1051

//--------------------------------------------

struct date dm ;//时间结构定义

int Cyear,Cmonth,Cday,Cmonnum,Lmonnum ;//全局变量

int isleap(int year)//判断闰年

{

if(year%4==0year%100||year%400==0)

return 1 ;

else

return 0 ;

}

int getday(int year,int month,int day)//计算X年X月X日是星期几

{

int flag,s,i ;

int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31} ;

int cont=0 ;

flag=isleap(year);

if(flag==1)

a[2]++;

for(i=1;imonth;i++)

{

cont=cont+a[i];

}

cont=cont+day ;

s=year+1+(year-1)/4+(year-1)/100+(year-1)/400+cont ;

return s%7 ;

}

void printspace(int n)//输出空格

{

int i ;

for(i=0;in;i++)printf(" ");

}

void spacer()//输出分隔符(分隔线)

{

int i ;

for(i=0;i30;i++)

{

printf("=");

}

printf("\n");

}

void keyinfo()//输出键盘操作信息

{

printf("\n-------Operation manual-------\n");

printf("Year:Up key and Down key\n");

printf("Month:Left key and Right key\n");

printf("Day:PageUp key and PageDown key\n");

printf("Query date of the calendar:Q key\n");

printf("Exit calendar:Esc key\n");

}

void week()//输出当前日期是星期几

{

int day ;

day=getday(Cyear,Cmonth,Cday);

if(day==0)

printf("\n%d-%d-%d is Sunday!\n",Cyear,Cmonth,Cday);

if(day==1)

printf("\n%d-%d-%d is Monday!\n",Cyear,Cmonth,Cday);

if(day==2)

printf("\n%d-%d-%d is Tuesday!\n",Cyear,Cmonth,Cday);

if(day==3)

printf("\n%d-%d-%d is Wednesday!\n",Cyear,Cmonth,Cday);

if(day==4)

printf("\n%d-%d-%d is Thursday!\n",Cyear,Cmonth,Cday);

if(day==5)

printf("\n%d-%d-%d is Friday!\n",Cyear,Cmonth,Cday);

if(day==6)

printf("\n%d-%d-%d is Saturday!\n",Cyear,Cmonth,Cday);

}

void calendar(int year,int month,int day)//显示日历

{

int i,j,d,m,flag,week;

int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

m=0,d=0,week=0;

Cmonnum=a[month];//当前月的天数

Lmonnum=a[month-1];//上一月的天数

week=d=getday(year,month,1);//取得X年X月的1日是星期几

flag=isleap(year);

if(flag==1)

{

a[2]++;

}

clrscr();

printf("\n The calendar of year %d\n",year);

spacer();

switch(month)

{

case 1 :

printf(" January 1 ");

break ;

case 2 :

printf(" February 2 ");

break ;

case 3 :

printf(" March 3 ");

break ;

case 4 :

printf(" April 4 ");

break ;

case 5 :

printf(" May 5 ");

break ;

case 6 :

printf(" June 6 ");

break ;

case 7 :

printf(" July 7 ");

break ;

case 8 :

printf(" August 8 ");

break ;

case 9 :

printf(" September 9 ");

break ;

case 10 :

printf(" October 10 ");

break ;

case 11 :

printf(" Nevember 11 ");

break ;

case 12 :

printf(" December 12");

break ;

}

printf("\n");

printf(X);

printf("\n");

for(i=0;i6;i++)

{

if(i==0)//如果是第一个星期时,执行!

{

printspace(d*4);

for(j=0;j7-d;j++)

{

if(m==day-1)//m到达day的前一天时,输出[%d]

{

printf(" [%d]",++m);

}

else if(m==day week!=0)//m到达当天时的,输出%3d

{

printf("%3d",++m);

}

else

{

printf("%4d",++m);

}

week=(week6)?week+1:0;//计算当天是星期几

}

printf("\n");

}

else//不是第一个星期时,执行!

{

for(j=0;j7;j++)

{

if(ma[month])

{

if(m==day-1)//m到达day的前一天时,输出[%d]

{

if(m9)//代表只有一位数的数字如9,8,7.....等。

printf(" [%d]",++m);

else//代表只有两位数的数字如10,11,12.....等。

printf(" [%d]",++m);

}

else if(m==day week!=0)

{

printf("%3d",++m);

}

else

{

printf("%4d",++m);

}

}

week=(week6)?week+1:0;//计算当天是星期几

}

printf("\n");

if(m==a[month])break ;

}

}

spacer();

if(flag==1)

printf("\nThe year %d is leap year!\n",year);

if(flag==0)

printf("\nThe year %d is not leap year!\n",year);

week();

printf("\nThe current date is: %d-%d-%d\n",dm.da_year,dm.da_mon,dm.da_day);

keyinfo();

}

//keyboard Operation

void key()

{

int key ;

Cyear=dm.da_year,Cmonth=dm.da_mon,Cday=dm.da_day ;

calendar(Cyear,Cmonth,Cday);

while(1)

{

key=bioskey(0);

if(key==RIGHT)

{

if(Cmonth12Cmonth=1)

{

Cmonth++;

}

else

{

Cyear++;

Cmonth=1 ;

}

}

if(key==LEFT)

{

if(Cmonth=12Cmonth1)

{

Cmonth--;

}

else

{

Cyear--;

Cmonth=12 ;

}

}

if(key==UP)

{

Cyear++;

}

if(key==DOWN)

{

Cyear--;

}

if(key==PGUP)

{

if(Cday!=1)

{

Cday--;

}

else if(Cday==1Cmonth==1)

{

Cyear--;

Cmonth=12 ;

Cday=31 ;

}

else

{

Cmonth--;

Cday=Lmonnum ;

}

}

if(key==PGDW)

{

if(Cmonnum!=Cday)

{

Cday++;

}

else if(Cmonnum==CdayCmonth==12)

{

Cyear++;

Cmonth=1 ;

Cday=1 ;

}

else

{

Cmonth++;

Cday=1 ;

}

}

if(key==QUERY||key==QUERYD)

{

printf("Input date format(YYYY,MM,DD):");

scanf("%d,%d,%d",Cyear,Cmonth,Cday);

}

if(key==ESC)break ;

calendar(Cyear,Cmonth,Cday);

}

}

void main()

{

clrscr();

getdate(dm);

key();

}

求C语言编日历源代码的详细说明

/*

稍微改了下对齐格式,加了注释

*/

/*

1、闰年的算法:

如果某年能被4整除但不能被100整除,

或者能被400整除,

则该年是闰年.

用表达式表示就是

(year

%4

==

year%100

!=

0)

||

(year%400

==

0)

2、计算某一天是星期几:

已知1900年的1月1号为星期一,

然后就可以用某一天和1900年的1月1号相差的天数对7取余来求星期,

本题是用的公元1年的1月1号作为基准

*/

#include

stdio.h

#includeconio.h

#includestdlib.h

int

IsLeapYear(int);

//函数定义

void

main()

{

int

i;

int

day;

int

year;

int

temp;

int

temp_i;

long

int

Year_days

=

0;

int

Year_Start

=

1;

int

Per_Year_Days;

int

month_day[]={31,28,31,30,31,30,31,31,30,31,30,31,29};

printf("Please

enter

the

year:

");

scanf("%d",year);

//输入年份

while(Year_Start

year)

//从公元1年开始执行while循环,

该年的一月一号为星期一

{

if(

IsLeapYear(

Year_Start

)

)

Per_Year_Days

=

366;

//如果是闰年,

则一年有366天

else

Per_Year_Days

=

365;

//如果不是闰年,

则一年有365天

Year_days

=

Year_days

+

Per_Year_Days;

//Year_days为从公元1年到输入年份的前一年的天数的总和

Year_Start++;

}

for(

temp

=

1;

temp

=12;

temp++

)

//temp从1到12,

对应一年内12个月

{

switch(

temp

)

//用switch语句将temp和12个月对应起来

{

case

1:

printf("

January(%d)\n",year);

//一月

break;

case

2:

printf("

February(%d)\n",year);

//二月

break;

case

3:

printf("

March(%d)\n",year);

//三月

break;

case

4:

printf("

April(%d)\n",year);

//四月

break;

case

5:

printf("

May(%d)\n",year);

//五月

break;

case

6:

printf("

June(%d)\n",year);

//六月

break;

case

7:

printf("

July(%d)\n",year);

//七月

break;

case

8:

printf("

August(%d)\n",year);

//八月

break;

case

9:

printf("

September(%d)\n",year);

//九月

break;

case

10:

printf("

October(%d)\n",year);

//十月

break;

case

11:

printf("

November(%d)\n",year);

//十一月

break;

case

12:

printf("

December(%d)\n",year);

//十二月

break;

}

i

=

Year_days

%

7;

//每个星期有7天,

故用每年的天数对7取余

printf("Mon\tTue\tWed\tThu\tFri\tSat\tSun\n");

if(

i

!=

)

//如果余数不为零

for(

temp_i

=

0;

temp_i

i;

temp_i++)

printf("\t");

//则打印空格(这里用\t代替空格,

更加美观),

空格数为i

day

=

1;

//初始化day为1,

为下面的while循环做准备

if(

IsLeapYear(year)

temp

==

2)

//如果输入的年份是闰年,

并且月份为2

while(

day

=

month_day[12]

)

//day为一循环变量,

取值为1-365(闰年的话为1-366)

{

if(

day

1

)

//如果天数大于一

if(

Year_days

%

7

==

)

//如果是星期日,

则换行

printf("\n");

if(

day

=

10

)

printf("%d\t",day);

//打印天数+空格

else

printf("%d\t",day);

Year_days++;

day++;

}

else

//如果不满足"输入的年份是闰年,

并且月份为2"

while

(day

=

month_day[temp-1])

{

if(

day

1

)

if(

Year_days

%

7

==

)

printf("\n");

if(

day

=10

)

printf("%d\t",day);

else

printf("%d\t",day);

Year_days++;

day++;

}

printf("\n");

if(

getch()

==

'q'

)

//如果输入为q,

则退出程序

exit(0);

}

getch();

//每按一次键,

打印一个月份

}

int

IsLeapYear(

int

year

)

{

//判断是否是闰年,

是则返回1,

否则返回0

if

((year

%4

==

0)

(year

%

100

!=

0)

||

(year

%

400

==

0)

)

return

1;

else

return

0;

}