我对一个简单的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行执行if
和else
。
输出为No roots!x1=0.0000 and x2=0.0000
怎么了?
答案 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);
您正在尝试打印未初始化的x1
和x2
的值。无论if
条件如何,都会执行该行(因为您已将其放入代码中)。
为什么你认为if
和else
都被执行了?
答案 2 :(得分:0)
它没有同时执行if
和else
,所发生的事情是x1
和x2
必须打印出来并且正在打印它们的值以0
和0
开出。我建议将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();
}