はじめての C
以前 UNIX MAGAZINE 2002年11月号の「Cプログラミングの基礎」(山口英氏)をノートに書き写していたのを思い出した。
そのときは よくわからなかったが、今は 半分ぐらいなら理解できる。
それには 小さなプログラムコードが載っているので ちょっと いじってみることに . . .
- /* yoobi */
- #include
- int week_day(int yr, int mo, int dy);
- int mday[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
- /* 各月の日数を初期化 */
- char *wday[7] = {"月","火","水","木","金","土","日"};
- /* 各曜日の初期化 */
- main()
- {
- int year, month, day;
- int x;
- char buf[64];
- printf("これは入力した年月日の曜日を表示するプログラムです。\n");
- printf("西暦で'年'を入力して下さい year = ");
- for ( ; scanf("%d", &year) != 1 ; ) {
- printf("整数で入力してネ year = ");
- scanf("%s", buf);
- }
- printf("'月'を入力して下さい month = ");
- for ( ; scanf("%d", &month) != 1 ; ) {
- printf("整数で オ ネ ガ イ(はあと) month = ");
- scanf("%s", buf);
- }
- printf("'日'を入力して下さい day = ");
- for ( ; scanf("%d", &day) != 1 ; ) {
- printf("整数だってば !! day = ");
- scanf("%s", buf);
- }
- x = week_day(year, month, day);
- printf("%d年 %d月 %d日は %s曜日になります。\n", year, month, day, wday[x]);
- }
- int week_day(int yr, int mo, int dy)
- {
- /* 1970年 1月 1日木曜日を起点として トータルの日数を計算 */
- int days /* 総日数 */
- int i;
- days = (yr - 1970) * 365 + (yr - 1968) / 4;
- /* 入力年までの日数を計算 */
- /* ウルウ年分の日数を加算 */
- if (yr % 4 == 0 && mo <= 2) {
- days = days - 1;
- }
- /*
- * 入力年がウルウ年の場合で 日付が 2月28日以前なら
- * 通常年と等しいので 1日分減らしておく
- */
- for (i = 1; i < mo; i++) {
- days = days + mday[i-1];
- }
- /* 入力月分を加算 (添字に注意) */
- days = days + dy - 1 + 3;
- /* 入力日数を加算 */
- /* 起点が 1日なので 1日分減らしておく */
- /* 起点が木曜日なので 3日分を加算 */
- return (days % 7);
- /* 関数の返り値は 配列 wday の添字 */
- }