『新・明解C言語 入門編 第2版』演習問題解答例 10ー2

演習10ー2

問: 西暦*y年*m月*d日の日付を、”前の日”あるいは”次の日”の日付に更新する関数を作成せよ。閏年を考慮して計算すること。

 void invrement_date(int *y, int *m, int *d)
 void decrement_date(int *y, int *m, int *d)

//Ex1002.c

#include <stdio.h>

void invrement_date(int *y, int *m, int *d)
{
    if (*d >= 28) {
        if (*m == 2 || *m == 4 || *m == 6 || *m == 9 || *m == 11) {
            if (*m == 2) {
                if (*y % 4 == 0) {
                    if (*d < 29) {
                        *d = *d + 1;
                    } else if (*d > 28) {
                        *m = *m + 1;
                        *d = 1;
                    }
                } else if (*d < 28) {
                    *d = *d + 1;
                } else if (*d > 27) {
                    *m = *m + 1;
                    *d = 1;
                }
            } else if (*m == 4 || *m == 6 || *m == 9 || *m == 11) {
                if (*d < 30) {
                    *d = *d + 1;
                } else if (*d > 29) {
                    *m = *m + 1;
                    *d = 1;
                }
            } else {
                if (*d < 31) {
                    *d = *d + 1;
                } else if (*d > 30) {
                    *m = *m + 1;
                    *d = 1;
                }
            }
        } else {
            *d = *d + 1;
        }
        
        if (*m == 12 && *d == 32) {
            *d = 1;
            *m = 1;
            *y = *y + 1;
        }
    }
}

void decrement_date(int *y, int *m, int *d)
{
    *d = *d - 1;
    
    if (*d < 1) {
        *m = *m - 1;
        if (*m == 2 || *m == 4 || *m == 6 || *m == 9 || *m == 11) {
            if (*m == 2) {
                if (*y % 4 == 0) {
                    *d = 29;
                } else {
                    *d = 28;
                }
            } else if (*m == 4 || *m == 6 || *m == 9 || *m == 11) {
                *d = 30;
            }
        } else {
            *d = 31;
        }
    }
    if (*m == 0) {
        *m = 12;
        *y = *y - 1;
    }
}


int main(void)
{
    int i;
    int nen,tuki,hi;
    
    printf("西暦:"); scanf("%d",&nen);
    printf("月:"); scanf("%d",&tuki);
    printf("日:"); scanf("%d",&hi);
    printf("%d年%d月%d日\n",nen,tuki,hi);
    
    printf("番号を入力してください。(1_1日増やす、2_1日減らす)\n");
    scanf("%d",&i);
    
    if(i == 1){
        invrement_date(&nen,&tuki,&hi);
        printf("%d年%d月%d日\n",nen,tuki,hi);
    }
    
    if(i == 2){
        decrement_date(&nen,&tuki,&hi);
        printf("%d年%d月%d日\n",nen,tuki,hi);
    }
    
    return 0;
}

コメント

 つくっていて楽しかった問題。ぜひ自力で。
 「西向く侍」を知らなかったらぐぐったほうがいいです。

 


書籍情報



Copyright (C) 2016 "HYOGOKURUMI" All Rights Reserved./「来未炳吾・平極ルミ・HYOGOKURUMI」の発達障害考察を主とした全ての発信は、相互不干渉など特別な約束をした者達を除き、どなたでもご活用できます。ただし著作権は放棄しておりません。あしからずご了承ください。詳細は著作権に関するガイドラインをご一読ください。/「HYOGOKURUMI.site」は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイトプログラムである、Amazonアソシエイト・プログラムの参加者です。