编写一个c程序,输入年月日,就能回答那天是星期几。

输入日期,包括年、月、日。(测试数据连续输入,当输入0 0 0 时,结束程序运行。)
1、已知公元1年1月1日是星期一。
2、输出时用英文表示星期几。
3、用户多次循环输入数据并计算可采用while语句实现。
另外,在学校oj平台要能通过。

#include <stdio.h>
int main()
{
int n,y,r,i,j,m,a=0,b=0,sum;
int Month[]={0,31,0,31,30,31,30,31,31,30,31,30,31},Year[10000];
char W[][10]={
{'S','u','n','d','a','y'},
{'M','o','n','d','a','y'},
{'T','u','e','s','d','a','y'},
{'W','e','n','d','e','s','d','a','y'},
{'T','h','u','r','s','d','a','y'},
{'F','r','i','d','a','y'},
{'S','a','t','u','r','d','a','y'}
};
scanf("%d %d %d",&n,&y,&r);
for(i=1;i<=(n-1);i++)
{
if(i%4==0&&i%100!=0 || i%400==0)
{Year[i]=366;}
else
{Year[i]=365;}
}
if(i%4==0&&i%100!=0 || i%400==0)
{Month[2]=29;}
else{Month[2]=28;}
for(j=0;j<=(y-1);j++)
{
b=b+Month[j];
}
for(i=1;i<=(n-1);i++)
{
a=a+Year[i];

}
m=(a+b+r)%7;

printf("%s\n",W[m]);

return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-14
哥们,别用什么循环了,效率低。直接用公式,线性时间内求出结果。
公式链接: http://baike.baidu.com/view/598757.html?wtp=tt
第2个回答  2019-04-21
【数据结构】:
建议用结构体链表,不过全局变量也行,反正不大,没记忆功能无所谓
(1)必须要有
年份变量、月份变量、日期变量、星期变量、闰年标识
(2)必须要有
年份、月份、闰年标志以及日期临时变量、星期临时变量
【算法】:
(1)判断年份输入是否正确y>0&&y<=2011?对的继续,错的重输
(2)判断月份输入是否正确m>0&&m<13?对的继续,空的直接转到输出一年日历,错的重输
(3)判断日起输入是否正确d>0&&d<32?错的重输,对的继续判断
if(m!=2){
if((m==4||m==6||m==9||m==11))&&d>30)printf(错误重输)
}
else{
if(y不是闰年&&d>28)
printf(错误重输)
else
i=1;//这个i应该是闰年标志flag把
}
(4)计算星期几
(5)循环输出
while(需要输出整年日历&&没有输出完毕){
输出当月日历;
月份++;
最后一天是30?31?28?29?确定;
第一天是星期几确定(以及前面空几格);

【主要函数】:
(1)年月日判断
(2)星期判断
(3)日历循环输出
分开来是因为这样干净看得清楚,全放在一块儿,到时候有很多重复的程序段,调试起来你会崩溃的……
注意:
(1)注意题目要求,输入年份就要输出一年份的日历,就是说你在判断月份的时候是不是还要加个空条件判断?用int
的话最好先全初始化为0,不然不好判断。
(2)后边那个while(1);一点用都没有,这程序是你写的还是程序改错题要你改的?
第3个回答  2012-03-15
...
第4个回答  2012-03-14
相似回答