pro1.
#include"stdio.h"
main()
{int k,y,m,min,max,temp,w,z=2;
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
long total;
char b[8];
loop:printf("\n\nPlease input year ,month:"); /*请输入年,月*/
scanf("%d,%d",&y,&m);
if (y%400==0||(y%100!=0&&y%4==0)){a[1]=29;strcpy(b,"Run Nian");} /*判断是平年还是润年*/
else {a[1]=28;strcpy(b,"PingNian");}
if (y>=1980){min=1980;max=y;k=1;}
else{min=y;max=1980;k=-1;}
total=0;
for (temp=min;temp
if (temp%400==0||(temp%4==0&&temp%100!=0)) total=total+366; /*算星期几*/
else total=total+365;
}
for (temp=0;temp
if (k==-1) w=(7-(total-z)%7)%7;
printf("\n%d,%d %s\n",y,m,b);
printf("\nSun Mon Tue Wed Tur Fri Sat\n"); /*输出*/
for (temp=0;temp
{if ((temp-1+w)%7==0) printf("\n"); /*当d/7余数0时是星期天,余数1时是星期一依此类推*/
printf(" %2d ",temp);
}
goto loop;
}
( 要退出的话,请将loop : ,goto loop; 删掉!) 在TC,WinTC 调试OK!
-----------------------------------------------------------------------------------
pro2.
#include "stdio.h"
int m_day(int year,int month)
{
if((year%4==0 && year%100!=0)||(year%400==0))
switch(month)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31 ;
case 4: case 6: case 9: case 11: return 30;
}
else
switch(month)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12 : return 31;
case 2: return 28;
}
}
int main()
{
int year ,month;
int i ,days=0,d,day=0;
printf("Enter the year and month:\n");/*请输入年,月份*/
scanf("%d,%d",&year,&month);
for(i=1;i
d=year-1+(year-1)/4-(year-1)/100+(year-1)/400+days+1; /*算星期几的*/
printf("%d-%d\n",year,month);
printf("Sunday Monday Tuesday Wednesday Thursday Friday Saturday\n");
for(i=0;i
for(i=1;i<7-d%7;i++)
{
day++;
printf("%5d",day);
}
printf("\n");
while(1)
{
for(i=1;i<=7;i++)
{ day++;
if(day>m_day(year,month))
{ getch(); return 0 ;}
printf("%5d",day);
}
printf("\n");
}
}
---------------------------------在TC,WinTC 调试OK!--------------------
归纳算星期几的方法:
1.d=a-1+(a-1)/4-(a-1)/100+(a-1)/400+c;
其中a为年c为该日期在本年中的天数,d取整数,当d/7余数0时是星期天,余数1时是星期一依此类推.
2.(润年*366 + 平年*365)%7
3.W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7
在公式中d表示日期中的日数,m表示月份数,y表示年数.
4.对蔡勒(Zeller)公式的改进作者:冯思琮相比于另外一个通用通用计算公式而言,蔡勒(Zeller)公式大大降低了计算的复杂度。不过,笔者给出的通用计算公式似乎更加简洁(包括运算过程)。现将公式列于其下:W=[y/4]+r (y/7)-2r(c/4)+m’+d公式中的符号含义如下,r ( )代表取余,即只要余数部分;m’是m的修正数,现给出1至12月的修正数1’至12’如下:(1’,10’)=6;(2’,3’,11’)=2;(4’,7’)=5;5’=0;6’=3;8’=1;(9’,12’)=4
(注意:在笔者给出的公式中,y为润年时1’=5;2’=1)。其他符号与蔡勒(Zeller)公式中的含义相同。
蔡勒(Zeller)公式w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1公式中的符号含义如下,w:星期;c:世纪;y:年(两位数); m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算);d:日;[ ]代表取整,即只要整数部分。相比于通用通用计算公式而言,蔡勒(Zeller)公式大大降低了计算的复杂度。
----------------------------------------/总结于2005-12-17 21:14 ^_^
评论