已知公元1年1月1日是星期一,计算输入的年月日是星期几?(用C语言编写)

思路:计算出输入的年月日和公元1年1月1日距离多少天。
计算公元1年到输入日期的上一年年底有多少天。
再计算输入的年的1月到上月月底有多少天。
再加上输入日期的天数。
其中闰年满足:
(year%4==0)&&(year%100!=0)||(year%400==0)

第1个回答  2007-09-15
我只是刚学C语言,下面的程序仅供参考,上面的结果有问题。
int n=0; /*定义外部变量n*/
int year(int x)
{int i,y=0;
for(i=1;i<=x;i++)
{if(i%4==0&&i%100!=0||i%400==0)
{y++;
n=1;
}
else n=0;
}
return(y); /*y是计算出其中有多少个闰年,n是算出最后一年是不是闰年*/
}
int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int sum_day(int y,int y1,int m,int d)
{int i,day=0;
for(i=1;i<m;i++)
day+=day_tab[i];
day=day+d-1+(y1-1)*2+y; /*减1是减去了1月1日那一天,乘2是因为365除7余2*/
if(n==1&&m<3)
day--;
return(day);
}
#include<stdio.h>
main()
{int year1,month1,day1,y,day,s;
printf("year/month/day:");
scanf("%d/%d/%d",&year1,&month1,&day1);
y=year(year1);
day=sum_day(y,year1,month1,day1);
s=day%7+1;
printf("%d/%d/%d=%d\n",year1,month1,day1,s);
getchar(); /*两个getchar是为了运行后可看到结果*/
getchar();
}
第2个回答  2023-05-08
我没有多高文凭,但我知里在公元1月1日是儒略历和奥古斯都历中都星期日,是公历编制的历法中应该是星期五。
第3个回答  2021-09-10
#include <stdio.h>
int main()
{

int i = 0,year, month, day;
int j, sum1=1, sum2=1,sum = 0;
int flag = 1; int flag1 = 1;
printf("please input year,month,day:");
do
{
scanf_s("%d,%d,%d", &year, &month, &day);
} while (month < 1 || month>12);
int days[][12] = { {31,28,31,30,31,30,31,31,30,31,30,31}
,{31,29,31,30,31,30,31,31,30,31,30,31} };

for (j = 1; j < year; j++)
{
if (j % 4 == 0 && j % 100 != 0 || j % 400 == 0)
{
sum1 = flag * 366;
flag++;
}

else
{

sum2 = 365 * flag1;
flag1++;
}

}

if (month == 1)
;
//printf("该日期是今年的%d天\n", day);
else if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
for (i = 0; i < month - 1; i++)
{

sum = sum + days[1][i];
}

day = sum + day;

//printf("%d\n", day);

}

else
{
for (i = 0; i < month - 1; i++)
{

sum = sum + days[0][i];
}

day = sum + day;

//printf("%d\n", day);

}

sum = sum1 + sum2 + day;
sum = sum % 7;
switch (sum)
{
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;

default:printf("error occurred\n"); break;

}

}
第4个回答  2007-09-15
#include <stdio.h>
main()
{
long year,month,day;
long totalday;
int week;
int monthday[12]={0,31,59,90,120,151,181,212,243,273,304,334};
int monthdayLeap[12]={0,31,60,91,121,152,182,213,244,274,305,335};
char * weekname[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};

printf("Please input Year Month Day:");
scanf("%ld %ld %ld",&year,&month,&day);

totalday=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400;

if((year%4==0)&&(year%100!=0)||(year%400==0))
totalday+=monthdayLeap[month-1];
else
totalday+=monthday[month-1];

totalday+=day;

week=totalday%7;

printf("%ld,%s\n",totalday,weekname[week]);

}

这里totalday的最后结果公元1年1月1日等于1。本回答被提问者采纳
相似回答