質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

解決済

2つの西暦で入力された年月日から,その間の日数を計算するプログラムを作成するプログラムのソースと説明を教えていただきたいです。

NB16
NB16

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

4回答

0評価

0クリップ

146閲覧

投稿2019/06/19 06:52

編集2022/01/12 10:58

あっているかは分かりませんが途中までのプログラムを組んでみました。その他をどのように処理すればいいのかが分かりません。
※配列は使わず、関数だけを使ってお願いします。

考え方としては,例えば,1967/8/7 から 2009/6/12 までを計算する場合(うるう年を考慮)、

A. 開始月の日数(1967/8/7から8/31までの日数) B. 開始年の残りの月の日数(1967/9,10,11,12の日数) C. 開始年の翌年から終了年前年までの年の日数(1968 ~ 2008年までの日数) D. 終了年の終了月前月までの日数(2009/1,2,3,4,5の日数) E.終了月の日数(2009/6/1から2009/6/12までの日数)
コード /* daycount.c */ #include <stdio.h> //関数のプロトタイプ宣言 int uruu(int y); int monthday(int y, int m); int remainmonth(int y, int m); int previousmonth(int y, int m); int lastyearmonth(int y, int m); int endmonth(int y, int m); //--------------------------------------------------------------- int main(){ int year_a,month_a,day_a; //開始年月日 int year_b,month_b,day_b; //終了年月日 int days; //日数積算用変数 int i; days = 0; //変数の初期化 printf("日数計算プログラム\n"); printf("数え始める西暦年月日を入力してください(例 : 1967,8,7)\n"); scanf("%d,%d,%d\n" ,&year_a, &month_a, &day_a); printf(" 数え終わる西暦年月日を入力してください(例 : 2009,6,12)\n "); scanf("%d,%d,%d" ,&year_b, &month_b, &day_b); 「処理」←ここの処理 printf("%d年%d月%d日 から %d年%d月%d日 までの日数は %d日です. \n", year_a, month_a,day_a, year_b, month_b, day_b, days); return 0; //システムに値0を返す } //うるう年かどうか判定し結果を返す //うるう年ならtrue(1),そうでないならfalse(0)を返す関数 int uruu(int y){ int ret; if(y % 400 == 0 || (y % 100 != 0 && y % 4 == 0) ){ ret = 1; }else{ ret = 0; } return(ret); //結果を返す } //A: 年,月を受け取り、その月の日数を返す関数(うるう年も考慮) int monthday(int y,int m){ int d,ret; for(y = 1; y < y+1; y++){ //その指定した年の間の時だけループ for(m = 1; m < m+1; m++){ //その指定した月の間だけループ if(m == 2){ ret = uruu(y); if(ret == 1){ d -= 29; }else{ d -= 28; } } if(m == 4 || m == 6 || m == 9 || m == 11){ d -= 30; }else{ d -= 31; } } } return(d); //結果を返す } //B: 開始年の残りの月の日数 int remainmonth(int y,int m){ int d,ret; for(y = 1; y < y+1; y++){ //指定された年の間だけループ for(m = 1; 1 <= m && m <= 12; m++){ //指定された月から12月までの間だけループ if(m == 2){ ret = uruu(y); if(ret == 1){ d += 29; }else{ d += 28; } }else{ if(m == 4 || m == 6 || m == 9 || m == 11){ d += 30; }else{ d += 31; } } } } return(d); //結果を返す } //C: 開始年の翌年から終了年前年までの年の日数 int previousmonth(int y,int m){ int d,end,ret; for(y = y+1; y < end; y++){ //開始年の翌年から終了年の前の年までのループ for(m = 1; 1 <= m && m<= 12; m++){ //指定された月から12月までのループ if(m == 2){ ret = uruu(y); if(ret == 1){ d -= 29; }else{ d -= 28; } }else{ if(m == 4 || m == 6 || m == 9 || m == 11){ d -= 30; }else{ d -= 31; } } } } return(d); //結果を返す } //D: 終了年の終了月前月までの日数 int lastyearmonth(int y, int m){ int d,end,ret; for(y = end; y <= end; y++){ for(m = 1; m <= end-1; m++){ if(m == 2){ ret = uruu(y); if(ret == 1){ d -= 29; }else{ d -= 28; } }else{ if(m == 4 || m == 6 || m == 9 || m == 11){ d -= 30; }else{ d -= 31; } } } } return(d); } //E: 終了月の日数 「処理」

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

y_waiwai
y_waiwai

2019/06/19 07:03

このままではコードが見づらいので、質門を編集し、<code>ボタンで、出てくる’’’の枠の中にコードを貼り付けてください
NB16
NB16

2019/06/19 07:09

丁寧に修正点を言っていただきありがとうございます。
jimbe
jimbe

2019/06/19 12:16

イキナリ全部を書こうとせず, 例えば1月1日から同年1月31日まで限定を作って動作させ, 次に同年2月1日まで限定を作って\.\.\.と段階を踏んでは如何でしょう\. > for\(y = 1; y < y\+1; y\+\+\){ このループは終わりそうにありません\.

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。