版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第4章選擇結(jié)構(gòu)程序設(shè)計(jì)4.1if語句4.2switch語句與break語句4.3選擇結(jié)構(gòu)程序設(shè)計(jì)舉例順序結(jié)構(gòu)程序的流程方向永遠(yuǎn)是自上而下順序執(zhí)行的,然而,在實(shí)際應(yīng)用中常常需要根據(jù)不同的條件,執(zhí)行不同的程序流程,這樣就形成了選擇結(jié)構(gòu)程序。
C語言提供了可以進(jìn)行邏輯判斷的選擇語句,由其構(gòu)成的選擇結(jié)構(gòu)根據(jù)邏輯判斷的結(jié)果決定程序的不同流向。
if語句也稱做選擇語句,它是根據(jù)條件的表達(dá)式值來選擇執(zhí)行給出的兩個(gè)分支程序段之一。4.1if語句4.1.1if語句的基本形式
if語句的基本形式有兩種:if…else形式和if形式。
1.?if…else形式
if…else形式是if語句的標(biāo)準(zhǔn)形式,其一般語法格式為
if(表達(dá)式)
分支語句1
else
分支語句2
這種if語句的執(zhí)行過程為:如果if后面括號中的表達(dá)式的值為非0,則執(zhí)行分支語句1;否則,執(zhí)行分支語句2。例如:
if(m>n)
printf("%d\n",m);
else
printf("%d\n",n);
以上程序段的含義就是:當(dāng)m>n時(shí),輸出m的值;否則,輸出n的值。
2.?if形式
if形式是if語句的簡單形式,其一般語法格式為:
if(表達(dá)式)
分支語句
這種if語句的執(zhí)行過程為:如果if后面括號中的表達(dá)式的值為非0,則執(zhí)行分支語句;否則,跳過if語句,直接執(zhí)行if語句后面的下一條語句。
例如:
if(x>0)
printf("%f\n",x);
printf("%f\n",y);以上程序段的含義是:當(dāng)x>0時(shí),輸出x的值;否則,跳過if語句,直接執(zhí)行if語句后面的下一條語句printf("%f\n",y);。說明:
(1)
if語句中的表達(dá)式可以是C語言中的任意合法表達(dá)式,一般情況下為關(guān)系表達(dá)式或邏輯表達(dá)式。
(2)
if…else形式中的“分支語句1”、“分支語句2”和if形式中的“分支語句”,在語法上只能是一條語句。因此,如果需要多條語句來完成任務(wù),就必須將這多條語句用花括號括起來,從而形成復(fù)合語句,使之在語法上是一條語句。
(3)不論是哪種形式的if語句,也不論if語句中的分支語句是何種語句,整個(gè)if語句在語法上只算一條語句。4.1.2if語句的嵌套
if語句的嵌套指的是if語句中的分支語句又是if語句的情形。if語句嵌套的目的是為了解決多路選擇問題。
1.?if語句的嵌套的基本形式
if語句嵌套的一般語法格式為:
if(表達(dá)式1)
if語句1
else
if語句2
或者
if(表達(dá)式)
if語句
if語句的嵌套結(jié)構(gòu)可以是if…else形式的if語句和if形式的if語句的任意組合,被嵌套的if語句仍然可以是if語句的嵌套結(jié)構(gòu),但在實(shí)際使用中是根據(jù)實(shí)際問題來決定的。例如:
if(x>=0)
if(x<10)
y=1;
else
y=2;
else
if(x>=-10)
y=-1;
else
y=-2;
這個(gè)if語句的嵌套結(jié)構(gòu)的含義是:
當(dāng)0≤x<10時(shí),y賦值為1;
當(dāng)x≥10時(shí),y賦值為2;
當(dāng)-10≤x<0時(shí),y賦值為-1;
當(dāng)x<-10時(shí),y賦值為-2。說明:
(1)
if語句的嵌套結(jié)構(gòu)不論嵌套多少層,在語法上只算一條語句。
(2)縮進(jìn)格式的書寫只是為了閱讀的方便,即這種格式表示了程序設(shè)計(jì)者的意圖,但整個(gè)if語句的嵌套結(jié)構(gòu)的含義與此并無關(guān)系,它的含義完全由C語言編譯系統(tǒng)來解釋。
(3)
if語句的嵌套結(jié)構(gòu)中的else要與if配對出現(xiàn),原則是else與其最近的未配對的if配對。
2.一種特殊的if語句的嵌套形式——if…elseif
既然if語句的嵌套結(jié)構(gòu)可以是if…else形式的if語句和if形式的if語句的任意組合,被嵌套的if語句仍然可以是if語句的嵌套結(jié)構(gòu),那么完全可以有這樣一種if語句嵌套結(jié)構(gòu):
if(表達(dá)式1)
分支語句1
else
if(表達(dá)式2)
分支語句2
else
if(表達(dá)式3)
分支語句3
else
if(表達(dá)式n)
分支語句n
else
分支語句n+1它的含義是:按表達(dá)式順序進(jìn)行計(jì)算,第一個(gè)為非0的表達(dá)式i將引起執(zhí)行分支語句i,并且不再計(jì)算后面的表達(dá)式。如果所有表達(dá)式的值都為0,則執(zhí)行分支語句n+1。
由于C語言語句的書寫格式無固定要求,按照這種if語句的嵌套結(jié)構(gòu)的含義,我們可以這樣來書寫這種特殊的if語句的嵌套形式:
if(表達(dá)式1)
分支語句1
elseif(表達(dá)式2)
分支語句2
elseif(表達(dá)式3)
分支語句3
elseif
elseif(表達(dá)式n)
分支語句n
else
分支語句n+1
這就是if語句的特殊嵌套形式if…elseif形式。
例如:
if(x>0)
y=1;
elseif(x==0)
y=0;
else
y=-1;
以上程序段的含義是:
當(dāng)x>0時(shí),y賦值為1;
當(dāng)x=0時(shí),y賦值為0;
當(dāng)x<0時(shí),y賦值為-1。說明:
(1)這種特殊的if語句的嵌套結(jié)構(gòu)可以實(shí)現(xiàn)多路選擇的程序設(shè)計(jì)。
(2)最后一個(gè)else及其分支語句n+1可以沒有。
4.2.1switch語句
switch語句是C語言提供的一個(gè)專門進(jìn)行多路選擇問題程序設(shè)計(jì)的語句。
switch語句的一般語法格式為
switch(表達(dá)式){
case常量表達(dá)式1:分支語句組1
case常量表達(dá)式2:分支語句組2
4.2switch語句與break語句
case常量表達(dá)式n:分支語句組n
default:分支語句組n+1
}
它的執(zhí)行過程為:首先計(jì)算switch后面括號中的表達(dá)式的值,并逐個(gè)與case后面的常量表達(dá)式的值相比較,當(dāng)表達(dá)式的值與某個(gè)常量表達(dá)式的值相等時(shí),執(zhí)行其后的分支語句組,然后繼續(xù)執(zhí)行后面所有的分支語句組;如果表達(dá)式的值與所有case后的常量表達(dá)式的值都不相等,則執(zhí)行default后的分支語句組。例如:
grade=getchar();
switch(grade){
case'A':printf("Score:90~100.\n");
case'B':printf("Score:80~89.\n");
case'C':printf("Score:70~79.\n");
case'D':printf("Score:60~69.\n");
case'E':printf("Score:<60.\n");
default:printf("Error.\n");
}以上程序段在程序中執(zhí)行時(shí),如果從鍵盤輸入字符
'C',則在屏幕輸出:
Score:70~79.
Score:60~69.
Score:<60.
Error.說明:
(1)
switch后的表達(dá)式類型可以為任意類型,但一般為整型、字符型和枚舉類型。
(2)
case后的常量表達(dá)式的類型必須與switch后的表達(dá)式類型一致。
(3)
case后的常量表達(dá)式的值必須互不相同。
(4)
case后的分支語句組可以是一條語句,也可以是多條語句。
(5)多個(gè)case可以共用一個(gè)分支語句組,即連續(xù)的k個(gè)case語句,前k-1個(gè)后面可以沒有分支語句組,只有第k個(gè)case語句后面有分支語句組。
(6)
default及其分支語句組可以省略。
(7)各個(gè)case和default的前后次序可以任意。盡管如此,但用戶在編寫程序時(shí)并不能將自己程序中的case和default的前后次序隨意改變,這樣有可能會(huì)導(dǎo)致不同的執(zhí)行結(jié)果。
(8)
switch語句可以嵌套,即case后的分支語句組也可以是switch語句。
(9)不論switch語句內(nèi)部結(jié)構(gòu)如何,整個(gè)switch語句在語法上只算一條語句。從前述程序段的介紹和switch語句的說明可以看出,switch語句似乎還不能像if…elseif那樣來實(shí)現(xiàn)多路選擇程序設(shè)計(jì)。確實(shí)是這樣,switch語句必須和break語句結(jié)合使用,才能進(jìn)行多路選擇程序設(shè)計(jì)。4.2.2break語句
break語句也稱間斷語句,通常在switch語句和循環(huán)語句中使用。當(dāng)break語句用于switch語句中時(shí),可使程序跳出當(dāng)前switch結(jié)構(gòu),轉(zhuǎn)而執(zhí)行當(dāng)前switch語句后面的語句。break語句在循環(huán)語句中的使用將在第5章中介紹。
例如:
grade=getchar();
switch(grade){
case'A':printf("Score:90~100.\n");break;
case'B':printf("Score:80~89.\n");break;
case'C':printf("Score:70~79.\n");break;
case'D':printf("Score:60~69.\n");break;
case'E':printf("Score:<60.\n");break;
default:printf("Error.\n");
}
以上程序段在程序中執(zhí)行時(shí),
如果從鍵盤輸入字符
'A',則在屏幕上輸出:
Score:90~100.
如果從鍵盤輸入字符
'B',則在屏幕上輸出:
Score:80~89.
如果從鍵盤輸入字符
'C',則在屏幕上輸出:
Score:70~79.
如果從鍵盤輸入字符
'D',則在屏幕上輸出:
Score:60~69.
如果從鍵盤輸入字符
'E',則在屏幕上輸出:
Score:<60.
如果從鍵盤輸入任意其它字符,則在屏幕上輸出:
Error.
再強(qiáng)調(diào)一下,switch語句必須和break語句結(jié)合使用,才能進(jìn)行多路選擇程序設(shè)計(jì)。
【例4.1】
編寫程序,輸入一個(gè)實(shí)數(shù),輸出它的絕對值。
#include<stdio.h>
main()
{
floatx,y;
printf("Inputx:");
scanf("%f",&x);4.3選擇結(jié)構(gòu)程序設(shè)計(jì)舉例
if(x>=0)
y=x;
else
y=-x;
printf("|%f|=%f\n",x,y);
}
程序運(yùn)行結(jié)果:
①
Inputx:1.23↙
|1.230000|=1.230000
②
Inputx:-1.23↙
|-1.230000|=1.230000
【例4.2】
編寫程序,對于函數(shù)
,輸入一個(gè)實(shí)數(shù)x,輸出它的函數(shù)值y。
程序1:(采用if形式)
#include<stdio.h>
main()
{
intx,y;
printf("Inputx:");
scanf("%d",&x);
if(x>0)
y=1;
if(x==0)
y=0;
if(x<0)
y=-1;
printf("y=%d\n",y);
}程序運(yùn)行結(jié)果:
①
Inputx:12↙
y=1
②
Inputx:0↙
y=0
③
Inputx:-8↙
y=-1程序2:(采用if…elseif形式)
#include<stdio.h>
main()
{
intx,y;
printf("Inputx:");
scanf("%d",&x);
if(x>0)
y=1;
elseif(x==0)
y=0;
elseif(x<0)
y=-1;
printf("y=%d\n",y);
}
程序運(yùn)行結(jié)果同前。
【例4.3】
編寫程序,輸入兩個(gè)整數(shù)m、n,若m>n,交換m和n的值,最后輸出m和n的值。
#include<stdio.h>
main()
{
intm,n,t;
printf("Inputm,n:");
scanf("%d%d",&m,&n);
if(m>n){
t=m;
m=n;
n=t;
}
printf("%d,%d\n",m,n);
}
程序運(yùn)行結(jié)果:
①
Inputm,n:37↙
3,7
②
Inputm,n:73↙
3,7
【例4.4】
編寫程序,輸入三個(gè)整數(shù)a、b、c,將它們進(jìn)行排序,然后按從小到大的順序輸出。
#include<stdio.h>
main()
{
inta,b,c,t;
printf("Inputa,b,c:");
scanf("%d%d%d",&a,&b,&c);
if(a>b){
t=a;
a=b;
b=t;
}
if(a>c){
t=a;
a=c;
c=t;
}
if(b>c){
t=b;
b=c;
c=t;
}
printf("%d,%d,%d\n",a,b,c);
}
程序運(yùn)行結(jié)果:
Inputa,b,c:132↙
1,2,3
【例4.5】
編寫程序,輸入一個(gè)百分制成績,轉(zhuǎn)換為等級制成績輸出。轉(zhuǎn)換規(guī)則為:90~100為A,80~89為B,70~79為C,60~69為D,0~59為E。
程序1:
/*使用if形式的if語句*/
#include<stdio.h>
main()
{
intscore;
chargrade;
printf("Inputscore:");
scanf("%d",&score);
if(score>=90&&score<100)
grade='A';
if(score>=80&&score<90)
grade='B';
if(score>=70&&score<80)
grade='C';
if(score>=60&&score<70)
grade='D';
if(score<60)
grade='E';
printf("Score:%d->Grade:%c\n",score,grade);
}
程序運(yùn)行結(jié)果:
Inputscore:78↙
Score:78->Grade:C
程序2:
/*使用if…elseif形式的if語句*/
#include<stdio.h>
main()
{
intscore;
chargrade;
printf("Inputscore:");
scanf("%d",&score);
if(score>=90&&score<100)
grade='A';
elseif(score>=80&&score<90)
grade='B';
elseif(score>=70&&score<80)
grade='C';
elseif(score>=60&&score<70)
grade='D';
elseif(score<60)
grade='E';
printf("Score:%d->Grade:%c\n",score,grade);
}
程序運(yùn)行結(jié)果:
Inputscore:95↙
Score:95->Grade:A
程序3:
/*使用switch語句*/
#include<stdio.h>
main()
{
intscore,c;
chargrade;
printf("Inputscore:");
scanf("%d",&score);
c=score/10;
switch(c){
case10:
case9:grade='A';break;
case8:grade='B';break;
case7:grade='C';
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度綠色建筑鋼筋綁扎與回收利用合同4篇
- 江蘇省無錫市錫山區(qū)2019-2020學(xué)年八年級下學(xué)期期中物理試題【含答案、解析】
- 2025版房屋抵押貸款風(fēng)險(xiǎn)評估與咨詢服務(wù)合同4篇
- 股權(quán)代持合同簽訂與解除的法律要點(diǎn)2025年合同2篇
- 江西省贛州市瑞金市2024-2025學(xué)年八年級上學(xué)期期末考試道德與法治試題(含答案)
- 廣東省茂名市電白區(qū)2024-2025學(xué)年八年級上學(xué)期期末地理試卷(含答案)
- 固體飲料行業(yè)的融資模式與投資機(jī)會(huì)分析報(bào)告考核試卷
- 2025版企業(yè)知識產(chǎn)權(quán)保護(hù)委托合同范本指南3篇
- 東南歐eMAG知識百科 2025
- 2001年江蘇南通中考滿分作文《我發(fā)現(xiàn)女孩也可做“太陽”》
- 《健康體檢知識》課件
- 蘇少版七年級美術(shù)下冊 全冊
- 名表買賣合同協(xié)議書
- JTG-T-F20-2015公路路面基層施工技術(shù)細(xì)則
- 2024年遼寧石化職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫附答案
- 中西方校服文化差異研究
- 《子宮肉瘤》課件
- 《準(zhǔn)媽媽衣食住行》課件
- 給男友的道歉信10000字(十二篇)
- 客人在酒店受傷免責(zé)承諾書范本
- 練字本方格模板
評論
0/150
提交評論