Para una mejor comprensión, he agregado una captura de pantalla. Está dando el error, la etiqueta del caso no se reduce a una constante entera. ¿Qué significa? 
#include <stdio.h> int main() { int a = 1.0; switch (a) { case 1: printf ("1"); break; case 1.0: printf ("10"); break; default: printf ("default"); } }Porque el switch depende de la comparación exacta de datos simples.
Las comparaciones entre flotantes probablemente no funcionen como se espera, por ejemplo, hay un cero negativo y uno positivo.
Ver: ¿Están rotas las matemáticas de punto flotante?
Por estas razones, no puedes "simplemente" decir "a == b" cuando lo dices en serio, como humano. Es por eso que el estándar C simplemente no lo permite como case en un switch .
La verdad es: ¡el hecho de que estés tratando de hacer eso es una buena razón para prohibirlo! O está usando flotantes donde no debería (es decir, para almacenar un conjunto limitado de valores discretos), o no ha entendido realmente cómo funcionan los flotantes, y usarlos en una declaración de switch conducirá a un comportamiento inesperado.
En cuanto a la parte "Por favor, ayúdame" de tu pregunta, probablemente puedas implementarla más o menos de la siguiente manera...
más bien que
double x=1.,y=2.; blah; blah; blah; switch(x){ default: break; case y: blah; break; }intente en su lugar algo como
double x=1., y=2., xmax=10000., xmin=1.; int ix=1, iy=2, imax=100; blah; blah; blah; ix = ((x-xmin)/(xmax-xmin))*((double)imax); iy = ((y-xmin)/(xmax-xmin))*((double)imax); switch(ix){ default: break; case iy: blah; break; }¿Por qué no podemos usar números de punto flotante en declaraciones condicionales de cambio?
Porque la definición del lenguaje lo dice.
Porque comparar números de punto flotante para la igualdad exacta (lo que hace implícitamente una declaración de cambio) a menudo es una mala idea.
Porque usar variables de coma flotante como variables de control suele ser una mala idea. @Steve cumbre
No hay una necesidad imperiosa de esta función.