c语言编写万年历时计算每月第一天是星期几的公式是啥
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 <stdio.h>void CaculateWeekDay(int y,int m, int d)
if(m<=2)
m+=12;
y--;
int iWeek=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
switch(iWeek)
case 0: printf("星期一\\n"); break;
case 1: printf("星期二\\n"); break;
case 2: printf("星期三\\n"); break;
case 3: printf("星期四\\n"); break;
case 4: printf("星期五\\n"); break;
case 5: printf("星期六\\n"); break;
case 6: printf("星期日\\n"); break;
void main()
CaculateWeekDay(2015,10,1);
参考技术A //#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
int main(void)
int y,g;
char *w[7]="Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday";
char s[4]=0,5,3,1;//需要用这个表协助一下
while(1)
printf("Input year...\\ny=");
if(scanf("%d",&y) && y>0)
break;
printf("Error, Year must be greater than 0: ");
g=((y%100+y%100/4)%7+s[y/100%4]-(y%4==0 && y%100!=0 || y%400==0))%7;//这就是公式
printf("%d-1-1 is %s\\n",y,w[g]);
return 0;
参考技术B #include "stdio.h"
void CaculateWeekDay(int y,int m, int d)
if(m==1||m==2)
m+=12;
y--;
int iWeek=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
switch(iWeek)
case 0: printf("星期一\n"); break;
case 1: printf("星期二\n"); break;
case 2: printf("星期三\n"); break;
case 3: printf("星期四\n"); break;
case 4: printf("星期五\n"); break;
case 5: printf("星期六\n"); break;
case 6: printf("星期日\n"); break;
int main()
int year=0,month=0,day=0;
printf("请输入日期:\n格式为:1900,1,1\n");
char temp = '1';
while (temp != '0')
scanf("%d,%d,%d",&year,&month,&day);
scanf("%c",&temp);
CaculateWeekDay(year,month,day);
printf("输入0退出,其他继续:");
scanf("%c",&temp);
参考技术C /*打印任意年份的月历*/
/*****Calendar.c*****/
#include<stdio.h>
#include<stdlib.h>
int week(int year,int month); //函数原型 该函数用以返回某年某月1号的星期及
int days(int year,int month); //该函数用来返回该月的天数
int main(void)
int y,m;
int da,we;
printf("Please enter Year and Month:[1900.1.1--]\n"); //1900.1.1为星期一,以此为初始
scanf("%d%d",&y,&m);
da=days(y,m);
we=week(y,m);
//printf("%d\n\n",we);
printf("Sun\tMon\tTue\tWed\tThu\tFri\tSat\n");
int i; int day[40];
int k=1;
for(i=0;i<we;i++)day[i]=0;
for(i=we;i<(da+we);i++)day[i]=k;k++;
i=0;
for(;i<(da+we);)
for(k=1;k<=7;k++)
if(day[i]==0)printf(" \t");
else printf("%3d\t",day[i]);
i++;
if (i>=da+we)break;
printf("\n");
printf("\n");
system("PAUSE");
return 0;
//返回星期函数
int week(int year,int month)
int sum=0,i,count=0;
for(i=1900;i<year;i++)if(days(i,2)==29)count++;
for(i=0;i<month;i++)sum+=days(year,i);
return((sum+count+(year-1900)*365-1)%7);
//返回天数函数
int days(int year,int month)
int m[]=31,28,31,30,31,30,31,31,30,31,30,31;
//判断是否闰年
if((year%4==0&&year%100!=0)||year%400==0)m[1]=29;
return(m[month-1]);
C语言 求不吉利日期
Description在国外,每月的13号和每周的星期5都是不吉利的。特别是当13号那天恰好是星期5时,更不吉利。已知某年的一月一日是星期w,并且这一年一定不是闰年,求出这一年所有13号那天是星期5的月份,按从小到大的顺序输出月份数字。(w=1..7)Input输入有一行,即一月一日星期几(w)。(1<=w<=7)Output输出有一到多行,每行一个月份,表示该月的13日是星期五。 Sample Input7 Sample Output110
我给思路你把:首先只要计算出每个月的第一天是星期几就行:如果是星期7则13号为星期5,这是固定的。1 month为月, 第一天星期为week,如果week为7,输出month,否则直接进入下一步;2 month++,如果month>12 程序退出,如果month为大月,week=(week+4)%7, 如果month为小月, week=(week+3)%7,如果week==2,week不变, 重复第一步;加粗部分为计算下一月第一天的星期,为什么如此自己思考下。最好自己动手写程序。 参考技术A #include<stdio.h>#include<stdlib.h>
void panduan(int i,int num);
int i, num;
void main()
int w;//(13+w-1)%7==5
printf("输入w");
scanf("%d",&w);
i=1;
num=(13+w-1);
panduan( i, num);i++;
num=num+31;
panduan( i, num);i++;
num=num+28;
panduan( i, num);i++;
num=num+31;
panduan( i, num);i++;
num=num+30;
panduan( i, num);i++;
num=num+31;
panduan( i, num);i++;
num=num+30;
panduan( i, num);i++;
num=num+31;
panduan( i, num);i++;
num=num+31;
panduan( i, num);i++;
num=num+30;
panduan( i, num);i++;
num=num+31;
panduan( i, num);i++;
num=num+30;
panduan( i, num);i++;
void panduan(int i,int num)
if(num%7==5)
printf("%d \n",i);<br>
以上是关于c语言编写万年历时计算每月第一天是星期几的公式是啥的主要内容,如果未能解决你的问题,请参考以下文章
急~~~~~~为啥我用C语言和蔡勒公式写的算某一天是星期几的程序总是不对?