请大家帮我分析一下这个C程序中的选择结构(if语句的嵌套)有什么错误?

#include<stdio.h>
#include<conio.h>
main()
{
int X=1,Y=1;
int s,a,b;

s=0,a=50,b=40;

if(s)
if(a>=50&&a<=90)
X=0;
if(b>=18&&b<=50)
Y=0;
else
if(a>=45&&a<=80)
X=0;
if(b>=18&&b<=45)
Y=0;

printf("%d,%d",X,Y);

getch();
}
就是这个程序,按我的理解,既然s为0,就应直接进入else里来:然后判断a,符合,给X赋0;然后接着走,判断b,符合,给Y也赋0——输出结果应该是0,0才对,为什么输出的结果是1,0呢?(下面的图片是按我的理解绘制的框图)

第1个回答  2011-02-21
else 总是会和与之最近的一个if 语句相匹配;按这种理解你重新看一下你的程序的逻辑结构你就会明白为什么会错了。
我明白你想要表达的意思。一般在条件分支比较多比较复杂的时候我们要用“{ }”包含程序块,这样程序逻辑更加清晰,而且更具有可读性,是一个很好的习惯哦!!
#include<stdio.h>
#include<conio.h>
main()
{
int X=1,Y=1;
int s,a,b;

s=0,a=50,b=40;

if(s)
{
if(a>=50&&a<=90)
X=0;
if(b>=18&&b<=50)
Y=0;
}
else
{
if(a>=45&&a<=80)
X=0;
if(b>=18&&b<=45)
Y=0;
}

printf("%d,%d",X,Y);

getch();
}
第2个回答  2011-02-20
你在if和else后面缺少花括号了,如下面那样输出结果就是x=0,y=0了。
#include<stdio.h>
#include<conio.h>
main()
{
int X=1,Y=1;
int s,a,b;

s=0,a=50,b=40;

if(s)
{
if(a>=50&&a<=90)
X=0;
if(b>=18&&b<=50)
Y=0;
}
else
{
if(a>=45&&a<=80)
X=0;
if(b>=18&&b<=45)
Y=0;
}
printf("%d,%d",X,Y);

getch();
}
第3个回答  2011-02-21
明白了错在哪里之后,按照错误的程序重新绘制一下框图,看看到底为什么是 1,0
你还可以再比较一下你的程序与下面这个输出最小数的程序:
#include "stdio.h"
main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a<b)
if(a<c)
printf("%d",a);
else
printf("%d",c);
else
if(b<c)
printf("%d",b);
else
printf("%d",c);
}
这个程序两块分支的花括号可有可无,因为每块里的else已经把它给托住了,而你的那个程序却必须要有。不过对于初学者来说,还是建议你将代码规范化(像楼上说的那样),养成良好的习惯,别以为你还年轻,等你再多弄几年计算机,就会非常庆幸了~
第4个回答  2011-02-21
(1) 呵呵,请你在看一下课本上有关if的概念.在想一想自己错在哪里.
(2) if(s)
{
if(a>=50&&a<=90)
X=0;
if(b>=18&&b<=50)
Y=0;
}
else
当按照 上面所示 加上 大括号的话, 当 s为0时,就会直接进入else里来,因为打括号的内容都属于if(s)的执行语句.
关键字else只与离它上面 最近 的一个if 匹配 .本回答被提问者采纳
第5个回答  2011-02-20
明显错了嘛
几个else语句后都没条件啊~~~

要用elseif(条件)

if(g==0)
printf("恭喜,连这个都不知道,你可以关闭这个程序了.");
system("pause");
exit(0);
else //条件呢?
{f=g-a;
temp=(b-a)/f+1;
c=temp;
e=d*c/2;}
else //条件呢?
{temp=(b-a)/f+1;
c=temp;
e=d*c/2;}
else //条件呢?
{e=d*c/2;
printf("得到的答案是 %lf",e);}
}
相似回答