Programación de visualización de almanaque
Este problema no es difícil, de hecho, es muy sencillo implementarlo paso a paso
Primero defina una matriz global para guardar el número de días del mes
int m[12]= {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
La función principal está al final , pero lo escribiré primero
main()
{
int año, mes, día
int chose; /p>
while(1)
{
while(1) //Esto se selecciona para el procesamiento de tolerancia a fallas
{
printf("1:aaaa\n2:aaaa-mm \n3aaaa-mm-dd\4:salir\n")
scanf("d",amp;chose);
if(chosegt;=1amp;amp;choselt; =4)
break;
esle
printf("error\ninput\n ");
}
cambiar(eligió)
{
caso 1: y(); romper;
caso 2: ym(); romper;
caso 3: ymd(); romper
salir(0); }
}
}
Tres subfunciones para manejar las funciones que desea
Antes de completar estas funciones, varias subfunciones son necesarios para procesar algunos datos
El Capítulo Uno es calcular el día de la semana en el que es el primer día de un determinado año. Esto es muy importante
Principio
<. p>Calcule el número de días desde el 1 de enero del 1 d.C., porque el 1 de enero del 1 d.C. El día es lunesEste cálculo es relativamente simple usando un bucle for, pero el valor es relativamente grande y puede ser simplificado
En primer lugar, hay un ciclo de 400 años, es decir, el día después de 400 años y el día de la semana de hoy es el mismo
400*365 97=146097 Este número es exactamente múltiplo de 7, por lo que se puede calcular dentro de 400 años.
Pero se puede simplificar, porque un año tiene 365 días y 364 es múltiplo de 7, por lo que hay uno más. un día en un año y un día más en un año bisiesto
Entonces esta función se puede escribir así
int ye(int año)
{
int y=año400;
int día=y, i
for(i=0; ilt; y ;i )
if(i4==0amp;amp;i100!=0)
día ;
return día7;
}
Esto devuelve el día de la semana en el que se encuentra el primer día del año. Puede diferir en uno o dos días. Es un problema con la fórmula. Ajústelo.
Calcular el primer día. de un determinado mes también es muy simple
int mo(int año, int mes)
{
int day=ye(. sí
r); //Llame a la subfunción anterior para calcular el primer día del año
if (juzgar el año bisiesto) //Esto cambia el número de días de febrero en la matriz global m
m [1]=29;
else
m[1]=28;
for(int i=0; ilt; mes -1; i )
day =m[i];
return day7
}
Después de completar estos dos sub- funciones, otras funciones lo harán Es relativamente simple, todo lo que queda es imprimir
La última función aún necesita hacer dos subfunciones, que se harán más tarde
void y(void)
{
int año;
int k, i, j
scanf("d", amp; año);
k= ye(año);
for(i=0; ilt; 12, i)
printf(" d \n", i 1 ); //Imprimir mes
printf("日一二三四五六\n" //Esto se puede escribir en inglés de 3 dígitos
for(j= 0;jlt;k;j)
printf(" "); //Imprime la vacante anterior, 4 espacios por unidad
for(j=1;jlt;=m[ i];j)
{
printf("4d",j);
if((j k)7==0)
printf("\n ');
}
k=(j m[i])7; //El número de vacantes anteriores en el próximo mes
if(k!= 0) //Si no es igual a cero, imprime una nueva línea. Si es igual a cero, entonces lo anterior ha impreso una nueva línea
printf("\ n");
}
}
La impresión del mes es similar a la del año
void y(void )
{
int año, boca;
p>int k, i, j
scanf("d, d; ", amp; año, amp; boca);
if (juez año bisiesto) // Esto cambia el número de días de febrero en la matriz global m
m[1] =29;
else
m[1]=28
k=mo(año, boca);
printf( " d \n", boca 1); //Imprimir mes
printf("Día uno, dos, tres, cuatro, cinco 6\n"); English
for(j=0;jlt;k;j)
printf(" " //Imprime la vacante anterior, 4 espacios por unidad
for(j=1;jlt;=m[boca-1];j)
{
printf("4d",j);
si ((j k)7==0)
printf("\n');
}
}
La última función , es calcular tres números, el número de días que quedan en el año anterior, el número de días en los años siguientes y el número de días en los años intermedios
Suma los tres números