C语言;输入任意年月日,得出周几?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言;输入任意年月日,得出周几?相关的知识,希望对你有一定的参考价值。

以2000年 01月 02日 周7为基准点。
#include<stdio.h>
main()

int n,y,r,m,s,t=0,x;
scanf("%d%d%d",&n,&y,&r);
if(y=1) t=r;
if(y=2) t=31+r;
if(y>2)
t=t+31;
if((n%4==0)&&(n%100!=0)||(n%400==0))
t=t+29+r;
else t=t+28+r;
for(s=3;s<y;s++)

if((s<8&&s%2==1)||(s>7&&s%2==0)) t=t+31;
else t=t+30;


/* 相距天数总为T天 */
if(n>2000)

for(s=2000;s<n;s++)

if((s%4==0)&&(s%100!=0)||(s%400==0)) t=t+366;
else t=t+365;

x=(t-2)%7;

if(n<1999)

for(s=1999;s>n;s--)

if((s%4==0)&&(s%100!=0)||(s%400==0)) t=t+366;
else t=t+365;

if((n%4==0)&&(n%100!=0)||(n%400==0))
t=(t>366)?t-366:366-t;
else t=(t>365)?t-365:365-t;
x=7-(t+2)%7;

if(n=1999) t=365-t; x=7-(t+2)%7;
if(n=2000)

if(t>=2) x=(t-2)%7;
else x=(2-t)%2;

printf("%d",x);
getch();


这样做出来这么不对?...请指正、、
能给个简单的吗? 不能用数组一一列出。。....
额。。 stone_dongdong - 大哥,你认为一个刚看书的人,懂这些名词吗?

#include"stdio.h"
struct Date

int year;
int month;
int day;
;

int f(int x)

if(x%4==0&&x%100!=0||x%400==0) return 366;
else return 365;


int isleap(int x)

if(x%4==0&&x%100!=0||x%400==0) return 1;
else return 0;


int s(int a,int b,int c,int d,int year)

int array[2][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;
int cha=0,i;
if(a<c||a==c&&b<d)

for(i=a;i<c;i++)
cha+=array[isleap(year)][i-1];
cha+=d-b;
return cha;

else

for(i=c;i<a;i++)
cha+=array[isleap(year)][i-1];
cha+=b-d;
return -cha;


int tianshu(struct Date a,struct Date b)//计算两个日期相差的天数

int i,tian=0;
if(a.year<b.year)

for(i=a.year;i<b.year;i++)
tian+=f(i);
tian+=s(a.month,a.day,b.month,b.day,b.year);

else

for(i=a.year;i<b.year;i++)
tian-=f(i);
tian+=s(a.month,a.day,b.month,b.day,b.year);

return tian;

void jieguo(int a)

if(a==0) printf("这一天是星期天\n");
if(a==1) printf("这一天是星期一\n");
if(a==2) printf("这一天是星期二\n");
if(a==3) printf("这一天是星期三\n");
if(a==4) printf("这一天是星期四\n");
if(a==5) printf("这一天是星期五\n");
if(a==6) printf("这一天是星期六\n");
if(a==7) printf("这一天是星期天\n");


int main()

int tian;
struct Date now=2009,4,12;//选择一天作为基准
struct Date chaxun;
printf("请输入你想查询的日期\n");
scanf("%d%d%d",&chaxun.year,&chaxun.month,&chaxun.day);
tian=tianshu(now,chaxun);
if(tian>=0)

jieguo(tian%7);

else

jieguo(7-((-tian)%7));

return 0;
参考技术A 笨啊,直接用操作系统的 datetime 来构造一个时间对象不就行了么。
否则这些计算规则那么复杂,很容易出错的。
(我想除了VC,别的任何编译器都有时间类吧)

VC 有ATL 的 COleDateTime,MFC 的CTime;
构造很简单的看MSDN吧。
然后通过成员就能取星期值了
参考技术B 主要是闰年的判断

计算年月天数

0 引言

输入年份与月份显示出当月的天数,可以方便的找出天数,方便统计更加的快速。

1 问题

输入年份与当年的有月份得出当月的天数

示列

输入:2002 1

输出:31

2 方法

1在键盘输入年份与月份

2用if语句将大月得出31天,小月为30天

3再判断二月是否为闰年,闰年输出28,不是闰年输出29。

3 实验结果与讨论

通过实验、实践等证明提出的方法是有效的,是能够解决开头提出的问题。

代码清单 1

YearAndMonth=input('请输入年和月:')
YearAndMonth= YearAndMonth.split(' ')
YearAndMonth=[int(x) for x in YearAndMonth]
if YearAndMonth[1] in [1,3,5,7,8,10,12]:
   print('31')
elif YearAndMonth[1] in [4,6,9,11]:
   print('30')
else:
   if YearAndMonth[0] % 400==0 or (YearAndMonth[0] % 4==0 and YearAndMonth[0] % 100!=0):
       print('29')
   else:
       print('28')

4 结语

针对天数计算问题,提出if语句再加if语句方法,通过if语句的缩进将条件语句很好的使用,多条件的使用可以更加的精确得得出想要的结果。

以上是关于C语言;输入任意年月日,得出周几?的主要内容,如果未能解决你的问题,请参考以下文章

[ C ]根据年月日判断周几(基姆拉尔森计算公式)

用C语言输入年月日,输出距今天还有多少天,星期几,是不是是公历节日

php输出星期几

仿微信 时间转换成昨天,前天,周几,年月日等

python计算天数包含几周几天

计算周几的程序(基姆拉尔森公式)