【C言語】時間を時分秒に変換する方法

C言語を使って、秒を時間、分、秒に変換する方法を学びましょう。

このガイドでは、基本的な考え方から具体的なプログラムの作成方法、さらに応用例として関数化やエラーチェックの方法までをわかりやすく解説します。

初心者でも理解しやすいように、ステップバイステップで進めていきますので、ぜひ一緒に学んでいきましょう。

目次から探す

基本的な考え方

時間の単位と秒の関係

時間を扱う際には、秒、分、時間という単位が基本となります。

これらの単位は互いに変換可能であり、特に秒を基準にして計算することが多いです。

例えば、1時間は3600秒、1分は60秒というように、秒を基準にして他の単位に変換することができます。

秒、分、時間の基本的な関係

時間の単位は以下のように定義されています。

  • 1時間 = 60分
  • 1分 = 60秒

これを基に、1時間は3600秒(60分 × 60秒)となります。

この関係を理解することで、秒を分や時間に変換することが容易になります。

1時間=3600秒、1分=60秒

具体的に、1時間は3600秒、1分は60秒です。

この関係を利用して、秒数を時間、分、秒に変換することができます。

例えば、7200秒は2時間(7200 ÷ 3600)となりますし、90秒は1分30秒(90 ÷ 60 = 1分、余り30秒)となります。

変換の流れ

秒を時分秒に変換する際の基本的な流れは以下の通りです。

  1. 秒数を3600で割って時間を求める。
  2. 残りの秒数を60で割って分を求める。
  3. 最後に残った秒数が秒となる。

この流れをプログラムに落とし込むことで、秒数を時分秒に変換することができます。

秒から時分秒への変換手順

具体的な手順は以下の通りです。

  1. 秒数を3600で割り、商を時間とする。
  2. 秒数を3600で割った余りを求める。
  3. 余りを60で割り、商を分とする。
  4. 余りを60で割った余りを秒とする。

この手順を順に実行することで、秒数を時間、分、秒に変換することができます。

具体的な計算方法

例えば、3661秒を時分秒に変換する場合を考えてみましょう。

  1. 3661秒 ÷ 3600 = 1時間(商)
  2. 3661秒 % 3600 = 61秒(余り)
  3. 61秒 ÷ 60 = 1分(商)
  4. 61秒 % 60 = 1秒(余り)

したがって、3661秒は1時間1分1秒となります。

このように、秒数を時分秒に変換するための具体的な計算方法を理解することで、プログラムに応用することができます。

時間変換プログラムの作成

ここでは、具体的にC言語を使って秒を時分秒に変換するプログラムを作成していきます。

プログラムの各ステップを順を追って解説します。

秒の入力

まず、ユーザーから秒数を入力してもらう部分を作成します。

C言語ではscanf関数を使って標準入力からデータを取得します。

#include <stdio.h>
int main() {
    int total_seconds;
    // ユーザーから秒数を入力してもらう
    printf("秒数を入力してください: ");
    scanf("%d", &total_seconds);
    return 0;
}

時間の計算

次に、入力された秒数から時間を計算します。

1時間は3600秒なので、秒数を3600で割ることで時間を求めることができます。

#include <stdio.h>
int main() {
    int total_seconds;
    int hours;
    printf("秒数を入力してください: ");
    scanf("%d", &total_seconds);
    // 時間を計算
    hours = total_seconds / 3600;
    return 0;
}

分の計算

次に、残りの秒数から分を計算します。

時間を求めた後の残りの秒数を3600で割った余りを使って分を計算します。

1分は60秒なので、残りの秒数を60で割ることで分を求めます。

#include <stdio.h>
int main() {
    int total_seconds;
    int hours, minutes;
    printf("秒数を入力してください: ");
    scanf("%d", &total_seconds);
    hours = total_seconds / 3600;
    total_seconds = total_seconds % 3600; // 残りの秒数
    minutes = total_seconds / 60;
    return 0;
}

秒の計算

最後に、残りの秒数を求めます。

これは、分を求めた後の残りの秒数です。

#include <stdio.h>
int main() {
    int total_seconds;
    int hours, minutes, seconds;
    printf("秒数を入力してください: ");
    scanf("%d", &total_seconds);
    hours = total_seconds / 3600;
    total_seconds = total_seconds % 3600;
    minutes = total_seconds / 60;
    seconds = total_seconds % 60; // 残りの秒数
    return 0;
}

結果の表示

計算が終わったら、結果を表示します。

printf関数を使って、計算結果をフォーマットして表示します。

フォーマット

結果を表示する際には、printf関数を使ってフォーマットを指定します。

