3.3 條件控制語句
在程序的三種基本結(jié)構(gòu)中,第二種即為選擇結(jié)構(gòu),其基本特點(diǎn)是:程序的流程由多路分支組成,在程序的一次執(zhí)行過程中,根據(jù)不同的情況,只有一條支路被選中執(zhí)行,而其他分支上的語句被直接跳過。
C語言中,提供if語句和switch語句選擇結(jié)構(gòu), if語句用于兩者選一的情況,而switch用于多分支選一的情形。
3.3.1 if語句
1. if語句的兩種基本形式
首先,我們看一個(gè)例子,由此了解選擇結(jié)構(gòu)的意義及設(shè)計(jì)方法。
[例3-5] 輸入三個(gè)數(shù),找出并打印其最小數(shù)。
分析:設(shè)三個(gè)數(shù)為A、B、C,由鍵盤讀入,我們用一個(gè)變量MIN來標(biāo)識(shí)最小數(shù), A、B、C與MIN皆定義為int型變量。
每次比較兩個(gè)數(shù),首先比較A和B,將小的一個(gè)賦給MIN,再把第三個(gè)數(shù)C與MIN比較,再將小的一個(gè)賦給MIN,則最后MIN即為A、B、C中最小數(shù)。
算法如下:
1) 輸入A、B、C。
2) 將A與B中小的一個(gè)賦給MIN。
3 ) 將MIN與C中小的一個(gè)賦給MIN。
4) 輸出MIN。
將第2)步細(xì)化為:若A < B,則MIN <==A,否則:MIN <==B;其流程圖見圖3- 1。
第3)步細(xì)化為:若C < M I N,則MIN <==C;其流程圖見圖3 - 2。
對(duì)應(yīng)圖3 - 1和圖3 - 2,正是i f語句的兩種基本形式,與圖3 - 2對(duì)應(yīng)的i f語句的格式為:
if <表達(dá)式> 語句
當(dāng)表達(dá)式為真時(shí),執(zhí)行語句,表達(dá)式為假時(shí)跳過語句。
與圖3 - 1對(duì)應(yīng)的i f語句的格式為:
if<表達(dá)式>
語句1
else
語句2
當(dāng)表達(dá)式為真時(shí),執(zhí)行語句1,表達(dá)式為假時(shí)執(zhí)行語句2。無論如何,語句1與語句2每次只能有一個(gè)被執(zhí)行。
要注意的是: if或if . . . else,包括后面要講到的嵌套if,即if...else if...被看成是一條語句,即使其中的語句是包含多條語句的復(fù)合語句,仍然如此。
下面是例3 - 5的源程序:
main( )
{
int a,b,c,min;
printf(" input a,b,c :");
scanf("%d %d %d" , &a , &b , &c);
if(a min = a;
else
min = b;
if (c min = c;
printf("The result is %d\n",min);
}
執(zhí)行情況如下:
input a,b,c: 3 5 2
The result is : 2
這里順便提一下程序書寫的縮排問題,所謂縮排,就是下一行與上一行相比,行首向右縮進(jìn)若字符,如上例的min = a 、min = b等。適當(dāng)?shù)目s排能使程序的結(jié)構(gòu)、層次清晰、一目了然,增加程序的易讀性。應(yīng)該從一開始就養(yǎng)成一個(gè)比較好的書寫習(xí)慣,包括必要的注釋、適當(dāng)?shù)目招幸约翱s排。
2. 復(fù)合語句
if語句中,有時(shí)需要執(zhí)行的語句不止一條,這就要用到復(fù)合語句。
復(fù)合語句,就是用一對(duì)花括號(hào)括起來的一條或多條語句,形式如下:
{
語句1;
語句2;
。。。。
語句n;
}
無論包括多少條語句,復(fù)合語句從邏輯上講,被看成是一條語句。
復(fù)合語句在分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)中,使用十分廣泛。
[例3-6] 讀入兩個(gè)數(shù)x、y,將大數(shù)存入x,小數(shù)存入y。
分析: x、y從鍵盤讀入,若x > = y,只需順序打出,否則,應(yīng)將x,y中的數(shù)進(jìn)行交換,然
后輸出。兩數(shù)交換必須使用一個(gè)中間變量t,
定義三個(gè)浮點(diǎn)數(shù)x、y、t。
算法:
1) 讀入x、y;
2 ) 大數(shù)存入x,小數(shù)存入y;
3 ) 輸出x、y。
第2)步求精:
若x < y,則交換x與y;
再求精,x與y交換;
① t <== x
② x <== y
③ y <== t
算法的流程圖見圖3 - 3,
程序如下:
#include
main( )
{
float x,y,t;
printf("input x,y:");
在程序的三種基本結(jié)構(gòu)中,第二種即為選擇結(jié)構(gòu),其基本特點(diǎn)是:程序的流程由多路分支組成,在程序的一次執(zhí)行過程中,根據(jù)不同的情況,只有一條支路被選中執(zhí)行,而其他分支上的語句被直接跳過。
C語言中,提供if語句和switch語句選擇結(jié)構(gòu), if語句用于兩者選一的情況,而switch用于多分支選一的情形。
3.3.1 if語句
1. if語句的兩種基本形式
首先,我們看一個(gè)例子,由此了解選擇結(jié)構(gòu)的意義及設(shè)計(jì)方法。
[例3-5] 輸入三個(gè)數(shù),找出并打印其最小數(shù)。
分析:設(shè)三個(gè)數(shù)為A、B、C,由鍵盤讀入,我們用一個(gè)變量MIN來標(biāo)識(shí)最小數(shù), A、B、C與MIN皆定義為int型變量。
每次比較兩個(gè)數(shù),首先比較A和B,將小的一個(gè)賦給MIN,再把第三個(gè)數(shù)C與MIN比較,再將小的一個(gè)賦給MIN,則最后MIN即為A、B、C中最小數(shù)。
算法如下:
1) 輸入A、B、C。
2) 將A與B中小的一個(gè)賦給MIN。
3 ) 將MIN與C中小的一個(gè)賦給MIN。
4) 輸出MIN。
將第2)步細(xì)化為:若A < B,則MIN <==A,否則:MIN <==B;其流程圖見圖3- 1。
第3)步細(xì)化為:若C < M I N,則MIN <==C;其流程圖見圖3 - 2。
對(duì)應(yīng)圖3 - 1和圖3 - 2,正是i f語句的兩種基本形式,與圖3 - 2對(duì)應(yīng)的i f語句的格式為:
if <表達(dá)式> 語句
當(dāng)表達(dá)式為真時(shí),執(zhí)行語句,表達(dá)式為假時(shí)跳過語句。
與圖3 - 1對(duì)應(yīng)的i f語句的格式為:
if<表達(dá)式>
語句1
else
語句2
當(dāng)表達(dá)式為真時(shí),執(zhí)行語句1,表達(dá)式為假時(shí)執(zhí)行語句2。無論如何,語句1與語句2每次只能有一個(gè)被執(zhí)行。
要注意的是: if或if . . . else,包括后面要講到的嵌套if,即if...else if...被看成是一條語句,即使其中的語句是包含多條語句的復(fù)合語句,仍然如此。
下面是例3 - 5的源程序:
main( )
{
int a,b,c,min;
printf(" input a,b,c :");
scanf("%d %d %d" , &a , &b , &c);
if(a min = a;
else
min = b;
if (c
printf("The result is %d\n",min);
}
執(zhí)行情況如下:
input a,b,c: 3 5 2
The result is : 2
這里順便提一下程序書寫的縮排問題,所謂縮排,就是下一行與上一行相比,行首向右縮進(jìn)若字符,如上例的min = a 、min = b等。適當(dāng)?shù)目s排能使程序的結(jié)構(gòu)、層次清晰、一目了然,增加程序的易讀性。應(yīng)該從一開始就養(yǎng)成一個(gè)比較好的書寫習(xí)慣,包括必要的注釋、適當(dāng)?shù)目招幸约翱s排。
2. 復(fù)合語句
if語句中,有時(shí)需要執(zhí)行的語句不止一條,這就要用到復(fù)合語句。
復(fù)合語句,就是用一對(duì)花括號(hào)括起來的一條或多條語句,形式如下:
{
語句1;
語句2;
。。。。
語句n;
}
無論包括多少條語句,復(fù)合語句從邏輯上講,被看成是一條語句。
復(fù)合語句在分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)中,使用十分廣泛。
[例3-6] 讀入兩個(gè)數(shù)x、y,將大數(shù)存入x,小數(shù)存入y。
分析: x、y從鍵盤讀入,若x > = y,只需順序打出,否則,應(yīng)將x,y中的數(shù)進(jìn)行交換,然
后輸出。兩數(shù)交換必須使用一個(gè)中間變量t,
定義三個(gè)浮點(diǎn)數(shù)x、y、t。
算法:
1) 讀入x、y;
2 ) 大數(shù)存入x,小數(shù)存入y;
3 ) 輸出x、y。
第2)步求精:
若x < y,則交換x與y;
再求精,x與y交換;
① t <== x
② x <== y
③ y <== t
算法的流程圖見圖3 - 3,
程序如下:
#include
main( )
{
float x,y,t;
printf("input x,y:");