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

下載本文檔

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

文檔簡介

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

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

else

語句2;后續(xù)語句;(2)功能:如果條件滿足(表達式值為非0),則執(zhí)行語句1,之后執(zhí)行if結(jié)構(gòu)的后續(xù)語句;如果條件不成立(表達式的值為0),則執(zhí)行語句2,之后執(zhí)行后續(xù)語句。(3)說明:作為條件的表達式可以是能求值的各種類型的表達式;if的內(nèi)嵌語句可以是一條語句,也可以是多條語句,但注意如果是2條以上語句,則多條語句必須加一對{}構(gòu)成復(fù)合語句。if結(jié)構(gòu)是一個不可分隔的整體,后續(xù)語句是指if結(jié)構(gòu)之后的第1條語句。(4)舉例分析例3:編制一個程序,其功能是輸入一個字符,如果是字母則輸出"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的值,計算并輸出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é)構(gòu)也可以用條件運算符表達式實現(xiàn)。例如輸入兩個整數(shù),把其中的大數(shù)賦值給max變量。if(a>b)max=a;elsemax=b;可以改寫為:

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

語句1;elseif(表達式2)

語句2;elseif(表達式3)

語句3;

……else

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

語句1;

else

語句2;else if(表達式22)

語句3;

else

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

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

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

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

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

{if(b==c)

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

printf("b!=c\n");例6:計算退休工資。男職工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語句1.switch語句的作用

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

case常量表達式2:語句2;

……

case常量表達式n:語句n;

default:語句n+1;

}

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

case2:語句2;

……

casen:語句n;

default:語句n+1;

}

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

case2:語句2;break;

……

casen:語句n;break;

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

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

當(dāng)表達式等于‘a(chǎn)’,‘b’,‘c’時,均執(zhí)行print語句。例7:用switch語句編寫一個可以完成任意兩個數(shù)進行+-*/四則運算的程序。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不是合法運算符",c); }例8:用switch語句編寫程序,對輸入的百分制的學(xué)生成績,判別所屬等級’A’,’B’,’C’,’D’,’E’。90分以上為’A’,80~89分為’B’,70~79分為’C’,60~69分為’D’,60分以下為’E’。【分析】switch后面的表達式如何確定。如果百分制成績存于score變量中,那么可以用score/10作為表達式。

floatscore;

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

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

最新文檔

評論

0/150

提交評論