小白c语言调用函数时出现异常,改一下又正常,不知原因,求前辈点拨

//这是出错的代码,调用equal_to_zero和smaller_than_zero两个函数时会出现异常
//输入a,b,c的值,求二次函数的根
# include<stdio.h>
# include<math.h>
float x1, x2, delta, p, q;
void grater_than_zero(float a, float b)
{
	x1 = -b / (2 * a) + sqrt(delta) / (2 * a);
	x2 = -b / (2 * a) - sqrt(delta) / (2 * a);
}
void smaller_than_zero(float a, float b)
{
	p = -b / (2 * a);
	q= sqrt(_delta) / (2 * a);
	
}
void equal_to_zero(float a, float b)
{
	x1 = x2 = -b / (2 * a);
}
void main()
{
	float a, b, c;
	printf("请输入二次函数的三个系数:\n");
	scanf("%f%f%f", &a, &b, &c);
	delta =b*b-4*a*c;
	printf("delta=:%f", delta);

	if (delta > 0)
	{
		grater_than_zero(a, b);
		printf("该方程的根: x1=%f,x2=%f.", x1, x2);
	}
	else if (delta = 0)
	{
		equal_to_zero(a, b);
		printf("该方程的根: x1=x2=%f.", x1);
	}
	else 
	{
		smaller_than_zero(a, b);
		printf("该方程的根: x1=%f+%fi,x2=%f-%fi.", p,q,p,q);
	}
}
请输入二次函数的三个系数:
1 2 4
delta=:-12.000000该方程的根: x1=-1.000000+-0.000000i,x2=-1.000000--0.000000i.请按任意键继续. . .

程序修改后为:删掉delta>0和delta=0两个函数有变正常了
//输入a,b,c的值,求二次函数的根
# include<stdio.h>
# include<math.h>
float x1, x2, delta, p, q;

void main()
{
	void grater_than_zero(float a, float b);
	void smaller_than_zero(float a, float b);
	void equal_to_zero(float a, float b);
	float a, b, c;
	printf("请输入二次函数的三个系数:\n");
	scanf("%f%f%f", &a, &b, &c);
	delta = b*b - 4 * a*c;
	printf("delta=:%f", delta);
	smaller_than_zero(a, b);	
	printf("该方程的根: x1=%f+%fi,x2=%f-%fi.", p, q, p, q);
}

void smaller_than_zero(float a, float b)
{
	p = -b / (2 * a);
	q = sqrt(-delta) / (2 * a);
	printf("p=%f,q=%f\n", p, q);
}
请输入二次函数的三个系数:
1 2 4
delta=:-12.000000p=-1.000000,q=1.732051
该方程的根: x1=-1.000000+1.732051i,x2=-1.000000-1.732051i.请按任意键继续. . .

 

你delta = 0 是赋值语句。 应该用 delta == 0

34行
else if (delta == 0)

 

多谢多谢,最近刚开始学,老是犯这种错误