ITEEDU

5.3.2 if语句的嵌套

当if语句中的执行语句又是if语句时,则构成了if 语句嵌套的情形。

其一般形式可表示如下:

if(表达式)

if语句;

或者为

if(表达式) 
   if语句; 
else 
   if语句;

在嵌套内的if语句可能又是if-else型的,这将会出现多个if和多个else重叠的情况,这时要特别注意if和else的配对问题。

例如:

if(表达式1)
if(表达式2)
   语句1;
else
   语句2;

其中的else究竟是与哪一个if配对呢

应该理解为:

if(表达式1)
  if(表达式2)
     语句1;
  else
    语句2;

还是应理解为:

if(表达式1)
   if(表达式2)
      语句1;
else
   语句2;

为了避免这种二义性,C语言规定,else 总是与它前面最近的if配对,因此对上述例子应按前一种情况理解。

【例5.6】
main(){
int a,b;
printf("please input A,B: ");
scanf("%d%d",&a,&b);
if(a!=b)
if(a>b) printf("A>B\n");
else printf("A< B\n");
else printf("A=B\n");
}

比较两个数的大小关系。

本例中用了if语句的嵌套结构。采用嵌套结构实质上是为了进行多分支选择,实际上有三种选择即A>B、A<B或A=B。这种问题用if-else-if语句也可以完成。而且程序更加清晰。因此,在一般情况下较少使用if语句的嵌套结构。以使程序更便于阅读理解。

【例5.7】
main(){
    int a,b;
    printf("please input A,B:      ");
    scanf("%d%d",&a,&b);
    if(a==b) printf("A=B\n");
    else if(a>b)  printf("A>B\n");
    else  printf("A< B\n");
}

5.3.1 条件运算符和条件表达式

如果在条件语句中,只执行单个的赋值语句时, 常可使用条件表达式来实现。不但使程序简洁,也提高了运行效率。

条件运算符为和:,它是一个三目运算符,即有三个参与运算的量。

由条件运算符组成条件表达式的一般形式为:

表达式1 表达式2: 表达式3

其求值规则为:如果表达式1的值为真,则以表达式2 的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。

条件表达式通常用于赋值语句之中。

例如条件语句:

if(a>b) max=a;
else max=b;

可用条件表达式写为

 max=(a>b)?a:b;

执行该语句的语义是:如a>b为真,则把a赋予max,否则把b 赋予max。

使用条件表达式时,还应注意以下几点:

1) 条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。

因此

 max=(a>b)?a:b

可以去掉括号而写为

 max=a>b?a:b

2) 条件运算符和:是一对运算符,不能分开单独使用。

3) 条件运算符的结合方向是自右至左。

例如:

a>b?a:c>d?c:d

应理解为

a>b?a:(c>d?c:d)

这也就是条件表达式嵌套的情形,即其中的表达式3又是一个条件表达式。

【例5.8】
main(){
int a,b,max;
printf("\n input two numbers: ");
scanf("%d%d",&a,&b);
printf("max=%d",a>ba:b);
}

用条件表达式对上例重新编程,输出两个数中的大数。