程序代码:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
//清空缓存函数
void safe_flush(FILE *fp)
{
int ch;
while( (ch = fgetc(fp)) != EOF && ch != '\n' );
}
int main( )
{
int a,b,c;float d; //a,b,c为一元二次方程的3个系数,d为根判别式
float p,q; //计算虚数根用
float x1,x2; //方程式的两个根
const char i='i'; //虚数单位
char ag='y'; //判断重复计算
int ag1;
do{
system("cls");
printf("此程序为求解形如ax^2+bx+c=0(a≠0)一元二次方程的根.\n\n");
printf("请依次输入二次项系数 a\n\n");
printf("请依次输入一次项系数 b\n\n");
printf("请依次输入常数项 c\n\n三数间敲击Enter间隔\n");
safe_flush(stdin); //清空缓存
scanf("%d %d %d",&a,&b,&c);
printf("\n此时方程为%dX^2+%dX+(%d)=0\n\n",a,b,c);
d=b*b-(4*a*c);
printf("此时根判别式△=b*b-(4*a*c)=%f\n\n",d);
printf("按Enter即可得出结果\n\n");
getch();
if(d>=0)
{
if(d==0)
{
x1=-b/(2*a);
x2=x1;
printf("此方程式有两个相等的实数根x1=x2=%f\n\n",x1);
}
else if(d>0)
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("此方程式有两个不相等的实数根x1=%f,x2=%f\n\n",x1,x2);
}
}
else
{
printf("因为△<0,故此方程式根为虚数\n\n");
p=-b/(2*a);
q=sqrt(-d)/(2*a);
printf("方程有两个虚数根,虚数单位为i\n\n");
printf("虚根X1=%f+%fi\n\n",p,q);
printf("虚根X2=%f-%fi\n\n",p,q);
}
printf("是否再次计算 y or n!\n\n");
safe_flush(stdin);
scanf("%c",&ag);
if(ag=='n'||ag=='N')
ag1=0;
else if(ag=='y'||ag=='Y')
ag1=1;
}while(ag1);
return 0;
}
[此贴子已经被作者于2016-8-5 12:53编辑过]