• ベストアンサー

プログラムにくわしいかた教えてください!!

構造体Timeを定義し、この構造体型を持つ変数time1,time2,time3を用意します。この変数time1,time2に時間、分、秒のデータを入力し, 合計値をtime3の各メンバに代入し、time3に含まれる、時間、分、秒を表示したいのですが、どうすればよいのでしょうか。 (分、秒の表示は0から59の数値で行う) (時間はint hour 分は int minute 秒は int second) (これは学校の課題なのですが、最近授業についていけなくてかなり悪戦苦闘しています。授業に追いつくためがんばっているのですが、かなりきついです。) このプログラムを組むのに必要な知識とか、わかる方はついでに教えていただけるとうれしいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • Kaone
  • ベストアンサー率60% (33/55)
回答No.1

構造体Timeを定義しってことは、標準の構造体ではなくて自分で作るって事ですよね。 まず構造体を定義します。 typedef struct _Time{ int hour; int minute; int second; }Time; で変数time1,time2,time3を用意しますので Time time1, time2, time3; とします。 下のように分けても良いです。 Time time1; Time time2; Time time3; 代入は、そのままメンバにアクセスして代入します。 time1.hour = 6; time1.minute = 24; time1.second = 7; のようにします。 2も一緒です。 計算方法は、 time3.second = time1.second + time2.second; とします。 ただし、60秒を超えるかもしれないので、 60をこえたら分に1を加えて、time3.second は、60を引いた値を入れます。 同じように、分も60を超えたら、時間に1を加えて、分に、60を引いた値を挿入します。 式にすると time3.second = time1.second + time2.second; if( time3.second >= 60 ){ time3.second=-60; /* time3.second = time3.second - 60; */ time3.minute=1; }else{ time3.minute=0; } time3.minute = time3.minute + time1.minute + time2.minute; if( time3.minute >= 60 ){ time3.minute=-60; /* time3.minute = time3.minute - 60; */ time3.hour=1; }else{ time3.hour=0; } time3.hour= time3.hour+ time1.hour+ time2.hour; という感じです。 素数tを使用して以下のような方法もあります。 以下の方法の場合、time1とtime2の和が180秒以上でも計算可能ですね int t; time3.second = time1.second + time2.second; t = time3.second % 60; time3.minute = time1.minute + time2.minute + ((time3.second - t)/60); time3.second = t; t = time3.minute % 60; time3.hour= time1.hour + time2.hour + ((time3.minute - t)/60); time3.minute = t;

lilillili
質問者

お礼

投稿ありがとうございます。 おおかた理解できたのですが、 メイン関数の宣言のところがいまいちまだわかりません。 時間、分、秒を入力するには int main(void){ Time time1,time2,time3; Time time[3]; int i; for(i=0;i<3;i++){ printf("time%dの時間を入力\n",i+1); scanf("%d",time[i].hour); 以下、分・秒同様といった感じで  よいのでしょうか。

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

#include <stdio.h> typedef struct teime{ int h, m, s; } Time; int main(void) { Time time1 = {1, 30, 23}, time2 = {2, 23, 45}, time3; int r; printf("%d %d %d\n", time1.h, time1.m, time1.s); printf("%d %d %d\n", time2.h, time2.m, time2.s); time3.s = (r = (time1.s + time2.s)) % 60; r /= 60; time3.m = (r = (time1.m + time2.m + r)) % 60; r /= 60; time3.h = time1.h + time2.h + r; printf("%d %d %d\n", time3.h, time3.m, time3.s); return 0; }

lilillili
質問者

お礼

お返事遅れてすみません。 なんとなく構造体のコツがつかめてきました。 ありがとうございました!

すると、全ての回答が全文表示されます。

関連するQ&A