2016-10-30 32 views
-1

我有一個簡單的c程序奇怪的問題。如果否則兩者都被執行

#include<stdio.h> 
#include<math.h> 
#include<conio.h> 
main() { 
    int a, b, c, delta; 
    float x1, x2; 
    printf("Please Enter a,b,c :"); 
    scanf("%d%d%d",&a,&b,&c); 
    delta = (b * b) - (4 * (a * c)); 
    if(delta < 0){ 
     printf("No roots!"); 
    } 
    else{ 
     if (delta >= 0){ 
      x1 = (-b + sqrt(delta))/(2 * a); 
      x2 = (-b - sqrt(delta))/(2 * a); 
     } 
    } 
    printf("r1=%f and r2=%f", x1, x2); 
    getch(); 

} 

當我輸入2 1 1,看來,該程序執行10號線兩ifelse和13 輸出是No roots!x1=0.0000 and x2=0.0000 出了什麼問題?

+0

你期望輸出什麼? –

+0

我期待看到沒有根或根:)但我發現我的問題@ ed-heal發現它:)))) –

回答

0
No roots!x1=0.0000 and x2=0.0000 

如果沒有根你確實有未定義行爲因爲下面

printf("r1=%f and r2=%f", x1, x2); 

你要打印的x1x2值 - 未初始化。並且無論if條件如何(因爲您已將其放入代碼中),該行都會執行。

爲什麼你認爲ifelse都被執行?

2

聲明

printf("r1=%f and r2=%f", x1, x2); 

不是別的子句。 if (delta >= 0){也不是必需的。代碼更改爲

if(delta < 0) { 
    printf("No roots!"); 
} 
else { 
    x1 = (-b + sqrt(delta))/(2 * a); 
    x2 = (-b - sqrt(delta))/(2 * a); 
    printf("r1=%f and r2=%f", x1, x2); 
} 
getch(); 
0

它不執行這兩個ifelse,正在發生的事情是,x1x2已被打印出來,並正在被打印出來,它們的值00。我建議將printf("r1=%f and r2=%f", x1, x2);放在else之內。此外,我會建議使else { ifelse,因爲if是不必要的。這是我的建議

#include<stdio.h> 
#include<math.h> 
#include<conio.h> 
main() { 
    int a, b, c, delta; 
    float x1, x2; 
    printf("Please Enter a,b,c :"); 
    scanf("%d%d%d",&a,&b,&c); 
    delta = (b * b) - (4 * (a * c)); 
    if(delta < 0){ 
     printf("No roots!"); 
    } 
    else { 
     x1 = (-b + sqrt(delta))/(2 * a); 
     x2 = (-b - sqrt(delta))/(2 * a); 
     printf("r1=%f and r2=%f", x1, x2); 
    } 

    getch(); 

} 
相關問題