C 如果两者都被执行
我有一个简单的c程序奇怪的问题C 如果两者都被执行,c,if-statement,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
#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();
}
#包括
#包括
#包括
main(){
INTA、b、c、δ;
浮点x1,x2;
printf(“请输入a、b、c:”);
scanf(“%d%d%d”、&a、&b和&c);
δ=(b*b)-(4*(a*c));
if(δ<0){
printf(“没有根!”);
}
否则{
如果(增量>=0){
x1=(-b+sqrt(δ))/(2*a);
x2=(-b-平方比(δ))/(2*a);
}
}
printf(“r1=%f和r2=%f”,x1,x2);
getch();
}
当我输入211
时,程序似乎在第10行和第13行执行if
和else
。
输出为无根!x1=0.0000和x2=0.0000
怎么了
No roots!x1=0.0000 and x2=0.0000
如果没有根,您实际上有未定义的行为,因为下面
printf("r1=%f and r2=%f", x1, x2);
您正试图打印未初始化的x1
和x2
的值。而该行的执行与if
条件无关(由于您将其放入代码中的位置)
如果执行了和则执行了,为什么您会假定这两个都执行了?语句
printf("r1=%f and r2=%f", x1, x2);
不在else子句中。如果(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();
if(增量<0){
printf(“没有根!”);
}
否则{
x1=(-b+sqrt(δ))/(2*a);
x2=(-b-平方比(δ))/(2*a);
printf(“r1=%f和r2=%f”,x1,x2);
}
getch();
如果
和其他
都不执行,发生的事情是x1
和x2
必须打印出来,它们的值被打印为0
和0
。我建议将printf(“r1=%f和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();
}
#包括
#包括
#包括
main(){
INTA、b、c、δ;
浮点x1,x2;
printf(“请输入a、b、c:”);
scanf(“%d%d%d”、&a、&b和&c);
δ=(b*b)-(4*(a*c));
if(δ<0){
printf(“没有根!”);
}
否则{
x1=(-b+sqrt(δ))/(2*a);
x2=(-b-平方比(δ))/(2*a);
printf(“r1=%f和r2=%f”,x1,x2);
}
getch();
}
您希望得到什么样的输出?我希望看到的只是没有根或根:),但我发现了我的问题@ed heal发现了它:))