C语言题目求解

已知2009年1月1日是星期四,任意输入2009年的某天(某月某日),判断改天是星期几。

#include<stdio.h>
main()
{ int y,y1,m,m1,d,d1,w1,w2,w3,e,i,i2,i3,i4,i5,i6,j,t,s=1,i1,b,z;
float j1,j2,n1,n2,p,k,v; clrscr();
for(i=1;i<=30;i++) printf(" ");printf("*** welcome ***\n");
for(j=1;;j++)
{
printf("Please Input year month date:\n");
scanf("%d%d%d",&y1,&m1,&d1);
j1=y1%4; j2=y1%100;i=y1%400; y=1; m=1;d=1; w1=6;v=m1%2;
if(m1!=2) { if(m1<=7) { if(v==0) t=30; if(v!=0) t=31;}
if(m1>7) { if(v==0) t=31; if(v!=0) t=30;}}
if(m1==2) { if((j1==0&&j2!=0)||i==0) t=29; else t=28;}
if(y1<1||m1<1||m1>12||d1<1||d1>31) { printf("Input error\n\n");}
else {
for(y=2000;y<y1;y++)
{ n1=y%4;n2=y%100;k=y%400;
if((n1==0&&n2!=0)||k==0) w1=w1+2;else w1=w1+1;
if(w1==8) w1=1;if(w1==9) w1=2;
}
for(m=1;m<m1;m++)
{ p=m%2;
if(m!=2) { if(m<=7) { if(p==1) w1=w1+3; if(p==0) w1=w1+2;}
else { if(p==1) w1=w1+2; if(p==0) w1=w1+3;}
}
if(m==2) { if((j1==0&&j2!=0)||i==0) w1=w1+1; else w1=w1;}
if(w1==8) w1=1;if(w1==9) w1=2;if(w1==10) w1=3;
}
for(d=1;d<=d1;d++)
{ if(d==1) { w1=w1;w2=w1;} else w1=w1+1; if(w1==8) w1=1;if(w1==9) w1=2;
}
if(m1==2&&d1>29) printf("Inout error\n\n");
if(j1!=0&&i!=0&&m1==2&&d1>28) printf("Input error\n\n");
else{
switch(w1)
{ case 1: printf("Monday "); break;
case 2: printf("Tuesday "); break;
case 3: printf("Wednesday ");break;
case 4: printf("Thursday ");break;
case 5: printf("Friday "); break;
case 6: printf("Sturday "); break;
case 7: printf("Sunday "); break;
}
if(d1==1&&m1==1) printf(" ** New year's day **");
if(m1==2&&d1==14) printf(" ** Saint Valentine,s Day **");
if(m1==5&&d1==1) printf(" ** Labor day **");
if(m1==6&&d1==1) printf(" ** Chilren's Day **");
if(m1==12&&d1==25) printf(" ** Christmas Day **");
if(m1==9&&d1==10) printf(" ** Teacher's Day **");
if(m1==4&&d1==1) printf(" ** April Fool's Day **");
if(m1==10&&d1==1) printf(" ** Independence Day **");
if(m1==3&&d1==8) printf(" ** Women's Day **");
if(m1==5&&d1==4) printf(" ** Youth Day **");
}
printf("\n\n");
/* kaishi*/ for(y=1;y<=y1;y++) {if(y==1) s=1; else s=s+1; if(s==13) s=1;}
printf("Do you want to print calendars? 1--Yes 2--Only search 3--over:");
scanf("%d",&b); printf("\n");
if(b==1)
{ for(i1=0;i1<38;i1++) printf(" ");
printf("%d\n",y1);
for(i2=0;i2<44;i2++) printf(" ");
printf("%d ",m1);
switch(s)
{ case 1: printf("Monky year\n\n");
case 2: printf("Chiken year\n\n");break;
case 3: printf("Dog year\n\n");break;
case 4: printf("Pig year\n\n");break;
case 5: printf("Mouse year\n\n");break;
case 6: printf("Cattle year\n\n");break;
case 7: printf("Tiger year\n\n");break;
case 8: printf("Rabbit year\n\n");break;
case 9: printf("Dragon year\n\n");break;
case 10: printf("Snake year\n\n");break;
case 11: printf("Horse year\n\n");break;
case 12: printf("Sheep year\n\n");break;
}
for(i3=0;i3<24;i3++) printf(" ");
printf("Sun Mon Tue Wed Thu Fri Sat\n\n");
for(i4=0;i4<24;i4++) printf(" ");
if(w2!=7) { for(i5=0;i5<(5*w2)-3;i5++) printf(" ");
}
w3=w2;
for(i6=1;i6<=t;i6++)
{ printf("%5d",i6);
if(i6==1) w3=w3;
else w3+=1;
if(w3==6) { printf("\n\n");
for(z=0;z<21;z++) printf(" ");}

if(w3==8) w3=1;
}
}
if(b==2) continue;
if(b==3) { printf(" thanks\n\n bye-bye");getch();exit();}

if(b!=1&&b!=2&&b!=3) break;
printf("\n\n\n\n Do you want to go on? 1--Yes 2--No\n");
scanf("%d",&e);
if(e==2)
{printf(" thanks\n\n welcome to use again\n\n bye-bye"); break;}
if(e==1) continue;
if(e!=1&&e!=2) { printf(" Sorry\n\n Input error\n\n bye-bye");break;}
}
} getch();
} /*Y=89,y=121,n=110 N=78*/



这是我以前写的一个程序可能对你有用,呵呵
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-06-15
给你写了个函数,直接调就行了

// 输入值:几月几号,返回值:星期几(1-7)
int GetDay(int month, int date)
{
const int INITDAY = 3; // 2008年12月31日是星期三
int monthDays[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 每个月份的天数
if (month < 1 || month > 12) return -1; // 检查月份是否符合要求
if (date < 1 || date > monthDays[month - 1]) return -1; // 检查日期是否符合要求
int pastDays = 0; // 某天距2008年12月31日有多少天
for (int i = 0; i < month - 1; i++) pastDays += monthDays[i];
pastDays += date;
int day = (pastDays + INITDAY) % 7;
if (day == 0) day = 7;
return day;
}