ここから本文です

C言語について質問です。

アバター

ID非公開さん

2020/7/803:25:22

C言語について質問です。

下のデータ型及び関数を用いてキーボードから同一日の開始時刻と終了時刻を入力し、経過時間を出力するプログラムを完成させるにはどうしたら良いでしょうか。

#include <stdio.h>
/* 構造体の宣言 */
struct datetime {
int hour; /* 時 */
int min; /* 分 */
int sec; /* 秒 */
};

/* datetime というデータ型を定義 */ typedef struct datetime datetime;

/* 関数プロトタイプ宣言 */ datetime keika(datetime a, datetime b);

/* メイン関数 */
int main()
{
datetime a, b, c;
/* 開始時刻・終了時刻を入力するコードを追加 */
c = keika(a, b);
/* 経過時間を出力するコードを追加 */

return 0;
}

閲覧数:
19
回答数:
1

違反報告

ベストアンサーに選ばれた回答

nuo********さん

2020/7/804:37:38

#include <stdio.h>

/* 構造体の宣言 */
struct datetime {
int hour; /* 時 */
int min; /* 分 */
int sec; /* 秒 */
};

/* datetime というデータ型を定義 */
typedef struct datetime datetime;

/* 関数プロトタイプ宣言 */
datetime keika(datetime a, datetime b);

/* メイン関数 */
int main()
{
datetime a, b, c;

/* 開始時刻・終了時刻を入力するコードを追加 */
printf("開始時刻:\n");

printf("時 -> ");
scanf("%d", &a.hour);

printf("分 -> ");
scanf("%d", &a.min);

printf("秒 -> ");
scanf("%d", &a.sec);

printf("\n");

printf("終了時刻:\n");

printf("時 -> ");
scanf("%d", &b.hour);

printf("分 -> ");
scanf("%d", &b.min);

printf("秒 -> ");
scanf("%d", &b.sec);

c = keika(a, b);

/* 経過時間を出力するコードを追加 */
printf("\n");
printf("経過時間 = %d時間%d分%d秒\n", c.hour, c.min, c.sec);

return 0;
}

datetime keika(datetime a, datetime b)
{
int dif;
datetime c;

/* 経過時間を秒で求める */
dif = (3600 * b.hour + 60 * b.min + b.sec) -
(3600 * a.hour + 60 * a.min + a.sec);

/* 経過時間を時/分/秒に分ける */
c.hour = dif / 3600;
c.min = (dif % 3600) / 60;
c.sec = dif % 60;

return c;
}

========

【実行結果(例)】

開始時刻:
時 -> 1
分 -> 23
秒 -> 45

終了時刻:
時 -> 23
分 -> 59
秒 -> 59

経過時間 = 22時間36分14秒

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる