当前位置:首页 » 编程语言 » c语言判断第几个周的周几
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言判断第几个周的周几

发布时间: 2023-04-06 17:52:27

Ⅰ C语言:求星期几(求讲解)

如何求某一天是星期几? 请注意这样一个事实,即从公元元年一月一日开始到现在,每一天都是连续的,而每个星期有7天,也是连续的,也就是说日期和星期是一对一的,没有断档现象。我的基本思想是计算出当前天是从公元元年一月一日开始的第几天,再利用星期的周期性来计算公元任何一天是星期几。 假设当前年份为y,并忽略闰年,则从公元元年一月一日到y-1年共有365*(y-1)天,加上闰年多出来的天数,即加上1*((y-1)/4-(y-1)/100+(y-1)/400),"/"为整除,得:365*(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)。我们再补上从当前1月1日开始到当前天的天数e,即为所求。即:365*(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)+e。它的值即为当前天是从公元元年一月一日开始算起的第几天。补上一个x(x是与公元元年一月一日是星期几有关的一个0~6的整数),并将这个表达式赋给变量t,即:t=x+365*(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)+e再用t除以7,余几即为星期几(余0为星期日)。 下面讨论x的求法,如果知道公元元年一月一日是星期几,就可以直接得到x的值,但现在公式还没有求出来,不知道公元元年一月一日是星期几。不过没关系,毕竟知道最近的日期是星期几。不妨看一下2001年1月1日是星期几,结果是星期一,代入公式得t=x+730516,用730516除以7,得104355,余数是1,则为了保证2001年1月1日是星期一,取x 为0,所以公元元年一月一日也是星期一。至此,得到了完整的公式: t=365*(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)+e 再将它做一下改进,我们将公式变形为: t=(52*7+1)*(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)+e 利用星期的周期性,将52*7+1从公式中删除,得: t=(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)+e 在我网络到的那个帖子找到了答案~~ http://..com/question/3696267.html

Ⅱ 用C语言计算这是第几周

#include<stdio.h>

int main()
{
int d91,month,day,week,n=0;
scanf("%d%d%d",&d91,&month,&day);//依次输入9月1日周几,今天几号
switch(month){
case 10:n+=30;break;
case 11:n+=61;break;
case 12:n+=91;break;
case 1:n+=122;break;
case 2:n+=153;break;
case 3:n+=183;break;
case 4:n+=214;break;
}
n=n+day-d91;
week=n/7;
printf("%d\n",week+1);
}

Ⅲ 怎样用C语言程序计算每月的一号是星期几

1、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日为星期一。

2、例程:

#include"stdio.h"
voidCaculateWeekDay(inty,intm,intd)
{
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)
{
case0:printf("星期一 ");break;
case1:printf("星期二 ");break;
case2:printf("星期三 ");break;
case3:printf("星期四 ");break;
case4:printf("星期五 ");break;
case5:printf("星期六 ");break;
case6:printf("星期日 ");break;
}
}
voidmain()
{
intyear=0,month=0,day=0;
printf("请输入日期: 格式为:1900,1,1 ");
chartemp='1';
while(temp!='0')
{
scanf("%d,%d,%d",&year,&month,&day);
scanf("%c",&temp);
CaculateWeekDay(year,month,day);
printf("输入0退出,其他继续:");
scanf("%c",&temp);
}
}

Ⅳ 高手指导一下,怎样用C语言编写一个计算单双周的程序,并能显示这是第几周,输入一个日期定为单周,然后自

#include <stdio.h>

const char WEEK_DAYS_NAME[7][10]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};

/*
设定一个最小的系统日期,并且指定改天是星期几
*/
/*最小的系统日期年份,默认是 2000 年*/
const int START_YEAR = 2000;
/*日最小的系统日期月份,默认是 1 月*/
const int START_MONTH = 1;
/*最小的系统日期,默认是 1 号*/
const int START_DAY = 1;
/*最小的系统日期所在的星期,默认是星期六(2000年1月1日是星期六)*/
const int START_WEEK_DAY = 6;

/*
功能:
计算指定的 year 年 month 月的天数
*/
int getDaysOfMonth(int year ,int month)
{
const int daysOfMonth[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};

// 闰年的二月份
if( month == 2 && ( (year%4==0 && year%100!=0) || year %400==0 ))
{
return daysOfMonth[month] +1;
}
else
{
return daysOfMonth[month];
}
}

/*
功能:
计算 year 年 month 月 day 日
距离
START_YEAR 年 START_MONTH 月 START_DAY 日
的天数
*/

