你好!
程序改了,错误很多,都是你粗心造成的,很多都是少了逗号多了分号;
代码发给你,你看看吧,注意后面的注释说明:
#include "stdio.h"
#include// 缺少头文件
main()
{
int y,m,d,a,b;
b=0;
scanf("%d%d%d",&y,&m,&d);
if(m>12||m<0)
{
b=1; // b=1 后面少了逗号
printf("month is error.\n"); // 最后面少了逗号
} // 这里结尾的分号去掉
else
{
if(d<0)
{
b=1;
printf("day is error.\n");// 最后面少了逗号
} // 这里结尾的分号去掉
else
switch(m)
{
case 1: if(d>32) {b=1; printf("day is error.\n");}; break;
// 问题同上,少逗号
case 2: if((y%4==0&&y%100!=0)||(y%400==0)) a=1;
// 这里把 a==1 改成 a=1
else a==2;
// 这里把 a==2 改成 a=2
if(a==1&&d>30) {b=1; printf("day is error.\n");}; break;
// 问题同上,少逗号
if(a==2&&d>29) {b=1; printf("day is error.\n");}; break;
// 问题同上,少逗号
case 3: if(d>32) {b=1; printf("day is error.\n");}; break;
// 问题同上,少逗号
case 4: if(d>31) {b=1; printf("day is error.\n");}; break;
// 问题同上,少逗号
case 5: if(d>32) {b=1; printf("day is error.\n");}; break;
// 问题同上,少逗号
case 6: if(d>31) {b=1; printf("day is error.\n");}; break;
// 问题同上,少逗号
case 7: if(d>32) {b=1; printf("day is error.\n");}; break;
// 问题同上,少逗号
case 8: if(d>32) {b=1; printf("day is error.\n");}; break;
// 问题同上,少逗号
case 9: if(d>31) {b=1; printf("day is error.\n");}; break;
// 问题同上,少逗号
case 10: if(d>32) {b=1; printf("day is error.\n");}; break;
// 问题同上,少逗号
case 11: if(d>31) {b=1; printf("day is error.\n");}; break;
// 问题同上,少逗号
case 12: if(d>32) {b=1; printf("day is error.\n");}; break;
// 问题同上,少逗号
}
}
if(m==1||m==2) {
m+=12;
y--;}
if(b==0) {int iWeek=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
// 这里把 b=0 改成 b==0
switch(iWeek)
{
case 0: printf("1\n"); break;
case 1: printf("2\n"); break;
case 2: printf("3\n"); break;
case 3: printf("4\n"); break;
case 4: printf("5\n"); break;
case 5: printf("6\n"); break;
case 6: printf("0\n"); break;
}
}
system("pause");
}
#include "stdio.h"
main()
{
int y,m,d,a,b;
b=0;
scanf("%d%d%d",&y,&m,&d);
if(m>12||m<0) {b=1; printf("month is error.\n");}
else {if(d<0) {b=1; printf("day is error.\n");}
else{switch(m)
{
case 1: if(d>32) {b=1; printf("day is error.\n");}; break;
case 2: if((y%4==0 && y%100!=0)||(y%400==0)) a=1;
else a=2;
if(a==1&&d>30) {b=1; printf("day is error.\n");}; break;
if(a==2&&d>29) {b=1; printf("day is error.\n");}; break;
case 3: if(d>32) {b=1; printf("day is error.\n");}; break;
case 4: if(d>31) {b=1; printf("day is error.\n");}; break;
case 5: if(d>32) {b=1;printf("day is error.\n");}; break;
case 6: if(d>31) {b=1;printf("day is error.\n");}; break;
case 7: if(d>32) {b=1; printf("day is error.\n");}; break;
case 8: if(d>32) {b=1; printf("day is error.\n");}; break;
case 9: if(d>31) {b=1; printf("day is error.\n");}; break;
case 10: if(d>32) {b=1; printf("day is error.\n");}; break;
case 11: if(d>31) {b=1; printf("day is error.\n");}; break;
case 12: if(d>32) {b=1; printf("day is error.\n");}; break;
}
}
if(m==1||m==2) {
m+=12;
y--;}
if(b==0) {int iWeek=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
switch(iWeek)
{
case 0: printf("1\n"); break;
case 1: printf("2\n"); break;
case 2: printf("3\n"); break;
case 3: printf("4\n"); break;
case 4: printf("5\n"); break;
case 5: printf("6\n"); break;
case 6: printf("0\n"); break;
}
}
system("pause");
}
}
补充一个错误,下面回答同理
case 3: if(d>32) {b=1 printf("day is error.\n")}; break;
case 4: if(d>31) {b=1 printf("day is error.\n")}; break;
case 5: if(d>32) {b=1 printf("day is error.\n")}; break;
case 6: if(d>31) {b=1 printf("day is error.\n")}; break;
case 7: if(d>32) {b=1 printf("day is error.\n")}; break;
case 8: if(d>32) {b=1 printf("day is error.\n")}; break;
case 9: if(d>31) {b=1 printf("day is error.\n")}; break;
case 10: if(d>32) {b=1 printf("day is error.\n")}; break;
case 11: if(d>31) {b=1 printf("day is error.\n")}; break;
case 12: if(d>32) {b=1 printf("day is error.\n")}; break;
这一段代码if后面的条件全部大了1,限制值应该是31和30,除非你改成>=
if(b=0)错了。。
C语言根据日期判断星期几(使用基姆拉尔森计算公式)
算法如下:
基姆拉尔森计算公式
W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7
在公式中d表示日期中的日数,m表示月份数,y表示年数。
注意:在公式中有个与其他公式不同的地方:
把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。
以公元元年为参考,公元元年1月1日为星期一
程序如下:
#include "stdio.h"
void CaculateWeekDay(int y,int m, int d)
{
if(m==1||m==2) {
m+=12;
y--;
}
int iWeek=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
switch(iWeek)
{
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;
}
}
void main()
{
int year=0,month=0,day=0;
printf("请输入日期:\n格式为:1900,1,1\n");
char temp = '1';
while (temp != '0')
{
scanf("%d,%d,%d",&year,&month,&day);
scanf("%c",&temp);
CaculateWeekDay(year,month,day);
printf("输入0退出,其他继续:");
scanf("%c",&temp);
}
}