Ejercicios y Practicas resueltas en lenguaje de programación en C

introduciendo dos fechas por pantalla utilizando estructuras para solicitar las mismas el programa ha de devolver la diferencia en dias entre las dos fechas tecleadas, esta función que existe en otros lenguaje es fácil de implementar en c, aunque algo tediosa. se ha de tener en cuenta que se emplean para resolver el ejercicio propuesto el operador condicional del lenguaje C. La solución de los ejercicios que se plantean es la siguiente:



/*
Nuevo ejercicio con solución o práctica resuelta de 
programación en lenguaje C, estos ejercicios se proponen 
para potenciar el aprendizaje de personas que estén estudiando 
programación y en particular el lenguaje de programación c. 
La práctica resuelta que se propone es la de realizar un programa 
que solicitando dos fechas, devuelve la diferencia en días entre 
las dos fechas tecleadas. Vuelvo a comentar que no es la única 
solución posible y que la forma de mejorar siempre estas prácticas 
es que aportéis vuestro granito de arena utilizando para ello los 
comentarios. Un saludo y gracias por vuestra visita a este vuestro blog
www.aprendoencasa.com
*/
// Libreria de funciones a utilizar
#include <stdio.h>
// Definicion de constantes
#define TRUE 1
#define FALSE 0
// Estructuras de tipo fecha
typedef struct {
        int dia;
        int mes;
        int anyo;
} Date;
// Predefinicion de funciones
int EsBisiesto(int);
int NumeroDiasAnyo(int);
int DiasTranscurridosAnyo(Date);
long DiferenciaFechas(Date,Date);
// Funcion principal
int main(int argc, char *argv[])
{
    // Variables a utilizar para las fechas
    Date Fecha1;
    Date Fecha2;
    // Solicitar la primera fecha
    printf("Fecha Inicio (dd mm yyyy) : ");
    scanf("%d %d %d",&Fecha1.dia,&Fecha1.mes,&Fecha1.anyo);
    // Solicitar la segunda fecha
    printf("Fecha Final (dd mm yyyy) : ");
    scanf("%d %d %d",&Fecha2.dia,&Fecha2.mes,&Fecha2.anyo);
    // las fechas solicitadas se suponen que son correctas ya que
    // este programa no realiza la comprobacion de las mismas
    // tambien se supone que la primera fecha es igual o inferior a la
    // segunda fecha tecleada
    // Visualizar la diferencia en dias llamando a la funcion
    printf("Diferencia en dias = %ld",DiferenciaFechas(Fecha1,Fecha2));
    // realizar una pausa en el sistema
    system("PAUSE");
    // Finalizar programa
    return 0;
}
// Funcion para comprobar si un año es bisiesto
// se pasa como parametro el año 
int EsBisiesto(int anyo) 
{
  int resultado = FALSE;
  // se comprueba si el año es bisiesto o no
  if ( ((anyo%4==0) && (anyo%100!=0)) || (anyo%400==0) )
     resultado = TRUE;
  // se devuelve el resultado
  return resultado;
}
// Funcion que devuelve el numero de dias del año teniendo
// en cuenta si el año pasado como parametro es bisiesto o no
int NumeroDiasAnyo(int anyo)
{
    // para devolver el numero de dias se utiliza el operador
    // condicional en conjuncion con la llamada a la funcion
    // que indica si el año es bisiesto o no
    return EsBisiesto(anyo)?366:365;
}
int DiasTranscurridosAnyo(Date Fecha)
{
 // Variables a utilizar   
  int contador=0;
  int suma=0;
  int dia=Fecha.dia;
  int mes=Fecha.mes;
  int anyo=Fecha.anyo;
  // Crear una matriz numerica con los dias
  // correspondientes a cada mes
  int Meses_Anyo[] = {31,28,31,30,31,30,31,31,30,31,30,31};
  // Contar los dias transcurridos segun los meses pasados
  for (contador=0;contador<mes-1;contador++)
  {
     suma+= Meses_Anyo[contador];
  }
  //  sumar los dias correspondientes al mes actual
  suma+= dia;
  // si el año es bisiesto sumar 1 dia mas al total
  if(EsBisiesto(anyo) && mes>2) 
     suma++;
  // devolver el numero de dias transcurridos de la fecha pasada
  return suma;
}
// Funcion que devuelve el numero de dias transcurridos entre dos fechas
// la primera fecha ha de ser menor a la segunda fecha, los años de ambas
// fechas se han de especificar con cuatro digitos para que el programa
// funcione correctamente
long DiferenciaFechas(Date Fecha1,Date Fecha2)
{
     // Variables a utilizar
     int anyoiniciocuantos=0;
     int anyofinalcuantos=0;
     long sumadias=0;
     int cuentaanyos=0;
     // Dias transcurridos de la primera fecha, en caso de ser años iguales
     // la diferencia en dias de la primera fecha es 0
     anyoiniciocuantos = Fecha1.anyo==Fecha2.anyo?0:
          NumeroDiasAnyo(Fecha1.anyo) - DiasTranscurridosAnyo(Fecha1);
     // dias transcurridos del año de la segunda fecha
     anyofinalcuantos = DiasTranscurridosAnyo(Fecha2);
     // Contar los años transcurridos entre una fecha y otra sumando
     // los dias correspondientes por año
     for(cuentaanyos=Fecha1.anyo+1;cuentaanyos<Fecha2.anyo;cuentaanyos)
     {
        sumadias+=NumeroDiasAnyo(cuentaanyos);
     }
     // sumar los dias correspondientes al total de dias transcurridos
     sumadias+=anyoiniciocuantos+anyofinalcuantos;
     // devolver la suma de dias transcurridos
     return sumadias;
}

La captura de pantalla, al ejecutar los ejercicios con solución es la siguiente: