C双重表达

时间:2017-05-23 09:25:10

标签: c

我在C中创建了一个程序,它从键盘获取a,b和c的值,并显示“+ value”和“-value”。但是当我提供输入后,它会显示诸如“-1。#IND0”之类的输出。为什么会这样?没有编译错误......

继承我的代码:

#include<stdio.h>
#include<math.h>
int main(void)
{
int a,b,c;
double x1,x2;
printf("Enter a ");
scanf("%d",&a);

printf("Enter b ");
scanf("%d",&b);

printf("Enter c ");
scanf("%d",&c);

x1 = ( (-1 * b) + sqrt(pow(b,2) - (4 * a * c)) ) /  2 * (float)a ;
x2 = ( (-1 * b) - sqrt(pow(b,2) - (4 * a * c)) ) /  2 * (float)a ;

printf("Plus Value %.5f\n",x1);
printf("Minus Value %.5f\n",x2);
}

2 个答案:

答案 0 :(得分:3)

您需要检查pow(b,2) - (4 * a * c)是否为非负数,否则您无法取平方根。

同时检查a不是0,因为你要除以它。

完整性检查对于避免意外行为非常重要。希望这有帮助!

答案 1 :(得分:-1)

您的程序仅对 a = 1 有效,因为当 a&gt; 1 a = 5 为例, sqrt(pow(b,2) - (4 * a * c))将导致 sqrt(-ve)值。这就是它提供此输出的原因。该程序在逻辑上是正确的,但并非适用于所有情况。