小伙伴关心的问题:输入某年某月某日,判断这一天是这一年的第几天?(编写程序输入某年某月某日判断这一天是这一年的第几天),本文通过数据整理汇集了输入某年某月某日,判断这一天是这一年的第几天?(编写程序输入某年某月某日判断这一天是这一年的第几天)相关信息,下面一起看看。

输入某年某月某日,判断这一天是这一年的第几天?(编写程序输入某年某月某日判断这一天是这一年的第几天)

#include<stdio.h>#include <time.h>int main( ) { int add1[12]={1,2,3,4,5,6,7,8,9,10,11,12}; int add2[12]={31,28,31,30,31,30,31,31,30,31,30,31}; //数组方便 int y,m,d,w,c,sum,i,j,k,Y,M; printf("请输入xxxx-xx-xx\n"); while(1) { sum=0; scanf("%d-%d-%d",&y,&m,&d); //输入年月份 sum+=d; if(m==1||m==2) { M=m+12; Y=y-1; } else M=m; c=Y/100; Y=Y%100; w=((Y+Y/4+c/4-2*c+26*(M+1)/10+d-1)%7+7)%7;//多加一步,防止w是负数的情况 printf("%d-%02d-%02d",y,m,d); switch(w) { 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; } for(i=1;i<m;i++) {for(j=0;j<12;j++) { if(i==add1[j]) d=add2[j]; } if(i==2) { if(y%4==0&&y%100!=0||y%400==0) d=d+1; } sum +=d; } printf("这一年的第%d天\n",sum); int localyear,localmonth,localday,sum2=0; //以下是用来获取当地时间的 time_t t; struct tm *local; t=time(NULL); local=localtime(&t); localyear=local->tm_year+1900; /*localmonth=local->tm_mon+1;*/ localday=local->tm_yday+1; //可求出今年过去的天数 for(k=y;k<localyear;k++)//注意年份是闰年的情况 { if(k%4==0&&k%100!=0||k%400==0) sum2 +=366; else sum2 +=365; } printf("局今年%d天\n",sum2-sum+localday); } return 0; }

蔡勒公式说明:

w=(y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1 )%7

公式中的符号含义如下:

-w:结果,星期几。

-c:世纪(两位数,y除于100);

-y:年(两位数,y模于100);

-m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算);

-d:日;

-[ ]代表取整,即只要整数部分。

测试结果

//有函数的 #include<stdio.h>#include <time.h>int weekday(int y,int m,int d) {int w,c; if(m==1||m==2) { m+=12; y=y-1; } c=y/100; y=y%100; w=((y+y/4+c/4-2*c+26*(m+1)/10+d-1)%7+7)%7; return (w);} int main( ) { int add1[12]={1,2,3,4,5,6,7,8,9,10,11,12}; int add2[12]={31,28,31,30,31,30,31,31,30,31,30,31}; int y,m,d,sum,i,j,k; printf("请输入xxxx-xx-xx\n"); while(1) { sum=0; scanf("%d-%d-%d",&y,&m,&d); sum+=d; printf("%d-%02d-%02d",y,m,d); switch(weekday(y,m,d)) { 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; } for(i=1;i<m;i++) {for(j=0;j<12;j++) { if(i==add1[j]) d=add2[j]; } if(i==2) { if(y%4==0&&y%100!=0||y%400==0) d=d+1; } sum +=d; } printf("这一年的第%d天\n",sum); int localyear,localmonth,localday,sum2=0; time_t t; struct tm *local; t=time(NULL); local=localtime(&t); localyear=local->tm_year+1900; localday=local->tm_yday+1; //可求出今年过去的天数 for(k=y;k<localyear;k++) { if(k%4==0&&k%100!=0||k%400==0) sum2 +=366; else sum2 +=365; } printf("局今年%d天\n",sum2-sum+localday); } return 0; }

(努力学习,天天向上)

更多输入某年某月某日,判断这一天是这一年的第几天?(编写程序输入某年某月某日判断这一天是这一年的第几天)相关信息请关注本站,本文仅仅做为展示!