int getDiffDays(int year ,int month , int day)
{
int diffDays = 0 ;
int y,m,d;

if(year == START_YEAR)
{
if(month == START_MONTH)
{
diffDays = day - START_DAY;
}
else
{
/*加上当月剩余天数*/
diffDays += getDaysOfMonth(START_YEAR,START_MONTH) - START_DAY + 1;
/*加上整月的天数*/
for(m = START_MONTH + 1 ; m < month ; m ++)
{
diffDays += getDaysOfMonth(START_YEAR,m);
}
/*加上当月剩余天数*/
diffDays += day -1;
}
}
else
{
/*加上当月剩余天数*/
diffDays += getDaysOfMonth(START_YEAR,START_MONTH) - START_DAY + 1;
/*加上整月的天数*/
for(m = START_MONTH + 1 ; m <= 12 ; m ++)
{
diffDays += getDaysOfMonth(START_YEAR,m);
}
/*加上整年的天数*/
for(y = START_YEAR+1 ; y < year ; y ++)
{
/*如果是闰年*/
if((y%4==0%y%100!=0) || y%400==0)
{
diffDays += 366;
}
else
{
diffDays += 365;
}
}
/*加上整月的天数*/
for(m = 1 ; m < month ; m ++)
{
diffDays += getDaysOfMonth(year,m);
}
/*加上当月的天数*/
diffDays += ( day - 1 );
}

return diffDays;

}
/*
功能:
计算 year 年 month 月 day 日
距离
START_YEAR 年 START_MONTH 月 START_DAY 日
已经过了多少周
*/
int getDiffWeeks(int year ,int month , int day)
{
int diffDays ,diffWeeks;
// 距离系统最小时间已经过去的天
diffDays= getDiffDays(year,month,day);
diffWeeks = diffDays/7;
// 修正已经过去的周
if((START_WEEK_DAY + diffDays % 7 )> 7)
{
diffWeeks++;
}
// debug
//printf("%d %d %d\n",diffDays,diffWeeks,(START_WEEK_DAY + diffDays % 7 ) % 7);
return diffWeeks;
}

/*
功能:
计算 year 年 month 月 day 日 是星期几
星期一 = 1
星期二 = 2
...
星期六 = 6
星期天 = 0
*/
int getWeekDay(int year ,int month , int day)
{
int diffDays= getDiffDays(year,month,day);

return (START_WEEK_DAY + diffDays % 7 ) % 7;
}

int main(int argc, char *argv[])
{
// 设定的开始计算单双周的第一天
int firstWeekYear,firstWeekMonth,firstWeekDay;
// 要查询天
int queryYear,queryMonth,queryDay;
// 相差的天数
int diffDays;
// 相差的周数
int diffWeeks;
printf("输入要设为第一周的日期:");
scanf("%d-%d-%d",&firstWeekYear,&firstWeekMonth,&firstWeekDay);
// 输入要查询的天,按 ctrl + z 退出
printf("输入要查询所在周的日期:");
while(scanf("%d-%d-%d",&queryYear,&queryMonth,&queryDay)!=EOF)
{
diffDays = getDiffDays(queryYear,queryMonth,queryDay) - getDiffDays(firstWeekYear,firstWeekMonth,firstWeekDay);
diffWeeks = getDiffWeeks(queryYear,queryMonth,queryDay) - getDiffWeeks(firstWeekYear,firstWeekMonth,firstWeekDay) + 1;

printf("%4d-%02d-%02d【%s】 是【%s周,第%3d周】。距离 %4d-%02d-%02d【%s】 已经过去了【%3d天】!\n",
queryYear,queryMonth,queryDay,
WEEK_DAYS_NAME[getWeekDay(queryYear,queryMonth,queryDay)],
(diffWeeks%2==1)?"单":"双",
diffWeeks,
firstWeekYear,firstWeekMonth,firstWeekDay,
WEEK_DAYS_NAME[getWeekDay(firstWeekYear,firstWeekMonth,firstWeekDay)],
diffDays
);
}
return 0;
}
/*
输入要设为第一周的日期:2011-9-1
输入要查询所在周的日期:2011-9-1
2011-09-01【星期四】 是【单周,第 1周】。距离 2011-09-01【星期四】 已经过去了【 0天】!
输入要查询所在周的日期:2011-9-2
2011-09-02【星期五】 是【单周,第 1周】。距离 2011-09-01【星期四】 已经过去了【 1天】!
输入要查询所在周的日期:2011-9-3
2011-09-03【星期六】 是【单周,第 1周】。距离 2011-09-01【星期四】 已经过去了【 2天】!
输入要查询所在周的日期:2011-9-4
2011-09-04【星期日】 是【单周,第 1周】。距离 2011-09-01【星期四】 已经过去了【 3天】!
输入要查询所在周的日期:2011-9-5
2011-09-05【星期一】 是【双周,第 2周】。距离 2011-09-01【星期四】 已经过去了【 4天】!
输入要查询所在周的日期:2011-9-11
2011-09-11【星期日】 是【双周,第 2周】。距离 2011-09-01【星期四】 已经过去了【 10天】!
输入要查询所在周的日期:2011-9-15
2011-09-15【星期四】 是【单周,第 3周】。距离 2011-09-01【星期四】 已经过去了【 14天】!
输入要查询所在周的日期:2011-10-1
2011-10-01【星期六】 是【单周,第 5周】。距离 2011-09-01【星期四】 已经过去了【 30天】!
输入要查询所在周的日期:2011-10-15
2011-10-15【星期六】 是【单周,第 7周】。距离 2011-09-01【星期四】 已经过去了【 44天】!
输入要查询所在周的日期:2011-10-30
2011-10-30【星期日】 是【单周,第 9周】。距离 2011-09-01【星期四】 已经过去了【 59天】!
输入要查询所在周的日期:2011-11-1
2011-11-01【星期二】 是【双周,第 10周】。距离 2011-09-01【星期四】 已经过去了【 61天】!
输入要查询所在周的日期:2011-12-1
2011-12-01【星期四】 是【双周,第 14周】。距离 2011-09-01【星期四】 已经过去了【 91天】!
*/