Estas diciendo con if(edad==1 && nivel<11 || nivel>15) exactamente:
 
Si edad es igual a 1 y el nivel es mayor que 11 
o.... todo lo demás importa un carajo si el nivel es mayor que 15 XDDD 
Con el || quiero decir o.... Ejemplo: O pasa eso 
o pasa el otro. Lo mismo: O pasa eso || pasa el otro. 
Entonces... Si edad==1 y nivel<11 
o(||) nivel>15. Si al poner mas de 15 le va importar un pimiento que el nivel sea menor que 11 ya que va pasar que se va cumplir lo que esta después del operador ||. A menos que ambas expresiones sean verdaderas antes del ||. 
No se exactamente que es lo que quieres hacer pero me parece que el programa hace lo que estas diciendo que haga, lo que falla es la lógica. 
Ademas el do/while lo haría así:   
Código C:
Ver original- do { 
-         printf ( "Introduzca su edad: " ); 
-         scanf ( "%d%*c", &- edad  );
 
-   
-         printf ( "Introduzca su sexo, h o m: " ); 
-         scanf ( "%c%*c", &- sexo  );
 
-   
-         printf ( "Introduzca su nivel de hemoglobina: " ); 
-         scanf ( "%f%*c", &- nivel  );
 
-          
-         comprobar ( edad, sexo, nivel ); 
-   
-         printf ( "\n\nQuieres continuar s/n?: " ); 
-         scanf ( "%c%*c", &- cont  );
 
-          
-     } while ( cont != 'n' );