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 originaldo {
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' );