#include #include #define PI 6*asin( 0.5 ) float round(float xx); main() { float tuki, hi, kita, higasi, touji, hiru, nyan, tim, y, h; printf("何月 → "); scanf("%f", &tuki); printf("何日 → "); scanf("%f", &hi); printf("北緯 ( 明石は 35.6 度 ) → "); scanf("%f", &kita); printf("東経 ( 明石は 135 度 ) → "); scanf("%f", &higasi); switch ( tuki ) { case 1 : touji = hi + 9.0 ; break; case 2 : touji = hi + 9.0+31.0 ; break; case 3 : touji = hi + 9.0+31.0+28.0 ; break; case 4 : touji = hi + 9.0+31.0+28.0+31.0 ; break; case 5 : touji = hi + 9.0+31.0+28.0+31.0+30.0 ; break; case 6 : touji = hi + 9.0+31.0+28.0+31.0+30.0+31.0 ; break; case 7 : touji = hi + 9.0+31.0+28.0+31.0+30.0+31.0+30.0 ; break; case 8 : touji = hi + 9.0+31.0+28.0+31.0+30.0+31.0+30.0+31.0 ; break; case 9 : touji = hi + 9.0+31.0+28.0+31.0+30.0+31.0+30.0+31.0+31.0 ; break; case 10 : touji = hi + 9.0+31.0+28.0+31.0+30.0+31.0+30.0+31.0+31.0+30.0 ; break; case 11 : touji = hi + 9.0+31.0+28.0+31.0+30.0+31.0+30.0+31.0+31.0+30.0+31.0 ; break; case 12 : if ( hi < 22.0 ){ touji = hi + 9.0+31.0+28.0+31.0+30.0+31.0+30.0+31.0+31.0+30.0+31.0+30.0 ; } else { touji = hi - 22.0 ; } break; default : return 0; } if ( touji < 365.0/4.0 ) { h = 720.0-146.0+146.0*4.0*touji/365.0 ; y = 90-(kita+23.4)+23.4*(1.0-cos(2.0*PI*touji/365.0)) ; } else if ( touji < 365.0/2.0 ) { h = 720.0-146.0+146.0*4.0*touji/365.0 ; y = 90.0-kita+23.4*sin(2.0*PI*(touji-365.0/4.0)/365.0) ; } else if ( touji < 3.0*365.0/4.0 ) { h = 720.0+146.0-146.0*4.0*(touji-365.0/2.0)/365.0 ; y = 90.0-(kita-23.4)-23.4*(1.0-cos(2.0*PI*(touji-365.0/2.0)/365.0)) ; } else { h = 720.0+146.0-146.0*4.0*(touji-365.0/2.0)/365.0 ; y = 90.0-kita-23.4*sin(2.0*PI*(touji-3.0*365.0/4.0)/365.0) ; } hiru = round(h/60); nyan = round(y); tim = round(4.0*(135.0-higasi)); printf("\n"); printf("冬至からの日数 = %3.0f 日\n", touji); printf("昼間の時間   = %3.1f 時間\n", hiru); printf("太陽の南中高度 = %3.1f 度\n", nyan); printf("太陽の南中時間 = 12 時 %2.1f 分\n\n", tim); } float round(float xx) { if ( xx > 0.0 ) { return floor(xx*10 + 0.5)/10; } else { return -1.0 * floor(fabs(xx*10) + 0.5)/10; } }