c言語のプログラミングでこまってます
/*
プログラム作成に当たっては以下の注意を守ること。
•入力は整数変数に格納し、有効な日付かどうかチェックせよ。
•日付チェックでは、月の最終日が月によって違うことも考慮にいれること。
•日付チェックにおけるif文を減らすため、daynum[]を必ず使うこと。
•日付チェック以外でも、if文やswitch-case文の数はなるべく少なくするよう工夫せよ。今回は、if文の7行並列も、12行並列も禁止。
•日付の範囲チェックと計算とを同時に実行してもよい。
2個の整数を入力し、それぞれを2011年度の月、日とみなして、
その日付からおよその月齢と月相を計算して表示するプログラムを作成せよ。
月齢と月相の対応は簡便的に3.75齢毎に相が進むとしてよい。
suuumは月齢であるが、計算は以下のもので間違いない。
また、以下の配列を定義して使うこと。
char moonphasename[][15]= {"new moon", "new crescent", "first quarter", "waxing gibbous",
"full moon", "waning gibbous", "last quarter", "old crescent"};
*/
#include <stdio.h>
int main(void)
{
int daynum[]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int i=0,j=0;
/*15はもじすう+1*/
char moonphasename[][15]= {"new moon", "new crescent", "first quarter","waxing gibbous", "full moon", "waning gibbous", "last quarter", "old crescent"};
int month,day,sum,suum,suuum;
printf("月と日付を入力してね:");
scanf("%d%d", &month, &day);
if(day>daynum[month]){
printf("2011年にそんな日はありません");
return(-1);
}
sum=(2011-1740)*210;
suum=((sum/19)-2)+month+day;
if(month==1)
suuum=suum+1;
else if(month==2)
suuum=suum+2;
else if(month==3 ||month==5)
suuum=suum-1;
else suuum=suum;
printf("月齢は%d",suuum%30);
for(i=0; i<=suuum &&suuum<i+3.75 ; i=i+3.75){
printf("月相は",moonphasename[j][15]);
j++ ;
}
return (0);
}
と書いてリナックスのeclipsで実行させました。月齢はでるのですが、月相が表示されません(月相は という文字も非表示)。
どうしたらいいでしょうか?
また、最後のfor文ではsuuumが0から3.75のときしか反応しません(見ての通り)。どう書き直せばいいでしょうか?
詳しいかたおねがいします。
補足
#include <stdio.h> int main(void) { int month, day, nokori; printf("Input date : "); fflush(stdout); scanf("%d %d", &month, &day); if( month == 4 && day>=1 && day <=30){ nokori = 11 * 30 + 6 + (30 - day); } else if( month == 5 && day >= 1 && day<= 31){ nokori = 10 * 30 + 5 + (31- day); } else if( month == 6 && day >= 1 && day<= 30){ nokori = 9 * 30 + 5 + (30- day); } else if( month == 7 && day >= 1 && day<= 31){ nokori = 8 * 30 + 4 + (31- day); } else if( month == 8 && day >= 1 && day<= 31){ nokori = 7 * 30 + 3 + (31- day); } else if( month == 9 && day >= 1 && day<= 30){ nokori = 6 * 30 + 3 + (30- day); } else if( month == 10 && day >= 1 && day<= 31){ nokori = 5 * 30 + 2 + (31- day); } else if( month == 11 && day >= 1 && day<= 30){ nokori = 4 * 30 + 2 + (30- day); } else if( month == 12 && day >= 1 && day<= 31){ nokori = 3 * 30 + 1 + (31- day); } else if( month == 1 && day >= 1 && day<= 31){ nokori = 2 * 30 + (31- day); } else if( month == 2 && day >= 1 && day<=29){ nokori = 31+ ( 29- day); } else if( month == 3 && day >= 1 && day<= 31){ nokori = 31- day; } else{ printf("this month or day is not correct"); return (-1); } printf("nokori is %d \n", nokori); return (0); } と、私が作ったものはこのような感じに、if文がならんでいます… 入力された値が正しいかどうかのif文はのこしておいて、正しければテーブルを使用した計算をする、というような構成でいいのでしょうか。