第4章 選擇結(jié)構(gòu)程序設(shè)計(jì)_第1頁(yè)
第4章 選擇結(jié)構(gòu)程序設(shè)計(jì)_第2頁(yè)
第4章 選擇結(jié)構(gòu)程序設(shè)計(jì)_第3頁(yè)
第4章 選擇結(jié)構(gòu)程序設(shè)計(jì)_第4頁(yè)
第4章 選擇結(jié)構(gòu)程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第4章選擇結(jié)構(gòu)程序設(shè)計(jì)基本問(wèn)題1.選擇結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計(jì)的三種基本結(jié)構(gòu)之一。2.選擇結(jié)構(gòu)程序就是根據(jù)條件,選擇程序若干個(gè)流向中的一個(gè)執(zhí)行,因此它也被稱為分支結(jié)構(gòu)。3.C語(yǔ)言選擇結(jié)構(gòu)中的“條件”實(shí)際上是一個(gè)表達(dá)式,它可以是算術(shù)表達(dá)式、關(guān)系表達(dá)式、邏輯表達(dá)式等,所有可以求值的表達(dá)式都是允許的。4.程序執(zhí)行的流向是根據(jù)表達(dá)式的值是0還是非0來(lái)決定的。非0代表?xiàng)l件成立,0代表?xiàng)l件不成立。4.1if語(yǔ)句一、if語(yǔ)句的三種基本形式1.形式之一(單分支結(jié)構(gòu)形式)(1)格式

if(條件)語(yǔ)句;后續(xù)語(yǔ)句;(2)功能:如果條件滿足(表達(dá)式值為非0),則執(zhí)行內(nèi)嵌語(yǔ)句,之后執(zhí)行if結(jié)構(gòu)的后續(xù)語(yǔ)句;如果條件不成立(表達(dá)式的值為0),則內(nèi)嵌語(yǔ)句不執(zhí)行,直接執(zhí)行后續(xù)語(yǔ)句。(3)說(shuō)明:作為條件的表達(dá)式可以是能求值的各種類型的表達(dá)式;if的內(nèi)嵌語(yǔ)句可以是一條語(yǔ)句,也可以是多條語(yǔ)句,但注意如果是2條以上語(yǔ)句,則多條語(yǔ)句必須加一對(duì){}構(gòu)成復(fù)合語(yǔ)句。if結(jié)構(gòu)是一個(gè)不可分隔的整體,后續(xù)語(yǔ)句是指if結(jié)構(gòu)之后的第1條語(yǔ)句。(4)舉例分析例1:編制一個(gè)程序,其功能是輸入一個(gè)字符,如果是字母則輸出"yes",否則無(wú)輸出。#include<stdio.h>voidmain(){charc;c=getchar();if(c>='A'&&c<='Z'||c>='a'&&c<='z') printf("Yes");}例2:編制一個(gè)程序,其功能是輸入2個(gè)整數(shù),如果第1個(gè)數(shù)比第2個(gè)數(shù)小,則交換這2個(gè)數(shù),并輸出這2個(gè)數(shù)。#include<stdio.h>voidmain(){inta,b,t;scanf("%d%d",&a,&b);if(a<b){ t=a; a=b;b=t;}printf("%d,%d",a,b);}2.形式之二(雙分支結(jié)構(gòu)形式)(1)格式

if(條件)語(yǔ)句1;

else

語(yǔ)句2;后續(xù)語(yǔ)句;(2)功能:如果條件滿足(表達(dá)式值為非0),則執(zhí)行語(yǔ)句1,之后執(zhí)行if結(jié)構(gòu)的后續(xù)語(yǔ)句;如果條件不成立(表達(dá)式的值為0),則執(zhí)行語(yǔ)句2,之后執(zhí)行后續(xù)語(yǔ)句。(3)說(shuō)明:作為條件的表達(dá)式可以是能求值的各種類型的表達(dá)式;if的內(nèi)嵌語(yǔ)句可以是一條語(yǔ)句,也可以是多條語(yǔ)句,但注意如果是2條以上語(yǔ)句,則多條語(yǔ)句必須加一對(duì){}構(gòu)成復(fù)合語(yǔ)句。if結(jié)構(gòu)是一個(gè)不可分隔的整體,后續(xù)語(yǔ)句是指if結(jié)構(gòu)之后的第1條語(yǔ)句。(4)舉例分析例3:編制一個(gè)程序,其功能是輸入一個(gè)字符,如果是字母則輸出"Yes!",否則輸出"No!"。#include<stdio.h>voidmain(){charc;c=getchar();if(c>='A'&&c<='Z'||c>='a'&&c<='z') printf("Yes");elseprintf(“No");}例4:有一函數(shù)編程輸入x的值,計(jì)算并輸出y的值。#include<stdio.h>voidmain(){intx,y;scanf("%d",&x);if(x<0) y=x*x+5;elsey=5*x;printf("x=%d,y=%d",x,y);}(x<0)(x≥0)簡(jiǎn)單的雙分支結(jié)構(gòu)也可以用條件運(yùn)算符表達(dá)式實(shí)現(xiàn)。例如輸入兩個(gè)整數(shù),把其中的大數(shù)賦值給max變量。if(a>b)max=a;elsemax=b;可以改寫為:

