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\n"); else printf("A<B\n"); else printf("A=B\n"); }
例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\n"); else if(a>b) printf("A>B\n"); else printf("A<B\n"); }
注:采用嵌套結構實質上是為了進行多分支選擇,實際上有三種選擇,即: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("\n 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); }