如果其他两个都被罚款

时间:2016-10-30 16:24:29

标签: c if-statement

我对一个简单的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行和第13行执行ifelse。 输出为No roots!x1=0.0000 and x2=0.0000 怎么了?

3 个答案:

答案 0 :(得分:2)

声明

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

不在else子句中。此外,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();

答案 1 :(得分:0)

No roots!x1=0.0000 and x2=0.0000

如果没有根,您实际上有未定义的行为,因为在

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

您正在尝试打印未初始化的x1x2的值。无论if条件如何,都会执行该行(因为您已将其放入代码中)。

为什么你认为ifelse都被执行了?

答案 2 :(得分:0)

它没有同时执行ifelse,所发生的事情是x1x2必须打印出来并且正在打印它们的值以00开出。我建议将printf("r1=%f and r2=%f", x1, x2);放在else内。另外,我建议将else { if设为else,因为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();

}