R45 0,35 残日数計算
考察
if (yy%400==0) = あまりゼロ
else if (yy%100!=0 && yy%4==0) = 年を100で割ると余りがでて、4で割ると余りが出ないよ。
まだ自分一人の力だけでは思いつかない部分もあるけど、大まかな書き方は理解できてきた。
この残日数計算機能使ってアプリできそう。
死ぬまでの残日数、残年数を計算して、『あと55回桜の開花が観れるチャンスがあります!』『あと3回オリンピックが観れるかもしれません!』とか結構面白いかも。
問題
年(西暦)、月、日を入力し、元日からの経過日数と年末までの残日数を求める。
表示例
---------経過日数と残日数計算---------
年(西暦)を入力してください。--->2003
月を入力してください。--->6
日を入力してください。--->12
経過日数は163日です。
残日数は202日です。
--------------------------------------
考え方
(1)前処理
①末日テーブル(matubi_t)に{0,31,28,31,30,31,30,31,31,30,31,30,31}を格納する。
②年(yy)、月(mm)、日(dd)を入力する。
③残数(zansu)に365を格納する。
(2)うるう年の判定
(うるう年のときは末日テーブルの2月の欄に29、残数に366を格納する。)
①年が400で割り切れるときはうるう年。
②年が100で割り切れないで4で割り切れるときはうるう年。
(3)経過日数と残数を求める。
①経過日数(nissu)に0を格納する。
②経過月数分の末日を日数に加算する。
③入力した日(dd)を経過日数に加算する。
④残数から経過日数を引く。
(4)経過日数と残数を上記レイアウトにしたがって表示する。
#include<stdio.h>
int main(void){
int i,yy,mm,dd,zansu,nissu;
int matubi_t[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
printf("-------------経過日数と残日数計算--------------\n");
printf("年(西暦)を入力してください。\n");
scanf("%d",&yy);
printf("月を入力してください。\n");
scanf("%d",&mm);
printf("日を入力してください。\n");
scanf("%d",&dd);
zansu = 365;
if (yy%400==0) {
matubi_t[2]=29;
zansu=366;
}
else if (yy%100!=0 && yy%4==0) {
matubi_t[2]=29;
zansu=366;
}
nissu = 0;
int main(void){
int i,yy,mm,dd,zansu,nissu;
int matubi_t[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
printf("-------------経過日数と残日数計算--------------\n");
printf("年(西暦)を入力してください。\n");
scanf("%d",&yy);
printf("月を入力してください。\n");
scanf("%d",&mm);
printf("日を入力してください。\n");
scanf("%d",&dd);
zansu = 365;
if (yy%400==0) {
matubi_t[2]=29;
zansu=366;
}
else if (yy%100!=0 && yy%4==0) {
matubi_t[2]=29;
zansu=366;
}
nissu = 0;
for (i=0; i<mm; i++) {
nissu += matubi_t[i];
}
nissu += matubi_t[i];
nissu += dd;
nissu += matubi_t[i];
nissu += dd;
zansu -= nissu;
printf("経過日数は%3d日です。\n",nissu);
printf("残日数は%3d日です。\n",zansu);
printf("---------------------------------------\n");
return 0;
}