max=(a>b?a:b);3.形式之三(多分支結(jié)構(gòu)形式)(1)格式:if(表達(dá)式1)

語(yǔ)句1;elseif(表達(dá)式2)

語(yǔ)句2;elseif(表達(dá)式3)

語(yǔ)句3;

……else

語(yǔ)句n+1;(2)功能:依次去對(duì)各個(gè)條件進(jìn)行判斷測(cè)試,當(dāng)滿足某一個(gè)條件i,則執(zhí)行相應(yīng)的語(yǔ)句i,若一個(gè)條件都不滿足,執(zhí)行else后面的語(yǔ)句,之后均執(zhí)行if結(jié)構(gòu)的后續(xù)語(yǔ)句。(3)說(shuō)明:在這種結(jié)構(gòu)中,語(yǔ)句1~語(yǔ)句n+1任何時(shí)候只執(zhí)行一個(gè)語(yǔ)句。如果沒(méi)有語(yǔ)句n+1,則最后一個(gè)else可省略,這種情況下,if結(jié)構(gòu)中若一個(gè)條件也不滿足,則相當(dāng)于不執(zhí)行任何操作。例5:編寫一個(gè)通用程序,求解方程ax2+bx+c=0的根。算法分析:通用程序應(yīng)能求解任意一元二次方程,方程系數(shù)a,b,c應(yīng)從鍵盤輸入。另外必須考慮以下各種可能的情況。(1)a=0,b=0,c=0時(shí),方程有無(wú)數(shù)解。(2)a=0,b=0,c≠0時(shí),方程無(wú)解。(3)a=0,b≠0時(shí),方程有一個(gè)單根。(4)a≠0,b2-4ac>0時(shí),方程有兩個(gè)不等實(shí)根。(5)a≠0,b2-4ac=0時(shí),方程有兩個(gè)等實(shí)根。(6)a≠0,b2-4ac>0時(shí),方程有兩個(gè)復(fù)數(shù)根。4.if語(yǔ)句的嵌套形式(1)if語(yǔ)句的嵌套所謂if語(yǔ)句嵌套就是在一個(gè)if結(jié)構(gòu)中,如果<語(yǔ)句>處出現(xiàn)的又是一個(gè)if語(yǔ)句,就把它稱為if嵌套。(2)結(jié)構(gòu)形式:if(表達(dá)式) if(表達(dá)式11)

語(yǔ)句1;

else

語(yǔ)句2;else if(表達(dá)式22)

語(yǔ)句3;

else

語(yǔ)句4;(3)說(shuō)明:當(dāng)if結(jié)構(gòu)出現(xiàn)嵌套時(shí),應(yīng)該以縮進(jìn)格式書寫,以提高程序的可讀性和美觀性;

if(a>0)if(b>0)

x=1; else x=2;elsex=0;內(nèi)、外層的if語(yǔ)句都可以是三種基本形式中的任意一種。else子句總是與它前面最近的、尚未配對(duì)的if子句進(jìn)行配對(duì)。if(a==b)if(b==c)

printf("a=b=c\n");else

printf("b!=c\n");如果if子句和else子句數(shù)目不一樣,可以加大括號(hào){}來(lái)確保配對(duì)關(guān)系。if(a==b)

{if(b==c)

printf("a=b=c\n");}else

printf("b!=c\n");例6:計(jì)算退休工資。男職工60歲退休工資3000元,60歲之前退休工資2500;女職工55歲退休工資2900元,55歲之前退休2400工資。if(sex=='M') if(age>=60) salary=3000; else salary=2500;else if(age>=55) salary=2900; else salary=2400;4.3switch語(yǔ)句1.switch語(yǔ)句的作用

switch語(yǔ)句是多分支選擇語(yǔ)句,用它將更簡(jiǎn)單、方便地實(shí)現(xiàn)多路選擇結(jié)構(gòu)。2.語(yǔ)句格式:switch(表達(dá)式){case常量表達(dá)式1:語(yǔ)句1;

case常量表達(dá)式2:語(yǔ)句2;

……

case常量表達(dá)式n:語(yǔ)句n;

default:語(yǔ)句n+1;

}

