1、当if语句中的执行语句又是if语句时,则构成了if语句的嵌套情形。
其一般形式可表示为:
if()
{
if()……;
}
或:
if()
if()语句1;
else 语句2;
else
if()语句3;
else 语句4;
注:if语句的嵌套不要太多,最好不超过5个。(避免逻辑错误)
在嵌套内的if语句可能又是if-else型,这将会出现多个if和多个else重叠的情况,这时要特别注意if和else的配对问题。
例:if(表达式1)
if(表达式2)
语句1;
else
语句2;
思考:else究竟与哪一个if配对呢?
就近原则:为避免二义性,C语言规定,else总是与它前面最近的if配对。所以应理解为;
if(表达式1)
if(表达式2)
语句1;
else
语句2;
比较下列两例,哪一个是运用嵌套方法?
例1:
#include<stdio.h> void main() { int a,b; printf("please input A,B "); scanf("%d%d",&a,&b); if(a!=b) if(a>b) printf("A>B "); else printf("A<B "); else printf("A=B "); }
例2:
#include<stdio.h> void main() { int a,b; printf("please input A,B "); scanf("%d%d",&a,&b); if(a==b) printf("A=B "); else if(a>b) printf("A>B "); else printf("A<B "); }
注:采用嵌套结构实质上是为了进行多分支选择,实际上有三种选择,即:A>B、A<B或A=B。这种问题用if-else-if语句也可以完成,而且程序更加清晰。因此,在一般情况下较少使用if语句的嵌套结构,以使程序更便于阅读理解。
2、条件运算符和条件表达式
条件运算符为“?和:”是一个三目运算符。
由条件运算符组成的条件表达式的一般形式为:
表达式1?表达式2:表达式3
其求值规则为:若表达式1的值为真,则以表达式2的值作为条件表达式的值,否则以表达式3的值作为整个条件表达式的值
条件表达式通常用于赋值语句之中:
例: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)
例:
#include<stdio.h> void main() { int a,b,max; printf(" please input two nubers "); scanf("%d%d",&a,&b); printf("max=%d",a>b?a:b); }
补例:输入一个字符,判断它是否为大写字母,如果是,把它转换成小写字母,如果不是,不转换。然后输出最后得到的字符。
#include<stdio.h> void main() { char ch; scanf("%c",&ch); ch=(ch>='A'&&ch<='Z')?(ch+32):ch; printf("%c",ch); }