構造体Timeを定義し、この構造体型を持つ変数time1,time2,time3を用意します。この変数time1,time2に時間、分、秒のデータを入力し,
合計値をtime3の各メンバに代入し、time3に含まれる、時間、分、秒を表示したいのですが、どうすればよいのでしょうか。
(分、秒の表示は0から59の数値で行う)
(時間はint hour
分は int minute
秒は int second)
(これは学校の課題なのですが、最近授業についていけなくてかなり悪戦苦闘しています。授業に追いつくためがんばっているのですが、かなりきついです。)
このプログラムを組むのに必要な知識とか、わかる方はついでに教えていただけるとうれしいです。
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;
投稿ありがとうございます。
おおかた理解できたのですが、
メイン関数の宣言のところがいまいちまだわかりません。
時間、分、秒を入力するには
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);
以下、分・秒同様といった感じで
よいのでしょうか。
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;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(ソフトウェア) OMRON PLC CP2Eのプログラム 1 2022/11/24 10:57
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Excel(エクセル) Excel2007での条件付き書式について 6 2023/05/02 10:56
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- Excel(エクセル) エクセルについて教えてください。 1 2023/03/03 08:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Matlabでsin波を使って矩形波を...
-
PictureBoxでのアニメーション...
-
SavePictureで保存できない
-
(VB)ピクチャボックスに表示し...
-
ピクチャーボックスの画像を印...
-
C#のループでtextboxに値を入れ...
-
VBAで入力数値について
-
VBA public変数はどのようなこ...
-
二点の座標から距離や角度を求...
-
Excel vba で複数のテキストの...
-
VBAでcallで呼び出したsubを終...
-
アクセスできない保護レベルエ...
-
visual basic初心者です。 visu...
-
【VB.NET】テキストボックスに...
-
Excel VBAでsub,dimは何の略?
-
visual studio 2008 C# で、値...
-
vbsでスクロール位置を指定して...
-
パーソナルXLSBのfuctionを呼び...
-
subsequentとnextの違いってな...
-
複数条件のオートフィルタ(VBA)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SavePictureで保存できない
-
文字間の幅の設定
-
Matlabでsin波を使って矩形波を...
-
ボールが壁に当たって跳ね返る...
-
FlexGridで文字色を変更。
-
[ASP]小数点第2位以下をカット!
-
C言語のOpenGLで複数のテクスチ...
-
VB6 ドラッグ&ドロップ
-
ピッ、ってアルファベットでど...
-
もぐらたたきのプログラミング
-
PictureBoxでのアニメーション...
-
グラフィックの表示について VB6
-
(VB)ピクチャボックスに表示し...
-
ホンテットマンションに乗った...
-
SCALEの使い方教えてください
-
VB6でマウスのドラッグで範囲を...
-
一次元静電粒子コードについて...
-
日付の計算
-
画像処理
-
sublimit textっていうエディタ...
おすすめ情報