¿Qué significa el siguiente código? ilustrar
Este programa está compilado bajo DEV C 4.9.9.2
Los siguientes artículos están relacionados con el calendario lunar:
Código C de cálculo para el número de días de la semana en un día determinado
Introducción a los algoritmos y fórmulas del calendario lunar
Utilice el código C para calcular los tallos celestes y las ramas terrestres del calendario lunar chino int Spring_NY, Sun_NY, StaticDayCount;
int index, flag;
//Spring_NY registra el número de días entre el Festival de Primavera y el día de Año Nuevo de ese año.
//Sun_NY registra el número de días a partir del día de Año Nuevo en el calendario gregoriano.
if ( ((LunarCalendarTable[año-1901] & 0x0060) gt; gt; 5) == 1)
Spring_NY = (LunarCalendarTable[año-1901] & 0x001F ) - 1;
else
Spring_NY = (LunarCalendarTable[año-1901] y 0x001F) - 1 31
Sun_NY = MonthAdd [mes; -1] día - 1;
if ((!(año 4)) amp; amp; (mes gt; 2))
Sun_NY ;
//StaticDayCount registra el número de días en un mes grande o pequeño, 29 o 30
//index registra el mes en el que comienza el conteo.
//flag se utiliza especialmente para manejar los meses bisiestos.
// Determina si el día solar es antes o después del Festival de Primavera
if (Sun_NY gt; = Spring_NY)//El día solar es posterior al Año Nuevo Chino (incluido el Año Nuevo Chino día)
{
Sun_NY -= Spring_NY
mes = 1
índice = 1; > bandera = 0;
if ( ( (LunarCalendarTable[año - 1901] & (0x80000 gt; gt; (index-1)) == 0)
StaticDayCount = 29;
p>else /p>
StaticDayCount = 30
while(Sun_NY gt; = StaticDayCount)
{
Sun_NY -= StaticDayCount;
index;
if( mes == ((LunarCalendarTable[año - 1901] amp; 0xF00000) gt; gt; 20) )
{
bandera = ~bandera
if(bandera == 0)
mes ; > }
else
mes ;
if( ( ( LunarCalendarTable[año - 1901] & (0x80000 gt; gt; (index-1)) ) == 0)
StaticDayCount=29;
else
StaticDayCount=30
}
día; = Sun_NY 1;
}
else //El día solar antes del comienzo de la primavera
{
Spring_NY -= Sun_NY;
año --;
mes = 12;
if (((LunarCalendarTable[año - 1901] y 0xF00000) y 0xF00000) gt; gt 20) == 0)
índice = 12;
más
índice = 13
bandera = 0; p>
if ( ((LunarCalendarTable[año - 1901] & (0x80000 gt; gt; (index-1)) == 0)
StaticDayCount = 29;
else
StaticDayCount = 30
while(Spring_NY gt; StaticDayCount)
{
Spring_NY -= StaticDayCount
índice-- ;
si(bandera == 0)
m
onth --;
if(mes == ((LunarCalendarTable[año - 1901] & 0xF00000) gt; gt; 20))
flag = ~flag;
if ( ( LunarCalendarTable[año - 1901] amp; (0x80000 gt; gt; (index-1)) == 0)
StaticDayCount = 29;
else
StaticDayCount = 30;
}
día = StaticDayCount - Spring_NY 1; día;
LunarCalendarDay |= (mes lt; lt; 6);
if (mes == ((LunarCalendarTable[año - 1901] & 0xF00000) gt; gt; 20))
devuelve 1;
más
devuelve 0;
}
principal()
{
const char *ChDay[] = {"*", "Primer día de escuela secundaria", "Segundo día de escuela secundaria", "Tercer día de escuela secundaria", "Cuarto día de la escuela secundaria", "Quinto día de la escuela secundaria",
"El sexto día del mes lunar", "El séptimo día del mes lunar", "El octavo día del mes lunar ", "El noveno día del mes lunar", "El décimo día del mes lunar",
"Undécimo día", "Duodécimo día", "Decimotercero día", "Catorce", "Quince ",
"Dieciséis", "Diecisiete", "Dieciocho", "Diecinueve", "Veinte",
"Veintiuno", "Veintidós", "Veinte -tres", "Veinticuatro", "Veinticinco",
"Veintiséis", "Veintisiete", "Veintiocho", "Veintinueve" ","Treinta "};
const char *ChMonth[] = {"*","正""二","三","四","五","六", "siete", " ocho", "nueve", "diez", "once", "cera"};
struct tm * Local;
long t;
long t;
p>
int año, mes, día;
char str[13] = ""; 0
t = hora(NULL);
Local = hora local(amp; t
año = tm_año 1900; >
mes = Local-gt ;tm_mon 1;
int año, mes, día
día = Local-gt;
#else
año = 2006;
mes = 9;
día = 9;
printf("d año d mes d día\t", año, mes, día);
if(LunarCalendar(año, mes, día))
{
strcat(cadena, "Salto");
p>
strcat(str, ChMonth[(LunarCalendarDay amp.0x3C0) gt; gt; 6]);
}
else
strcat( str, ChMonth[(LunarCalendarDay amp; 0x3C0) gt; gt; 6]);
strcat(str, "mes");
strcat(str, ChDay[LunarCalendarDay amp; 0x3F]);
puts(str);
system("pausa");
}