3.執(zhí)行過(guò)程:多路分支選擇取決于“表達(dá)式”的特定值。當(dāng)表達(dá)式的值和某個(gè)case后面的“常量表達(dá)式”的值相同時(shí),程序就從這個(gè)case后邊的“語(yǔ)句i”開始執(zhí)行,然后接著一個(gè)個(gè)執(zhí)行其下面的全部case后面的語(yǔ)句。4.使用說(shuō)明(1)switch后面的“表達(dá)式”可以是任何類型的表達(dá)式,在與常量表達(dá)式比較時(shí)被自動(dòng)取整。(2)常量表達(dá)式是由常量或符號(hào)常量組成的常量表達(dá)式(不允許出現(xiàn)變量)。每個(gè)常量表達(dá)式的值必須互不相同,否則程序執(zhí)行的流程會(huì)產(chǎn)生矛盾。(3)如果有default項(xiàng),那么在與所有case情況都不匹配時(shí),程序?qū)?zhí)行語(yǔ)句n+1。(4)case后面的常量表達(dá)式,僅起入口標(biāo)號(hào)的作用,一旦匹配,由此進(jìn)入,在執(zhí)行有關(guān)語(yǔ)句后,馬上繼續(xù)執(zhí)行下面的所有case后面的語(yǔ)句,而不再判別是否與別的case匹配,這一點(diǎn)要特別注意。switch(x){case1:語(yǔ)句1;

case2:語(yǔ)句2;

……

casen:語(yǔ)句n;

default:語(yǔ)句n+1;

}

(5)對(duì)于多分支程序,我們希望在執(zhí)行完某一符合要求的case后面的語(yǔ)句后,使程序流程退出switch結(jié)構(gòu),解決的辦法是使用break(中斷)語(yǔ)句。switch(x){case1:語(yǔ)句1;break;

case2:語(yǔ)句2;break;

……

casen:語(yǔ)句n;break;

default:語(yǔ)句n+1; }break語(yǔ)句的作用是終止switch語(yǔ)句的執(zhí)行,使流程跳出switch結(jié)構(gòu),去執(zhí)行switch結(jié)構(gòu)的后續(xù)語(yǔ)句。(6)case后面可以有兩個(gè)以上的執(zhí)行語(yǔ)句,會(huì)被順序執(zhí)行,而且允許不加大括號(hào){}。(7)多個(gè)case可以共用一組執(zhí)行語(yǔ)句,如:

case'a':case'b':case'c':printf(">60\n");break;

當(dāng)表達(dá)式等于‘a(chǎn)’,‘b’,‘c’時(shí),均執(zhí)行print語(yǔ)句。例7:用switch語(yǔ)句編寫一個(gè)可以完成任意兩個(gè)數(shù)進(jìn)行+-*/四則運(yùn)算的程序。floatx,y;charc; scanf("%f%c%f",&x,&c,&y); switch(c) { case'+':printf("%.2f%c%.2f=%.2f\n",x,c,y,x+y);break; case'-':printf("%.2f%c%.2f=%.2f\n",x,c,y,x-y);break; case'*':printf("%.2f%c%.2f=%.2f\n",x,c,y,x*y);break; case'/': if(y!=0)printf("%.2f%c%.2f=%.2f\n",x,c,y,x+y); elseprintf("除數(shù)不能為0"); break; default:printf("%c不是合法運(yùn)算符",c); }例8:用switch語(yǔ)句編寫程序,對(duì)輸入的百分制的學(xué)生成績(jī),判別所屬等級(jí)’A’,’B’,’C’,’D’,’E’。90分以上為’A’,80~89分為’B’,70~79分為’C’,60~69分為’D’,60分以下為’E’?!痉治觥縮witch后面的表達(dá)式如何確定。如果百分制成績(jī)存于score變量中,那么可以用score/10作為表達(dá)式。

floatscore;

scanf("%f",&score); switch((int)score/10) { case10: case9:printf("等級(jí)為:A\n");break; case8:printf("等級(jí)為:B\n");break; case7:printf("等級(jí)為:C\n");break; case6:printf("等級(jí)為:D\n");break;

default:printf("等級(jí)為:E\n"); }例:讀程序,給出運(yùn)行結(jié)果#include<stdio.h>voidmain(){ inti=0,x; scanf("%d",&x); switch(x) { case1:i+=1; case2:i+=2; case3:i+=3; } printf("%d",i); }若輸入:1輸出為6若輸入:2輸出為5

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論