例えば、%dは整数を表示するためのフォーマット指定子です。

#include <stdio.h>
int main() {
    int total_seconds;
    int hours, minutes, seconds;
    printf("秒数を入力してください: ");
    scanf("%d", &total_seconds);
    hours = total_seconds / 3600;
    total_seconds = total_seconds % 3600;
    minutes = total_seconds / 60;
    seconds = total_seconds % 60;
    // 結果を表示
    printf("%d時間 %d分 %d秒\n", hours, minutes, seconds);
    return 0;
}

実際の表示

プログラムを実行すると、ユーザーが入力した秒数が時分秒に変換されて表示されます。

例えば、3661秒を入力すると、次のように表示されます。

秒数を入力してください: 3661
1時間 1分 1秒

これで、秒を時分秒に変換する基本的なプログラムが完成しました。

次のステップでは、このプログラムをさらに応用して関数化やエラーチェックを行う方法について解説します。

応用例

関数化

プログラムを関数化することで、コードの再利用性や可読性が向上します。

ここでは、秒を時分秒に変換する処理を関数にまとめる方法を解説します。

変換処理を関数にする方法

まず、秒を時分秒に変換する関数を定義します。

この関数は、入力された秒数を時、分、秒に分解し、それぞれの値を返すようにします。

#include <stdio.h>
// 時分秒に変換する関数のプロトタイプ宣言
void convert_seconds(int total_seconds, int *hours, int *minutes, int *seconds);
int main() {
    int total_seconds;
    int hours, minutes, seconds;
    // ユーザーから秒数を入力
    printf("秒数を入力してください: ");
    scanf("%d", &total_seconds);
    // 関数を呼び出して変換
    convert_seconds(total_seconds, &hours, &minutes, &seconds);
    // 結果を表示
    printf("%d秒は %d時間 %d分 %d秒 です。\n", total_seconds, hours, minutes, seconds);
    return 0;
}
// 時分秒に変換する関数の定義
void convert_seconds(int total_seconds, int *hours, int *minutes, int *seconds) {
    *hours = total_seconds / 3600;
    total_seconds %= 3600;
    *minutes = total_seconds / 60;
    *seconds = total_seconds % 60;
}

関数の定義と呼び出し方

上記のコードでは、convert_secondsという関数を定義しています。

この関数は、引数として総秒数と、結果を格納するためのポインタを受け取ります。

関数内で計算を行い、結果をポインタを通じて返します。

関数の呼び出しは、convert_seconds(total_seconds, &hours, &minutes, &seconds);のように行います。

ここで、&は変数のアドレスを渡すために使用します。

エラーチェック

プログラムの信頼性を向上させるためには、入力値のエラーチェックが重要です。

ここでは、負の値や非数値の入力に対する対処法を解説します。

入力値のエラーチェック方法

まず、負の値が入力された場合にエラーメッセージを表示するようにします。

#include <stdio.h>
// 時分秒に変換する関数のプロトタイプ宣言
void convert_seconds(int total_seconds, int *hours, int *minutes, int *seconds);
int main() {
    int total_seconds;
    int hours, minutes, seconds;
    // ユーザーから秒数を入力
    printf("秒数を入力してください: ");
    if (scanf("%d", &total_seconds) != 1 || total_seconds < 0) {
        printf("無効な入力です。正の整数を入力してください。\n");
        return 1;
    }
    // 関数を呼び出して変換
    convert_seconds(total_seconds, &hours, &minutes, &seconds);
    // 結果を表示
    printf("%d秒は %d時間 %d分 %d秒 です。\n", total_seconds, hours, minutes, seconds);
    return 0;
}
// 時分秒に変換する関数の定義
void convert_seconds(int total_seconds, int *hours, int *minutes, int *seconds) {
    *hours = total_seconds / 3600;
    total_seconds %= 3600;
    *minutes = total_seconds / 60;
    *seconds = total_seconds % 60;
}

負の値や非数値の入力に対する対処法

上記のコードでは、scanf関数の戻り値をチェックすることで、非数値の入力を検出しています。

また、入力された秒数が負の値である場合にもエラーメッセージを表示します。

このようにして、入力値のエラーチェックを行うことで、プログラムの信頼性とユーザーエクスペリエンスを向上させることができます。

以上で、秒を時分秒に変換する方法とその応用例についての解説を終わります。

関数化やエラーチェックを行うことで、より実用的で信頼性の高いプログラムを作成することができます。

当サイトはリンクフリーです。出典元を明記していただければ、ご自由に引用していただいて構いません。

目次から探す