2006.10.23+++

来源:互联网 发布:js判断复选框是否选中 编辑:程序博客网 时间:2024/05/01 03:41
#include<stdio.h>
#define Sunday     0
#define Monday     1
#define Tuesday    2
#define Wednesday  3
#define Thursday   4
#define Firday     5
#define Saturday   6
void giveinstructions();
int getyearfromuser();
void printcalendar(int year);
void printcalendarmonth(int month,int year);
void indentfirstline(int weekday);
int monthdays(int month,int year);
int firstdayofmonth(int month,int year);
char* monthname(int month);
int isleapyear(int year);
main()
{
int year;
clrscr();
giveinstructions();
year=getyearfromuser();
printcalendar(year);
getch();
}
void giveinstructions()
{
printf("This program displays a calender for a full./n");
printf("这个程序输出20世纪的日历,所以你只需输入两位数字的年份就可以了./n");
printf("例如你输入94,我们将显示1994的日历表。/n");
}
int getyearfromuser()
{
int year;
while(1)
 {
 printf("Which year?");
 scanf("%d",&year);
 if((year>=0)&&(year<100))
 return (year+1900);
 printf("The year must be between [0,100)./n");
 }
}
void printcalendar(int year)
{
int month;
for(month=1;month<=12;month++)
 {
 printcalendarmonth(month,year);
 printf("/n");
 }
}
void printcalendarmonth(int month,int year)
{
int weekday,ndays,day;
printf("    %s %d/n",monthname(month),year);
printf(" Su Mo Tu We Th Fr Sa/n");
ndays=monthdays(month,year);
weekday=firstdayofmonth(month,year);
indentfirstline(weekday);
for(day=1;day<=ndays;day++)
 {
  printf(" %2d",day);
  if(weekday==Saturday)printf("/n");
  weekday=(weekday+1)%7;
 }
 if(weekday!=Sunday)printf("/n");
}
void indentfirstline(int weekday)
{
int i;
 for(i=0;i<weekday;i++)
  {
    printf("   ");
  }
}
int monthdays(int month,int year)
{
 switch(month)
 {
  case 2:
    if(isleapyear(year)==1)return(29);
    return(28);
  case 4: case 6: case 9: case 11:
    return(30);
  default:
    return(31);
 }
}
int firstdayofmonth(int month,int year)
{
  int weekday,i;
  weekday=Monday;
  if(year>=1900)
  for(i=1900;i<year;i++)
  {
    weekday=(weekday+365)%7;
    if(isleapyear(i)==1) weekday=(weekday+1)%7;
  }
    for(i=1;i<month;i++)
    {
      weekday=(weekday+monthdays(i,year))%7;
    }
     return(weekday);
}
char* monthname(int month)
{
 switch(month)
 {
   case 1:return("January");
   case 2:return("February");
   case 3:return("March");
   case 4:return("April");
   case 5:return("May");
   case 6:return("June");
   case 7:return("July");
   case 8:return("August");
   case 9:return("September");
   case 10:return("October");
   case 11:return("November");
   case 12:return("December");
   default:return("Illegal month");
 }
}
int isleapyear(int year)
{
 if(((year%4==0)&&(year%100!=0))||(year%400==0))
 return 1;
 return 0;
} 
原创粉丝点击