2011年2月27日日曜日

カレンダープログラム

Linuxに標準でついているcalコマンドですが、これをコマンドライン引数でない仕様に変えたのが次のプログラム。


#include<stdio.h>
int main(void){
  unsigned int year,month,i,j,k,days=31,youbi;
  scanf("%u %u",&year,&month);
  puts("Sun Mon Tue Wed Thu Fri Sat");
  year%=2000;
  year+=2000;
  youbi=((month+1)*26/10+year%100+year%100/4+(year/100)/4+(year/100)*5)%7;
  switch(month){
  case 2:
    days-=(year%4==0&&(year%100!=0||year%400==0))?1:2;
  case 4:
  case 6:
  case 9:
  case 11:
    days-=1;
  }
  for(i=1;i<=days;i++){
    if(i==1){
      for(j=0;j<youbi;j++) printf("    ");
    }
    printf("%3u",i);
    if(youbi==6){
      putchar('\n');
      youbi=0;
    }else{
      putchar(' ');
      youbi++;
    }
  }
  putchar('\n');
  return 0;
}

0 件のコメント: