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语言和蔡勒公式写的算某一天是星期几的程序总是不对?

C语言源代码——计算任何一天是星期几

在c语言中使用函数来制作一个万年历,要求,可以知道每个月有多少天,每个月的第一天是星期几

java万年历

谁知道怎么用C语言编写万年历啊

c语言算某天使星期几,使用了蔡勒公式,可是2000年1月1日到2月29日这段时间的反馈结果都是错的,求解~