• ベストアンサー

日数を計算する方法

以下のようにして変数の配列を使って、 月の日数を格納しています。 int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31}; これを使って、 元旦から入力された月日の日数を計算したいのですが どの様にすればいいですか? 例えば、 4月5日の場合は、 1月 31日 2月 28日 3月 31日 4月 5日 なので「95日」 ---------------- 途中までのプログラム #include<stdio.h> main(void) { int yy, mm, dd; int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31}; printf( "西暦を入力しなさい" ); scanf( "%d", &yy ); printf( "月を入力しなさい" ); scanf( "%d", &mm ); printf( "日を入力しなさい" ); scanf( "%d", &dd ); /* うるう年判定 */ if (((yy%4==0)&&(yy%100!=0))||(yy%400==0)) mon[1]=29; else mon[1]=28; ・ ・

  • wee
  • お礼率19% (62/318)

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

要するに「配列にあるデータの合計を求める」のと同じなんだから, ふつうに考えれば for 文で足し込んでいくんでしょ~ね.

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

当月の前まで足して+日 でいいんじゃないかと思います

関連するQ&A

  • 日数チェックプログラム

    c++言語で西暦と月を入力してその年月の日数を表示するプログラムを教えてください #define CRT_SECURE_NO_DEPRECATE #include <stdio.h> int nisuu_chk(int,int); int uru_chk(int,int); void main(void) { int yy,mm; char dsp[4]={28,29,30,31}; printf("年(西暦:4桁)を入力して下さい"); scanf("%d",&yy); printf("月を入力して下さい"); scanf("%d",&mm); printf("%d年%d月は%d日まであります",yy,mm,nisuu_chk(yy,mm)); } ここから先がわかりません。 だれか、教えてください

  • 万年カレンダー

    万年カレンダー作ろうとしているのですが、ここからの作り方がわかりませんので、教えてください。 int youbi_chk(int,int,int); int uru_chk(int); void main(void) { int yy,mm; char week[7][4]={\"SUN\", \"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\"}; int mday[12]={31,28,31,30,31,30,31,31,30,31,30,31}; printf(\"年(西暦:4桁)を入力して下さい:\"); scanf(\"%d\",&yy); printf(\"月を入力して下さい:\"); scanf(\"%d\",&mm);

  • C言語の問題

    自分の生まれた日から、今日までの生存日数を求めよ。(但し、うるう年なども計算するプログラム)という問題を提示されたのですが、ぜんぜんわかりません。どなたか上記プログラムがわかる方、ご教授お願いいたします。 #include<stdio.h> int main(void) { int table1[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int table2[13]={0,31,29,31,30,31,30,31,31,30,31,30,31}; int mm,dd,i,day=0; /*(1)指定月日までの日数計算*/ do { printf("月>"); scanf("%d",&mm); if(mm>=1 && mm<=12)break; printf("月(%d)は誤りです。\n",mm); }while(1); do { printf("日>"); scanf("%d",&dd); if(dd>=1 && dd<=table1[mm])break; printf("日(%d)は誤りです。\n",dd); }while(1); for(i=1;i<mm;i++) day += table1[i]; day += dd; printf("1/1から%d/%d迄の日数は%d日です。\n",mm,dd,day); return 0; } ↑参考までにこんなプログラムでやっています。

  • 閏年のプログラム

    C言語(閏年)の質問です。 任意の範囲の年から閏年の表示とその数をカウントして次の実行結果のように表示するプログラムの作成で途中まではわかって修正・追加する箇所があったら一緒に教えてください。(ここでは2つの年をmain関数内で入力し、その範囲の西暦を引数とする関数checkYearを使用するものとする。int型の関数checkYearは、引数に西暦をとり、その西暦が閏年であれば、1を返し、閏年でない場合は0を返す。) なお、閏年の判定方法は以下のとおりである。 条件1 西暦年が4で割り切れる年は閏年である 条件2 条件1を満たしていても、西暦年が100で割り切れるときは閏年でない 条件3 条件2を満たしていても、西暦年が400で割り切れるならば閏年である 実行例1 西暦を入力:2000 西暦を入力:2009 2000年 2004年 2008年 閏年は3回あります。 実行例2 西暦を入力:2100 西暦を入力:2000 2000年 2004年 2008年 2012年 2016年 2020年 (省略) 2096年 閏年は25回あります。 実行例3 西暦を入力:2090 西暦を入力:2110 2092年 2096年 2104年 2108年 閏年は4回あります。 #include <iostream> bool checkYear(int year); int main() { int year; int year2; printf("西暦を入力:"); scanf("%d",year); printf("西暦を入力:"); scanf("%d",year2); int count = 0; for (int i = year; i < year2; i++) { if (checkYear(i)) { printf("%d年\n"); count++; } } printf("閏年は%d回です。\n"); return 0; } bool checkYear(int year) { return (((year % 4) == 0) && ((year % 100) != 0)) || ((year % 400) == 0); }

  • 構造体について

    5件のデータをRECORDに追加したいのですが、 RECORD inputdata(void)の宣言文エラーなどのコンパイルエラー。それと、inputdataを用いてどうやって5件のデータを入れたらいいかがわかりません。教えてください。 #define SIZE 5 #include <stdio.h> typedef struct{ int yy; int mm; int dd; }YMD; typedef struct{ char name[20]; YMD birthday; int age; }RECORD; RECORD inputdata(void); void main(void) { int i; for(i = 0;i < SIZE;i++){ inputdata(); } RECORD inputdata(void) { RECORD person; printf("名前>"); scanf("%s", person.name); printf("誕生日入力\n"); printf("年>"); scanf("%d", person.birthday.yy); printf("月>"); scanf("%d", person.birthday.mm); printf("日>"); scanf("%d", person.birthday.dd); return person; }

  • 西暦・月からカレンダーを表示

    問題文 西暦・月を入力してカレンダーを表示するプログラムを作成せよ。 プログラム全体のことを考える。プログラムの流れとしては、つぎのようになるであろう。  (1)変数の宣言: プログラムの中で使う変数や配列等をすべてここに集めておく。          (2)入力: キーボードから、西暦年の値を読み取る ← scanf( ) 関数  1月から12月まで、以下を繰り返す。  (3)カレンダーの年・月の表示: (例えば、2008年1月 と表示)  (4)各曜日名の表示: 「日 月 火 水 木 金 土」と表示  (5)月の日数の算出: 月の最後の日を計算しておく。(*1~12月以外では誤りとすること)  (6)曜日の算出: 月の初めの日(ついたち)の曜日をツェラー公式で計算しておく。  (7)空列の表示: ついたちの前の空白部分を表示する ← for文 を利用。  (8)各日の表示: 月の各日を順に表示していく ← for文を利用          (土曜の後に改行を入れる) #include <stdio.h> int leapYear(int year) { if (year%400==0||(year%4==0 && year%100!=0)) { return 1; } else { return 0; } } int main(void) { int d,year,m,i; int day[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; /*1~12月までの各月の日数*/ printf("西暦を入力してください:"); scanf("%d",&year); printf("月を入力してください:"); scanf("%d",&m); if(m!=1 & m!=2 & m!=3 & m!=4 & m!=5 & m!=6 & m!=7 & m!=8 & m!=9 & m!=10 & m!=11 & m!=12)/*1~12月以外で日数を出そうとした場合*/ { printf("入力が誤っています。やりなおしてください。\n"); } else{ if (leapYear(year)==1)/*閏年の場合*/ { printf("%d年は閏年です。\n",year); day[1] +=1; } else/*閏年でない場合*/ { printf("%d年は閏年ではありません。\n",year); } i = (year+year/4 -year/100 +year/400 + ( 13*m+8 )/5 + 1) % 7; /*西暦~年・1~12月の1日の曜日について考える*/ printf("日 月 火 水 木 金 土\n"); (7)・・・ (8)・・・ } return 0; } 手順に沿ってやっていく課題なのですが(7)、(8)の部分の表現の仕方が良く分かりません。(求めた月の日数をカレンダー形式に表示する方法・1日の前に空白を入れる等) 過去の質問も見たのですが、いまいち理解できず・・・orz どなたかご教授お願いできないでしょうか・・・。

  • 基本的なプログラム

    基本的なプログラム 学校の教科書に載っている問題がわかりません。 是非教えて下さい。 Cによる基本的な条件分岐(if,else if文)のプログラムです。 西暦年(4けたの整数)を入力し、その年がうるう年かどうかを判断するプログラムを作りなさい。 4で割り切れるときはうるう年であるが、100で割り切れるときはうるう年ではない。 しかし、400で割り切れればうるう年である。 ・・・とゆう問題文です。 #include<stdio.h> int main(void) { int x; printf("西暦を入力して下さい¥n"); scanf("%d",&x); if(x%4==0) printf("うるう年である¥n"); else if(x%400==0) printf("うるう年である¥n"); else if(x%100!==0) printf("うるう年でない¥n"); else printf("うるう年でない¥n"); return 0; } ・・・とりあえず自分で考えてみたのですがどうでしょうか; 間違ってると思いますが頑張って考えました・・・;; 4けたの整数ってゆうのはどう書けばいいんでしょうか? 実際にこのプログラムは動くのでしょうか? もっと省略して書くことができるのでしょうか?  等、色々わからないことばかりです。 プログラミングの授業自体に苦手意識を持っているので得意ではありません。 間違いなど指摘していただけたらと思います!! よろしくお願いします!

  • C言語でのカレンダープログラミングについて。

    今、C言語でカレンダーについてのプログラミングを行っています。 まず月を入力し表示させる。 その年がうるう年かどうか判定させる。 日曜~土曜を表示し、指定した月の日数を曜日に合わせて表示させる。 2008年1月1日は火曜日。 という事実を利用してよい。 という条件で、うるう年かの判定はあるものの年は2008年で固定です。 曜日、指定した月の日数を出すところまでいきましたが。 曜日に合わせて出す事ができません。 今は1月に合わせて、1日が火曜日のところに出るように配置してます。 が、次の週になったときにどのように改行指定すればいぃのかわりません。 また、来月以降の月初めの曜日指定もわからないです。 途中までのプログラムはこれです。 醜いかもしれませんが。 #include <stdio.h> int main(void) { int year=2008; int month,hantei=0,a,b,c; int uru[12]={31,29,31.30,31,30,31,31,30,31,30,31};/*うるう年の時の各月ごとの日数*/ int normal[12]={31,28,31,30,31,30,31,31,30,31,30,31};/*通常の年の各月ごとの日数*/ printf("表示させる月を入力してください。:"); scanf("%d",&month); if(year%4==0||year%100==0||year%400==0) { hantei=1;/*その年がうるう年かどうかを判定し、うるう年なら「hantei」に「1」が代入*/ } if(hantei==1)/*うるう年の場合。*/ { printf("%d年 %d月\n",year,month); printf("%d日\n",uru[month-1]); } else/*通常の年の場合。*/ { printf("%d年 %d月\n",year,normal[month-1]); printf("%d\n",normal[month-1]); } printf("日 月 火 水 木 金 土\n");/*曜日*/ if(hantei==1)/*うるう年の場合*/ { for(b=0;b<=7;b++) { printf(" ");/*火曜日のところまでスペースを空ける*/ } for(c=1;c<=uru[month-1];c++)/*日数表示*/ { printf("%2d ",c); } } return(0); } まだあまりC言語に詳しくないので、簡単に説明できる範囲で御願いします。 説明がわかりにくいかもしれませんが、すいません。

  • 今、C言語の勉強をしていて、「西暦と月をscanfで入力し、”西暦●●

    今、C言語の勉強をしていて、「西暦と月をscanfで入力し、”西暦●●年の●月は●日です”というプログラムを完成させなさい」という問題がありました。 また、条件が「4の倍数で、かつ100の倍数でない場合か、400の倍数の場合は閏年である」また 「西暦が0以下のとき、月が1以下12以上の場合はエラーメッセージを表示させなさい。」というものです。 そこで、コーディングした結果、下記のようになりました。 #include <stdio.h> main() { int y,m,d; printf("西暦=");scanf("%d",&y); printf("月=");scanf("%d",&m); if(y<0 || d>1 && d<12) printf("エラーです。"); else if(m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12) d=31; printf("西暦%d年の%d月は%d日です。",y,m,d); else if(m==4 || m==6 || m==9 || m==11 ) d=30; printf("西暦%d年の%d月は%d日です。",y,m,d); else if(m==2 && y%4==0 && y%100>0 || y%400==0) d=29; printf("西暦%d年の%d月は%d日です。",y,m,d); else d=29; printf("西暦%d年の%d月は%d日です。",y,m,d); } これを、学校の先生が開発したコンパイラで文法チェックを施したところ、 「予約語elseは使用できません」と文法エラーがでました。 「else」は、if文のthen/elseの意味で利用したのにそういう風にとらえてくれませんでした。 また、字下げは適当にやっているだけですので気にしないでください。 これ、どこかおかしいところありますか・・・?

  • 長方形、円、三角形の計算するプログラムでエラーがでます

    タイトルの通りなんですがエラーがでます>< コンパイラはできたのですが、実行して二つ目の入力するとこで、入力したあと止まります。 どこがおかしいのでしょうか? #include <stdio.h> int sikaku(void); int en(void); int main(void) { char ch; int a,b; printf("円(A) 長方形(B) 三角形(C)\n"); printf("入力してください:"); ch = getche(); if(ch == 'C'){ printf("\n底辺を入力してください:"); scanf("%d ",a); printf("高さを入力してください:\n"); scanf("%d",b); printf("%dです",a * b); } else if(ch == 'B') sikaku(); else if(ch == 'A') en(); return 0; } int en(void) { int a; float f; printf("\n半径を入力してください:"); scanf("%d",a); printf("円周率を入力してください:"); scanf("%f",f); printf("%fです",a * a * f); return 0; } int sikaku(void) { int a,b; printf("\n縦を入力してください:"); scanf("%d",a); printf("横を入力してくさい:\n"); scanf("%d",b); printf("dです",a * b); return 0; }

専門家に質問してみよう