Problemas con analogRead()

Son cosas diferentes. Un tema es que te de valores negativos y otro son las oscilaciones o ruido presente en tu lectura del sensor LM35.

Una solución al segundo problema es un promedio de N valores.

Lees N valores usando analogRead() sin convertir en una variable unsigned long en la que los vas sumando.
Y al final usas esa variable y le aplicas lo mismo que estas haciendo además de dividirla por N.

La respuesta será un valor mas estable.