懂C语言的进来看下

来源:百度知道 编辑:UC知道 时间:2024/06/07 05:13:14
/* Note:Your choice is C IDE */
#include "stdio.h"
/*求一元二次方程ax^2+bx+c=0的根*/
void main()
{
int iFirnum,iSecnum,iThinum,e,x1,x2,r,i;
printf("请输入二次项系数a:");
scanf("%d",&iFirnum);
printf("请输入一次项系数b:");
scanf("%d",&iSecnum);
printf("请输入常熟项c:");
scanf("%d",&iThinum);
e=iSecnum*iSecnum-4*iFirnum*iThinum;
if(e>=0)
{
x1=(-iSecnum+sqrt(e))/(2*iFirnum);
x2=(-iSecnum-sqrt(e))/(2*iFirnum);
printf("x1=%8.4f,x2=%8.4f\n",x1,x2);
}
else
{
r=-iSecnum/(2*iFirnum);
i=sqrt(-e)/(2*iFirnum);
printf("x1=%8.4f+%8.4fi\n",r,i);
printf("x2=%8.4f-%8.4fi\n",r,i);
}
}

我自学写的,能运行,但是输出的答案不对,哪里错了??

#include<stdio.h>
#include<math.h>//加这个头文件,否则不能用sqrt

/*求一元二次方程ax^2+bx+c=0的根*/
void main()
{
int iFirnum,iSecnum,iThinum;
float e,x1,x2,r,i;//这里不能声明为int
printf("请输入二次项系数a:");
scanf("%d",&iFirnum);
printf("请输入一次项系数b:");
scanf("%d",&iSecnum);
printf("请输入常熟项c:");
scanf("%d",&iThinum);
e=iSecnum*iSecnum-4*iFirnum*iThinum;
if(e>=0)
{
x1=(-iSecnum+sqrt(e))/(2*iFirnum);
x2=(-iSecnum-sqrt(e))/(2*iFirnum);
printf("x1=%8.4f,x2=%8.4f\n",x1,x2);
}
else
{
r=(float)-iSecnum/(2*iFirnum);//这里需要强制转换,建议你开始就全都声明为float
i=sqrt(-e)/(2*iFirnum);
printf("x1=%8.4f+%8.4fi\n",r,i);
printf("x2=%8.4f-%8.4fi\n",r,i);
}
}

1 iSecnum/(2*iFirnum);当iFirnum为0使,后果很严重
2 iSecnum/(2*iFirnum);是整除的意思 应该将所有的变量都定义为double 而不是int 。