【Cブラシ記録】計算時間差

15101 ワード

タイトル:構造体でクロックタイプを定義し、プログラミングでキーボードから任意に2つの時間(例えば4時55分と1時25分)を入力し、この2つの時間の間隔を計算して出力します.時間差のマイナス記号を出力しないことが要求されます.構造体タイプの定義は以下の通りです.
typedef struct clock
{
    int hour;
    int minute;
    int second;
} CLOCK;

関数のプロトタイプ:
 CLOCK CalculateTime(CLOCK t1, CLOCK t2);

関数機能:2つの時間t 1とt 2の差分プログラムの実行結果を計算して返す例1:
Input time one:(hour,minute):4,55↙
Input time two: (hour,minute):1,25↙
3hour,30minute

プログラム実行結果例2:
Input time one:(hour,minute):1,33↙
Input time two: (hour,minute):5,21↙
3hour,48minute

入力プロンプト:「Input time one:(hour,minute):」「Input time two:(hour,minute):」入力フォーマット:「%d,%d」出力フォーマット:「%dhour,%dminute」
プログラム:プログラム1.0
#include 
typedef struct clock
{
    int hour;
    int minute;
    int second;
}CLOCK;
CLOCK CalculateTime(CLOCK t1, CLOCK t2);

//             :)
CLOCK CalculateTime(CLOCK t1, CLOCK t2)
{
    CLOCK t3;
    if (t1.hour >= t2.hour)
    {
        t3.minute = t1.minute - t2.minute;
        if (t3.minute>=0)
            t3.hour = t1.hour - t2.hour;
        else
        {
            t3.hour = t1.hour - t2.hour - 1;// -1 !
            t3.minute = 60 + t3.minute;// 60 !        + !
        }
    }
    else
    {
        t3.minute = t2.minute - t1.minute;
        if (t3.minute>=0)
            t3.hour = t2.hour - t1.hour;
        else
        {
            t3.hour = t2.hour - t1.hour - 1;
            t3.minute = 60 + t3.minute;
        }
    }
    return t3;
}

int main()
{
    CLOCK t1,t2,t3;
    printf( "Input time one:(hour,minute):");
    scanf("%d,%d",&t1.hour,&t1.minute);
    printf("Input time two: (hour,minute):");
    scanf("%d,%d",&t2.hour,&t2.minute);
    t3 = CalculateTime(t1, t2);
    printf("%dhour,%dminute
"
, t3.hour, t3.minute); return 0; }

プログラム2.0(計算部分だけがくっついている)も先に差を作ってから判断、調整(#include を加えることを覚えています)
CLOCK CalculateTime(CLOCK t1, CLOCK t2)
{
    CLOCK t3;
    t3.hour = t1.hour - t2.hour;
    t3.minute = t1.minute - t2.minute;
    if (t3.hour < 0 && t3.minute < 0)
    {
        t3.minute = fabs(t3.minute);
        t3.hour = fabs(t3.hour);
    }
    else if (t3.hour < 0 || t3.minute < 0)
    {
        t3.minute = fabs(t3.minute);
        t3.hour = fabs(t3.hour);
        t3.hour = t3.hour - 1;
        t3.minute = 60 - t3.minute;
    }
    return t3;
}

プログラム3.0(計算部分だけくっついている)単純乱暴直接回転分計算(#include を追加することを覚えています)
CLOCK CalculateTime(CLOCK t1, CLOCK t2)
{
    CLOCK t3;
    t3.hour = (int)fabs(t1.hour * 60 + t1.minute - (t2.hour * 60 + t2.minute)) / 60;
	t3.minute = (int)fabs(t1.hour * 60 + t1.minute - (t2.hour * 60 + t2.minute)) % 60;
    return t3;
}