落書きノート

ふと自分が気になった事を書いてます

C言語で問題を解く

問題というか、自分で気になったことをプログラムにしてみました。カレンダー計算です。

#include <stdio.h>

int yobi(int y, int m, int d) {
  return (y + y / 4 - y / 100 + y / 400 + (13 * m + 8) / 5 + d) % 7;
}

int main(void) {
  char buf[1000];
  int year,month;
  int space;
  int day[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  
  printf("年と月を入力してください。\n");
  fgets(buf, sizeof(buf), stdin);
  sscanf(buf, "%d%d", &year, &month);
  space = yobi(year, month, 1);

  int i,j,p = 1;

  printf("日 月 火 水 木 金 土\n");
  for(i = 0; i < space; i++) {
    printf("   ");
  }
  for(i = 0; i < 7 - space; i++,p++) {
    printf("%2d ", i + 1);
  }
  puts("");
  for(i = 0; i < day[month - 1] / 7; i++) {
    for(j = p; j < p + 7; j++) {
      if(day[month - 1] >= j)
        printf("%2d ", j);
    }
    p += 7;
    puts("");
  }
  for(i = p; i <= day[month - 1]; i++) {
    printf("%2d ", i);
    if(i == day[month - 1])
      puts("");
  }
  
  return 0;
}

大体あってると思います。うるう年の計算してないからか少しずれることもありますが。楽に組めるようになって進歩したなと。気になったことを試せて良かったです。