永发信息网

c语言知道日期 算星期几

答案:5  悬赏:0  手机版
解决时间 2021-02-28 15:31
  • 提问者网友:沉默菋噵
  • 2021-02-28 04:51
c语言知道日期 算星期几
最佳答案
  • 五星知识达人网友:老鼠爱大米
  • 2021-02-28 05:54
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==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;
}
}
void 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);
}
}
全部回答
  • 1楼网友:洒脱疯子
  • 2021-02-28 08:40
#include "stdio.h"
main()
{
int y,m,d,a,b;
b=0;
scanf("%d%d%d",&y,&m,&d);
if(m>12||m<0) {b=1; printf("month is error.\n");}
else {if(d<0) {b=1; printf("day is error.\n");}
else{switch(m)
{
case 1: if(d>32) {b=1; printf("day is error.\n");}; break;
case 2: if((y%4==0 && y%100!=0)||(y%400==0)) a=1;
else a=2;
if(a==1&&d>30) {b=1; printf("day is error.\n");}; break;
if(a==2&&d>29) {b=1; printf("day is error.\n");}; break;
case 3: if(d>32) {b=1; printf("day is error.\n");}; break;
case 4: if(d>31) {b=1; printf("day is error.\n");}; break;
case 5: if(d>32) {b=1;printf("day is error.\n");}; break;
case 6: if(d>31) {b=1;printf("day is error.\n");}; break;
case 7: if(d>32) {b=1; printf("day is error.\n");}; break;
case 8: if(d>32) {b=1; printf("day is error.\n");}; break;
case 9: if(d>31) {b=1; printf("day is error.\n");}; break;
case 10: if(d>32) {b=1; printf("day is error.\n");}; break;
case 11: if(d>31) {b=1; printf("day is error.\n");}; break;
case 12: if(d>32) {b=1; printf("day is error.\n");}; break;
}
}
if(m==1||m==2) {
m+=12;
y--;}

if(b==0) {int iWeek=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
switch(iWeek)
{
case 0: printf("1\n"); break;
case 1: printf("2\n"); break;
case 2: printf("3\n"); break;
case 3: printf("4\n"); break;
case 4: printf("5\n"); break;
case 5: printf("6\n"); break;
case 6: printf("0\n"); break;
}
}
system("pause");
}
}
  • 2楼网友:青尢
  • 2021-02-28 07:52
year-1+(float)(year-1)/4+(float)(year-1)/100+(float)(year-1)/400-40+c; 中year-1 而不是-1+,,
(float)(year-1)/100中float是类型转换,year变量本来是整型,year-1)/100会改变类型,所以加上(float)
最后的Printdate()这是函数调用,调用void Printdate()函数,这个函数中有printf输出。追问请问 printdate()会输出哪些? 还有问下 printf("%s\n",str[temp]);这一句是什么意思?追答printfdate()只有printf("%s\n",str[temp])是输出,它输出的内容是str【temp】,而temp在printdate()中是一个整数,也就是输出str数组中的第temp+1个字符串,如果temp=1的话,输出的就是str数组中第二个字符串,也就是星期一。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