2012-03-25 2 views
-3

도움이 필요합니다. 프로그램이 gcc로 잘 컴파일됩니다. 하지만 터미널에서 실행할 때; 내가 프로그램을 GCC로 컴파일 02 차 방정식을 푸는 C 프로그램

나에게 동일이 개 실제 솔루션 또는 2 개 복잡한 솔루션을 제공하는 이유를 알 수없는, 당신은

당신의 도움이

을 주셔서 감사합니다 -lm 추가 해
#include<stdio.h> 
#include<stdlib.h> 
#include<math.h> 
main() 
{ 
int a,b,c; 
float x,x1,x2,x2c,x1c,xcb,xba,D; 
char i; 

x1==(-b+sqrt(D))/(2*a); 
x2==(-b-sqrt(D))/(2*a); 
x1c==(-b+i*sqrt(-D))/(2*a); 
x2c==(-b-i*sqrt(-D))/(2*a); 
xcb==-c/b; 
xba==-b/(2*a); 
D==b*b-4*a*c; 

printf("a="); 
scanf("%d",&a); 
printf("b="); 
scanf("%d",&b); 
printf("c="); 
scanf("%d",&c); 
a*x*x+b*x+c==0; 
if(a==0) 
{ 
if(b==0) 
    { 
    if(c==0) printf("x belongs to R\n"); 
    else printf("no solutions\n",x); 
    } 
else printf("x= %f \n",xcb); 
    } 

else 
{ 
if(D==0) printf("x= %f \n",xba); 
else 
    { 
    if(D>0) {printf("2 solutions Real: x1=%f\n x2=%f\n",x1,x2);} 
    else {printf("2 solutions Complex: x1=%f\n x2=%f\n",x1c,x2c);} 
    } 
} 
return 0; 
} 
+6

이것은 GCC에서 크게 컴파일되지 않습니다. '-Wall' 플래그를 (적어도) 사용하십시오. – Mat

+4

왜 모두 ==? =로 지정하고 싶지 않습니까? – duffymo

+0

코드가 훨씬 명확해질 수 있습니다. 다음을보십시오 : http://cstartercodes.blogspot.in/2015/02/solution-of-quadratic-equation.html –

답변

7

사용하는 변수가 초기화되지 않았습니다.
당신은 미정의 행동가 흩어져 있습니다.

int a,b,c; 
float x,x1,x2,x2c,x1c,xcb,xba,D; 
char i; 
6

할당 한 = 함께 :

x1==(-b+sqrt(D))/(2*a); 
x2==(-b-sqrt(D))/(2*a); 
x1c==(-b+i*sqrt(-D))/(2*a); 
x2c==(-b-i*sqrt(-D))/(2*a); 
xcb==-c/b; 
xba==-b/(2*a); 
D==b*b-4*a*c; 

그리고 당신은 어떤 변수 초기화가 없습니다. 윈도우 금리로 cl.exe로 컴파일 사실

:

test.c(10) : warning C4553: '==' : operator has no effect; did you intend '='? 
test.c(11) : warning C4553: '==' : operator has no effect; did you intend '='? 
test.c(12) : warning C4553: '==' : operator has no effect; did you intend '='? 
test.c(13) : warning C4553: '==' : operator has no effect; did you intend '='? 
test.c(14) : warning C4553: '==' : operator has no effect; did you intend '='? 
test.c(15) : warning C4553: '==' : operator has no effect; did you intend '='? 
test.c(16) : warning C4553: '==' : operator has no effect; did you intend '='? 
test.c(24) : warning C4553: '==' : operator has no effect; did you intend '='? 
d:\test.c(10) : warning C4700: uninitialized local variable 'D' used 
d:\test.c(30) : warning C4700: uninitialized local variable 'x' used 
d:\test.c(32) : warning C4700: uninitialized local variable 'xcb' used 
d:\test.c(37) : warning C4700: uninitialized local variable 'xba' used 
d:\test.c(40) : warning C4700: uninitialized local variable 'x2' used 
d:\test.c(40) : warning C4700: uninitialized local variable 'x1' used 
d:\test.c(41) : warning C4700: uninitialized local variable 'x2c' used 
d:\test.c(41) : warning C4700: uninitialized local variable 'x1c' used 
2

난 당신이 파이썬으로 작성하는 것처럼 그들은 내가 의해 다중 C. 귀하에게 복잡한 숫자를 추가 한 것을하지 알고 있어요.

#include<stdio.h> 
#include<stdlib.h> 
#include<math.h> 
main() 
{ 
    int a,b,c; 
    float x,x1,x2,x2c,x1c,xcb,xba,D; 
    char i; 

    printf("a="); 
    scanf("%d",&a); 
    printf("b="); 
    scanf("%d",&b); 
    printf("c="); 
    scanf("%d",&c); 

    x1=(-b+sqrt(D))/(2*a); 
    x2=(-b-sqrt(D))/(2*a); 
    x1c=(-b+i*sqrt(-D))/(2*a); 
    x2c=(-b-i*sqrt(-D))/(2*a); 
    xcb=-c/b; 
    xba=-b/(2*a); 
    D=b*b-4*a*c; 

    if(a==0) 
    { 
    if(b==0) 
     { 
     if(c==0) printf("x appartient à R\n"); 
     else printf("Pas de solutions\n",x); 
     } 
    else printf("x= %f \n",xcb); 
     } 

    else 
    { 
    if(D==0) printf("x= %f \n",xba); 
    else 
     { 
     if(D>0) {printf("2 solutions Réelles: x1=%f\n x2=%f\n",x1,x2);} 
     else {printf("2 solutions Complexes: x1=%f\n x2=%f\n",x1c,x2c);} 
     } 
    } 
    return 0; 
} 
+0

C99는'complex.h'와'_Complex' 타입을 추가했습니다. 예를 들어보십시오. http://stackoverflow.com/questions/6418807/how-to-work-with-complex-numbers-in-c –

+0

감사합니다, Alexandre; 나는이 코드가 제대로하고 있는가? – duffymo

+3

당신은'float _Complex'를 데이터 형으로 사용하고'_Complex_I'를'i' 대신에 사용해야합니다 (또한 ''을 포함합니다). 또한 계수 중 하나가 큰 경우 메서드 자체가 실제로 정확하지 않습니다. 델타가 b에 가까울 때 치명적인 취소를 피하려면 [이 답변] (http://stackoverflow.com/questions/4503849/quadions-equation-in-ada/4504415#4504415)을 참조하십시오. 또한'D'가 초기화되어 사용됩니다. –

0

이러한 문제가 존재합니다 :

여기가 해결이 코드에 너무 많은 잘못하지만 불완전한 시도의

1.Undefined 변수를

(당신은 사용하기 전에 할당해야합니다)

2. '=='는 여기에서 사용하기에 적합하지 않습니다.

우리가

int a; 
    int b; 
    printf("%f",a/b); 

을 3.when 컴파일러가 당신에게 경고를주고, 것 경우 B>를, 0 화면에 결과가 될 것입니다.