标题:一个关于年月的程序
只看楼主
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
得分:0 
en,以后要努力呀,祝你早日成功!

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-10-15 17:42
计院人
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2006-10-15
得分:0 
以下是引用卧龙孔明在2006-10-15 17:42:29的发言:
en,以后要努力呀,祝你早日成功!

一定!谢谢


2006-10-15 17:52
编程新贵
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2006-8-11
得分:0 

我编的年月日,楼主参考下,判断星期几的,和你那个差不多

#include<stdio.h>
void main()
{
int y,m,d1,d;
int a[12]={0,3,3,6,1,4,6,2,5,0,3,5};
int b[12]={0,3,4,0,2,5,0,3,6,1,4,6};
printf("请输入年");
scanf("%d",&y);
printf("请输入月");
scanf("%d",&m);
printf("请输入日");
scanf("%d",&d1);

d=y+y/4-y/100+y/400-1;
if((y%4==0)&&(y%100!=0)&&(y%400==0))
d+=b[m-1];
else
d+=a[m-1];

d+=d1;
if(d%7==0)
printf("星期天");
else
printf("星期%d",d%7);
}

2006-10-15 21:34
计院人
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2006-10-15
得分:0 
以下是引用编程新贵在2006-10-15 21:34:32的发言:

我编的年月日,楼主参考下,判断星期几的,和你那个差不多

#include<stdio.h>
void main()
{
int y,m,d1,d;
int a[12]={0,3,3,6,1,4,6,2,5,0,3,5};
int b[12]={0,3,4,0,2,5,0,3,6,1,4,6};
printf("请输入年");
scanf("%d",&y);
printf("请输入月");
scanf("%d",&m);
printf("请输入日");
scanf("%d",&d1);

d=y+y/4-y/100+y/400-1;
if((y%4==0)&&(y%100!=0)&&(y%400==0))
d+=b[m-1];
else
d+=a[m-1];

d+=d1;
if(d%7==0)
printf("星期天");
else
printf("星期%d",d%7);
}

恩,不错!比我编的好多了。不过我想问一下 int a[12]={0,3,3,6,1,4,6,2,5,0,3,5};
int b[12]={0,3,4,0,2,5,0,3,6,1,4,6};
是怎么推出来的?我知道上面一个是平年的,下面一个是润年的
这里面是不是用到什么更深的东西?


2006-10-15 21:48
编程新贵
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2006-8-11
得分:0 
int a[12]={0,3,3,6,1,4,6,2,5,0,3,5};
int b[12]={0,3,4,0,2,5,0,3,6,1,4,6};

1月的天数31%7=3
2月的天数(28+3)=3
3月的天数(31+3)%7=6
4月的天数(30+6)%7=1
以此类推,闰年和不是闰年的区别就在于2月的天数,这样省略了大断的代码
2006-10-15 22:00
菜鸟笨鸟
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2006-9-2
得分:0 
switch语句都没有break;怎么会对

偶是大菜鸟~!
2006-10-15 22:02
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
得分:0 
以下是引用菜鸟笨鸟在2006-10-15 22:02:44的发言:
switch语句都没有break;怎么会对

SWITCH可以没有BREAK;的


羊肉串 葡萄干 哈密瓜!!
2006-10-15 22:11
计院人
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2006-10-15
得分:0 
以下是引用编程新贵在2006-10-15 22:00:13的发言:
int a[12]={0,3,3,6,1,4,6,2,5,0,3,5};
int b[12]={0,3,4,0,2,5,0,3,6,1,4,6};

1月的天数31%7=3
2月的天数(28+3)=3
3月的天数(31+3)%7=6
4月的天数(30+6)%7=1
以此类推,闰年和不是闰年的区别就在于2月的天数,这样省略了大断的代码

还有这个算法啊,以前还没听过呢,太经典了!
容我再问一个白痴的问题0是代表什么?是12月吗?我算出来12月应该为1啊
还有算哪天是星期几,是不是要个基础日期,以他为基础算出其他的(通过某天的情况推算其他的),或者这里面还有什么规律,还请赐教!
我刚才也编了个关于星期几的,就是输入今天是星期几,然后再输入一个天数(可为负),推出那天是星期几,这个就用了“今天”这个基础日期

#include "stdio.h"
int main()
{
int n,m;
printf("今天是星期?{0,6}");
scanf("%d",&m);
if(m>=0&&m<=6)
printf("today is xingqi%d\n",m);//输入今天是星期几,以计算N天过后是星期几
else
{printf("error input\n");
return 0;} //当输入超出范围时返回
printf("input the day:\n");
scanf("%d",&n);
if(n>=0)
n=n%7;
else{ //当输入是负数是,则表示几天前
n=-n;
n=n%7;
n=7-n;}
n=n+m;
n=n%7;
switch(n)
{
case 1:
printf("Monday\n");break;
case 2:
printf("Tuesday\n");break;
case 3:
printf("Wednesday\n");break;
case 4:
printf("Thursday\n");break;
case 5:
printf("Friday\n");break;
case 6:
printf("Saturday\n");break;
case 0:
printf("Sunday\n");break;
}
}


2006-10-15 22:15
编程新贵
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2006-8-11
得分:0 

如果你输入的是1月,那就不需要加前个月的天数了,所以为0
其实a[12]和b[12]里面的每个元素代表的是 该月应该加上的天数,

2006-10-15 22:26
计院人
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2006-10-15
得分:0 
以下是引用编程新贵在2006-10-15 22:26:25的发言:

如果你输入的是1月,那就不需要加前个月的天数了,所以为0
其实a[12]和b[12]里面的每个元素代表的是 该月应该加上的天数,

哦,这个懂了,谢谢啊!
还有那个基点日期的问题,你是怎么理解的?能告诉我吗?或者还有什么其他规律?


2006-10-15 22:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-96515-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.048230 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved