2017-11-20 30 views
-1

これは私が二次式の計算を構築しようとしているプログラムは誤った答えと "-nan(ind)"を返します。私は何を間違えたのですか?

#include <stdio.h> 
#include <math.h> 
void main() 
{ 
float a = 0, b = 0, c = 0; 
float disc = b*b - 4 * a*c; 
float sing = -b/(2 * a); 
float lin = -c/b; 
float quad1 = (-b + (disc))/(2 * a); 
float quad2 = (-b - (disc))/(2 * a); 
printf_s("Please enter the coefficients a, b, and c\n"); 
scanf_s("%g %g %g", &a, &b, &c); 
if (a == 0) 
{ 
    if (b == 0) 
    { 
     if (c == 0) 
     { 
      printf_s("There are infinite solutions\n"); 
     } 
     else 
     { 
      printf_s("There is no solution\n"); 
     } 
    } 
    else 
    { 
     printf_s("The singular solution is %g\n", lin); 
    } 
} 
else 
{ 
    if (disc < 0) 
    { 
     printf_s("There is no real solution\n"); 
    } 
    else 
    { 
     if (disc == 0) 
     { 
      printf_s("The singular solution is %g\n", sing); 
     } 
     else 
     { 
      printf_s("The solutions are x1 = %g and x2 = %g\n", quad1, quad2); 
      } 
     } 
    } 
} 

私のコードです。私はa = 2、b = 1、c = -21を接続すると、x = 3とx = -3.5を受け取ることを期待しています。 代わりに "The singular solution is -nan(ind)"という出力が得られます これは意味ですか?どうすれば修正できますか?

答えて

0

discの値は、の入力前に計算されています。順序を変更します。

これはまた、sing,lin,quad1およびquad2となります。

float a, b, c; 
printf_s("Please enter the coefficients a, b, and c\n"); 
scanf_s("%g %g %g", &a, &b, &c); 
float disc = b*b - 4 * a*c; 
float sing = -b/(2 * a); 
float lin = -c/b; 
float quad1 = (-b + (disc))/(2 * a); 
float quad2 = (-b - (disc))/(2 * a); 
0

あなたはゼロ除算、意味がありませんしようとしている、ここでは、これらの線

float sing = -b/(2 * a); 
float lin = -c/b; 

参照してください。

ユーザーからの値を読み取った後に操作を移動する必要があると思われます。

1

変数は初期化されず、遡及的に再計算されません。

float disc = b*b - 4 * a*c; 

と初期化、すなわち00 * 0 - 4 * 0 * 0に等しく、例えば

、。

変数を定義してから入力を読み込み、を次にと計算します。

関連する問題