C言語プログラミングの練習用に書いたプログラムです. #contents * カレンダーを表示 [#g00ed97b] /* ===================================================================== 引数で指定した 月 年 のカレンダーを表示する May 26 2003 ===================================================================== */ #include <stdio.h> #include <stdlib.h> /* for atoi() */ /* --------------------------------------------------------------------- 曜日 -- ツェラー(Zeller)の公式による計算 --------------------------------------------------------------------- */ int dayOfWeek(int year, int month, int day){ if (month==1 || month==2) { year--; month += 12; } /* 0:日, 1:月, 2:火, 3:水, 4:木, 5:金, 6:土 */ return (year + year/4 - year/100 + year/400 + (13*month+8)/5 + day)%7; } /* --------------------------------------------------------------------- 閏年の判定 -- 閏年なら1を返す --------------------------------------------------------------------- */ int leapYear(int year){ return (year%4 == 0) && (year%100 != 0 || year%400 == 0); } /* --------------------------------------------------------------------- 月の日数計算 --------------------------------------------------------------------- */ int daysOfMonth(int year, int month){ static int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; /* 1--12以外では1月とみなす */ if (month<1 || month>12) month = 1; /* うるう年のとき */ if (month == 2) return days[1] + leapYear(year); else return days[month-1]; } /* --------------------------------------------------------------------- カレンダーを表示 --------------------------------------------------------------------- */ void dispCalender(int month, int year){ int i, k, days; /* for (month=1; month<=12; month++) { */ printf(" %d月 %d\n", month, year); printf("Su Mo Te We Th Fr Sa\n"); k = dayOfWeek(year, month, 1); days = daysOfMonth(year, month); /* 1日目まで空白で埋める */ for (i=0; i<k; i++) printf(" "); /* 月の最終日まで表示 */ for (i=1; i<=days; i++) { printf("%2d ", i); /* 日曜日の直前で改行 */ if (++k%7 == 0) printf("\n"); } printf("\n\n"); /* } */ } /* --------------------------------------------------------------------- main --------------------------------------------------------------------- */ int main(int argc, char* argv[]){ int year, month; if (argc<=2) { printf("usage:calender [month] [year]\n"); return 1; } month = atoi(argv[1]); year = atoi(argv[2]); dispCalender(month, year); return 0; } * 現在時刻を表示 [#u84e461f] * 現在のディレクトリを表示 [#l22c44c1] * ファイル中の文字を数える [#b03d51a7] * バブルソート [#d05bc646] * ユークリッドの互助法 [#affd0d26] * 自然数を素因数分解 [#n743d08d]