找了找骆驼板书:50分求解c语言!!

来源:百度文库 编辑:高考问答 时间:2024/05/01 17:14:10
2006年任一天星期几?
截至5月29日

先存储1月1号星期几,然后将以后的天数对7取余加上1月1号的。
下面星期日以0表示,其它则星期n用n表示。
2006年1月1号是星期日。
main()
{
int start = 0; //1月1号的星期天
int month, day, week;
int curmon, sumday;
int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
printf("Month=:");
scanf("%d", &month);
printf("Day=:");
scanf("%d", &day);
if (month>12||month<1) return -1; //月份出错
if (days[month-1]<day) return -1; //天数出错

sumday = day;
for (curmon=0;curmon<month-1;curmon++)
{
sumday += days[curmon];
}
sumday--;
week = (sumday + start)%7;
if (!week) week = 7; //将week==0的情况转换成7
printf("month:%d\nday:%d\nweek:%d\n", month, day, week);
system("pause");
return 0;
}
在Dev-CPP下调试通过

这个比较麻烦吧,要是有个数据库可以做

#include <stdio.h>
char W[7][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
int M[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int r[2]={365,366};
int L(int y)
{return(((y%100)&&!(y%4))||!(y%400))?1:0;}
void P(int n)
{if (n<10)
printf("0%d",n);
else printf("%d",n);
}
int main()
{int yr,m,w,dt,n,y;
while(1)
{
printf("Input day:(1-365)\n");
scanf("%d",&n);
n+=2191;
w=(n+6)%7;m=0;
yr=2000;n++;
while(n>r[L(yr)])
n-=r[L(yr++)];
M[1]=(L(yr))?29:28;
while(n>M[m])
n-=M[m++];
printf("The date is below:\n");
printf("%d-",yr);P(m+1);
printf("-"),P(n);
printf(" %s\n",W[w]);
}
return 0;
}

//////////////////////////////////////////////////////////////////
输入说明:输入为数字,例如:如果你输入1,表示的是2006年的第一天,则输出:2006-1-1 sunday
输入:365表明为2006年最后一天 输出为:2006-12-31 sunday
/////////////////////////////////////////////////////////////////

好像不用这么麻烦的,你求出那一天的天数,然后对让它对7取余,找出2006年一月一号市星期几,最后合理安排一下case语句就可以了。

#include <iostream>
using namespace std;
void main()
{
int month,day,cconst,week;
cout<<"请输入2006年的一个月份:";
cin>>month;
cout<<"请输入"<<month<<"的一天:";
cin>>day;
switch(month)
{
case 1:
case 7:cconst=5;break;
case 2:
case 3:
case 11:cconst=2;break;
case 4:
case 10:cconst=6;break;
case 5:cconst=7;break;
case 6:cconst=3;break;
case 8:cconst=1;break;
case 9:
case 12:cconst=4;break;
default:cout<<"输入月错误!"<<endl;
}
week=(cconst+day)%7;
cout<<"2006年"<<month<<"月"<<day<<"日是:星期"<<week<<endl;
}
我是用C++写的,你可以把其中部分语句改为C语言的就可以了.其中没有写防出错机制没有写,你可以自已编写.我只是写一下算法.你不也是需要算法吗?

//先知道一月一日是星期天
#include <stdio.h>
main()
{
int leap,month,day,days,m;
printf("please input the date:\a");
scanf("%d,%d",&month,&day);
printf("the date is 2006,%d,%d\n",month,day);
if((2006%4==0&&2006%100!=0)||(2006%400==0))
leap=1;
else
leap=0;
days=day;
if(leap==1)
{
printf("this year is leap year\n");
if(month-1==0)
days=day;
else
switch(month-1)
{
case 11:days=days+30;
case 10:days=days+31;
case 9:days=days+30;
case 8:days=days+31;
case 7:days=days+31;
case 6:days=days+30;
case 5:days=days+31;
case 4:days=days+30;
case 3:days=days+31;
case 2:days=days+29;
case 1:days=days+31;
}
}
if(leap==0)
{
printf("the year is not leap year\n");
if(month-1==0)
days=day;
else
switch(month-1)
{
case 11:days=days+30;
case 10:days=days+31;
case 9:days=days+30;
case 8:days=days+31;
case 7:days=days+31;
case 6:days=days+30;
case 5:days=days+31;
case 4:days=days+30;
case 3:days=days+31;
case 2:days=days+28;
case 1:days=days+31;

}
}

printf("the date :2006,%d,%d is:%d day in this year\n\a",month,day,days);
m=days%7-1;
if(m==0)
printf("this day is 星期天");
else
printf("this day is 星期%d\n",m);
}
输入3,4(输入月份)
就打印出该天是该年的第几天,并将星期几打印出来