
高手帮我写个C语言程序好吗 谢谢了
请高手帮我写一个C语言谢谢了要求不要用到指针谢谢了。给出个公式N=d+2m+[3(m+1)/5]+y+[y/4]-[y/100]+[y/400]+2这个公式是求一个确定的...
请高手帮我写一个C语言 谢谢了 要求不要用到指针谢谢了。
给出个公式N = d + 2m + [3(m+1)/5] + y +[y/4] - [y/100] + [y/400] + 2
这个公式是求一个确定的日期是星期几的。 y m d 分别代表年月日。 有个例外如果月份是1月2月必须用13和14来代入。 通过代入得到的N除以7得到的余数0是星期六1是星期天依此类推。
举个例子 1998年3月18日 就用y=1998 m=3 d=18 如果是1998年2月18就用y=1998 m=14 d=18来代入
中括号里面的内容只取整数 比如括号内的运算是499.5只取400 谢谢了。。
如果我表达的不够清楚 请加我QQ谢谢 396624289 展开
给出个公式N = d + 2m + [3(m+1)/5] + y +[y/4] - [y/100] + [y/400] + 2
这个公式是求一个确定的日期是星期几的。 y m d 分别代表年月日。 有个例外如果月份是1月2月必须用13和14来代入。 通过代入得到的N除以7得到的余数0是星期六1是星期天依此类推。
举个例子 1998年3月18日 就用y=1998 m=3 d=18 如果是1998年2月18就用y=1998 m=14 d=18来代入
中括号里面的内容只取整数 比如括号内的运算是499.5只取400 谢谢了。。
如果我表达的不够清楚 请加我QQ谢谢 396624289 展开
3个回答
展开全部
首先 你这个公式不对
这个公式名字叫做基姆拉尔森计算公式
其正确公式为
W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1) mod 7
原本公式得到的是0-6 星期六到星期日 这个不是很常规的方式 常规为0-6为星期日到星期一
不过按照原本公式计算也同样可以
其次 有几处你的理解不正确
1. 月份是1/2两个月时 不是简单的改成13 14 而是当做上一年的13 14月,即这种情况下 年需要减一
这样 1998-2-18 需要y=1997 m=14 d=18
2. 中括号里面的内容只取整数 指的是整数部分 即499.5取499 而不是400
这样程序如下
#include <stdio.h>
void main()
{
int y=2013,m=1,d=1;
int w;
char *weekday[7]={"Saturday", "Sunday","Monday","Tuesday","Wednesday","Thursday","Firday"};
printf("input data: year month day:");
scanf("%d%d%d", &y,&m,&d);
if (m==1 || m==2)
m+=12, y--;
w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+2)%7;
printf("%s\n",weekday[w]);
}
追问
高手啊,都发现我的解释错误了。。。但是这个程序不用指针可以写吗?
追答
字符数组怎么样?
#include <stdio.h>
void main()
{
int y=2013,m=1,d=1;
int w;
char weekday[7][20]={"Saturday", "Sunday","Monday","Tuesday","Wednesday","Thursday","Firday"};
printf("input data: year month day:");
scanf("%d%d%d", &y,&m,&d);
if (m==1 || m==2)
m+=12, y--;
w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+2)%7;
printf("%s\n",weekday[w]);
}
展开全部
#include<stdio.h>
void main()
{
int N,y,d,m;
printf("输入年月日:");
scanf("%d,%d,%d",&y,&m,&d);
if(m==1||m==2)
m+=12;
N = d + 2*m + 3*(m+1)/5 + y +y/4 - y/100 + y/400+ 2;
int anw;
anw=(N+6)%7;
printf("星期%d\n",anw);
}
我自己写的,你检查一下,
void main()
{
int N,y,d,m;
printf("输入年月日:");
scanf("%d,%d,%d",&y,&m,&d);
if(m==1||m==2)
m+=12;
N = d + 2*m + 3*(m+1)/5 + y +y/4 - y/100 + y/400+ 2;
int anw;
anw=(N+6)%7;
printf("星期%d\n",anw);
}
我自己写的,你检查一下,
更多追问追答
追问
可以把中文都改成英文吗 就是输出的结果printf那儿改成英文 我新手不知道怎么改。。就是如果输出结果改成英文 岂不是要printf7个结果还要用到语句?
追答
没看明白你什么意思。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
好几年没有接触C了 都是用一些高级语言 简单 有效
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询