例5.3有一函数:
y=-1(x<0)
0(x=0)
1(x>0)
编一程序,输入一个x值,输出y值。
可以先写出算法:
输入x
若 x < 0y =-1
若 x = 0y = 0
若 x > 0y = 1
输出y
或:
输入x
若 x < 0y = -1
否则:
若 x = 0y = 0
若 x > 0y = 1
输出y
也可以用流程图表示,见图5.7。
有以下几个程序,请读者判断哪个是正确的?
程序1:
main()
{int x,y;
scanf("%d",&x);
if(x<0)y=-1;
else if(x==0) y=0;
else y=1;
printf("x=%d,y=%d\n",x,y);

程序2: 将上面程序的if语句(第4~6行)改为:
if (x>=0)
if (x>0)y= 1;
else  y= 0;
else  y=-1;
程序3: 将上述if语句改为:
y=-1;
if(x!=0)
if(x>0) y=1;
else y=0;
程序4:
y=0;
if(x>=0)
if(x>0) y=1;
else y=-1;
只有程序1和程序2是正确的。程序1体现了图5.7的流程,显然它是正确的。程序2的流程图见图5.8。它也能实现题目的要求。程序3的流程图见图5.9。程序4的流程图见图5.10。它们不能实现题目的要求。请注意程序中的else与if的配对关系。例如程序3中的else子句是和它上一行的内嵌的if语句配对,而不与笫2行的if语句配对。为了使逻辑关系清晰,避免出错,一般把内嵌的if语句放在外层的else子句中(如程序1那样),这样由于有外层的else相隔,内嵌的else不会被误认为和外层的if配对,而只能与内嵌的if配对,这样就不会搞混,如像程序3和程序4那样写就很容易出错。
出错。