根据日期计算星期几
1、根据输入的日期查询该日期是星期几的C语言程序实现:
#include<stdio.h>
#define YEAR 2021 //定义一个日期
#define MOTH 1
#define DAY 1
#define xingqi 5 //该日期宏定义这天对应的星期数
//注:要求的日期必须在该日期之后
//预存平年每个月的天数,若遇到闰年另外再加一天
char const days_of_moth[] = {31,28,31,30,31,30,31,31,30,31,30,31};
typedef struct //定义日期结构体
{
short int year;
char moth;
char day;
}Date;
int IsLeapYear(short int y)//判断闰年函数,返回1是闰年,返回0不是闰年
{
return (((y%4 == 0)&&(y%100 != 0))||(y%400 == 0));
}
char GetWeek(Date *date)//计算带入的日期是星期几,返回值就是星期几
{
short int days = 0;//用来计算两个日期相差天数
short int i = 0;
days = days + 365*(date->year - YEAR);//求相差几个整年天数
if(date->year > YEAR)//计算到当前年份之间有没有闰年,有闰年天数多加一天
{
for( i = YEAR;i < date->year;i++)
{
if(IsLeapYear(i))
days++;
}
}
for(i = 1;i < date->moth;i++)//求需要加几个月份
{
days = days + days_of_moth[i-1];
}
if((date->moth > 2)&&(IsLeapYear(date->year)))//要求的当年为闰年,且月份超过
2月,多加一天
days++;
days = days + (date->day - DAY);//求得两个日期之间相差天数
days = days%7;
days = days + xingqi;
if(days > 7)
days = days - 7;
return days;
}
void main()
{
Date dat;
int a = 0;
printf("Please input date:");
scanf("%hd,%hhd,%hhd",&(dat.year),&(dat.moth),&(dat.day));
a = GetWeek(&dat);
printf("今天是星期%d\n",a);
}
效果结果:(Linux环境下运行)
注意:输入的年月日之间使用逗号隔开,不要用点号隔开