《計(jì)算機(jī)基礎(chǔ)與C語言程序設(shè)計(jì)》課件第4章_第1頁
《計(jì)算機(jī)基礎(chǔ)與C語言程序設(shè)計(jì)》課件第4章_第2頁
《計(jì)算機(jī)基礎(chǔ)與C語言程序設(shè)計(jì)》課件第4章_第3頁
《計(jì)算機(jī)基礎(chǔ)與C語言程序設(shè)計(jì)》課件第4章_第4頁
《計(jì)算機(jī)基礎(chǔ)與C語言程序設(shè)計(jì)》課件第4章_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論