第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頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第4章

選擇結(jié)構(gòu)程序設(shè)計本章重點if語句的基本形式以及使用。if語句的嵌套。條件表達式。switch語句的形式以及使用。break語句在switch語句中的使用。2本章難點if語句的嵌套形式。switch語句的執(zhí)行流程34.1if語句if語句也叫條件語句,用來判斷給定的條件的真假,并根據(jù)條件判斷的結(jié)果(真或假)從給定的兩個操作中選擇其中的一個執(zhí)行。44.1.1if語句的3種基本形式1.兩分支if語句if(表達式)語句1;else語句2;5需要注意的是,語句1和語句2是“互斥”的,當其中一個語句執(zhí)行時,另一個語句就不可能執(zhí)行。作為條件的“表達式”可以是任意類型的表達式,一般是關(guān)系表達式或邏輯表達式6【例4.1】所謂“水仙花數(shù)”是指一個三位數(shù),其各位數(shù)字立方和等于該數(shù)本身。例如,153就是一個水仙花數(shù),因為153=13+53+33。輸入一個三位整數(shù),判斷該數(shù)是否是“水仙花數(shù)”。

7#include<stdio.h>intmain(){intn,m,a,b,c;printf("請輸入一個三位整數(shù):");scanf("%d",&n);a=n%10;b=n/10%10;c=n/100%10;m=a*a*a+b*b*b+c*c*c;if(n==m)printf("%d是水仙花數(shù).\n",n,m);elseprintf("%d不是水仙花數(shù).\n",n,m);return0;}82.單分支if語句if(表達式)語句1;這是if語句的簡化形式。該語句執(zhí)行時,先計算作為條件的“表達式”的值,如果該值為真(不等于0),那么就執(zhí)行緊跟在其后的語句1,否則就什么都不做。9注意,如果if結(jié)構(gòu)中的“語句”部分不是單個語句,而是一個語句序列的話,要使用一對花括號{}把這個語句序列括起來,即把它作為一個復(fù)合語句來處理。10【例4.2】輸入三個整數(shù)a、b、c,將它們按照從小到大的順序排序?!痉治觥窟@是一個簡化的排序算法?;舅枷刖褪?把三個數(shù)分別兩兩比較,若前者大于后者,則將兩數(shù)互換。11【程序】#include<stdio.h>intmain(void){inta,b,c,t;printf("請輸入三個整數(shù):\n");scanf("%d%d%d",&a,&b,&c);if(a>b)//交換a和b的內(nèi)容,下同{

t=a;

a=b;

b=t;}if(b>c){

t=b;

b=c;

c=t;}if(a>b)//注意,這里為什么又一次比較a和b呢?{

t=a;

a=b;

b=t;}printf("排序后的結(jié)果是:a=%d,b=%d,c=%d\n",a,b,c);return0;}123.if…else…if語句if(表達式1)

語句1;elseif(表達式2)

語句2;elseif(表達式3)

語句3;else

語句4;13這種if…else…if語句在執(zhí)行時,首先計算并測試表達式1的值,若為真,則執(zhí)行語句1;否則,再計算并測試表達式2的值,若為真,則執(zhí)行語句2;否則,接著計算并測試表達式3的值,若為真,則執(zhí)行表達式3;否則,當這3個表達式的值均不為真時,則執(zhí)行語句4。144.1.2if語句的嵌套if語句的嵌套指的是在一個if語句中又包含一個或多個if語句。一般形式如下:if(表達式1)

if(表達式2)語句1;

else語句2;else

if(表達式3)語句3;

else語句4;在if語句的嵌套結(jié)構(gòu)中,要特別注意if和else的匹配關(guān)系。C語言規(guī)定:每一個else都與在同一分程序中的尚未匹配的最近的if匹配。15if(表達式1)if(表達式2)

語句1;else

語句2;該if語句等價于:if(表達式1){

if(表達式2)

語句1;

else

語句2;}16如果要讓else與if(表達式1)匹配,則程序應(yīng)該調(diào)整為:if(表達式1){

if(表達式2)

語句1;}else

語句2;17【例4.3】輸入一個年份值,判斷這一年是否為閏年?!痉治觥渴紫冉o出閏年的判別條件,即能夠被4整除并且不能被100整除的年份是閏年,或者,能夠被400整除的也是閏年。此程序的關(guān)鍵就是要準確描述出判別是否為閏年的表達式。18算法如下。(1)給變量flag賦值為0。flag的值(或稱為狀態(tài))起著決定動作的標志作用。在程序中恰當?shù)厥褂脿顟B(tài)變量(或標志變量)是程序設(shè)計的技巧之一。(2)輸入一個年份值給變量year。(3)如果year能夠被4整除并且不能被100整除或者year能夠被400整除,則令flag等于1。(4)如果flag等于1,則輸出該年為閏年,否則就輸出該年不是閏年。19【程序】#include<stdio.h>intmain(void){intyear,flag=0;//flag初始化為0printf("請輸入一個年份:");scanf("%d",&year);if(year>0){if((year%4==0&&year%100!=0)||year%400==0)

flag=1;if(flag==1)

printf("%d年是閏年\n",year);else

printf("%d年不是閏年\n",year);}else

printf("輸入的年份不合理!\n");return0;}204.1.3條件表達式條件表達式是一種以條件運算符?:為運算符、以3個有不同類型要求的子表達式作為其運算分量的三目表達式(?:運算符也是C語言中唯一的三目運算符)。條件表達式的一般形式為:表達式1?表達式2:表達式321【說明】(1)條件表達式的執(zhí)行順序是,先計算并判斷表達式1的值,若為真(非0),則求解表達式2并把表達式2的值作為整個條件表達式的值;若表達式1的值為假(等于0),則求解表達式3并把表達式3的值作為整個條件表達式的值。(2)注意條件運算符和其他運算符的優(yōu)先級別高低的問題。比如:在t=x<y?x:y中,由于條件運算符的優(yōu)先級高于賦值運算符,因此要先進行條件運算再進行賦值運算,即相當于t=(x<y?x:y)。(3)條件運算符的結(jié)合方向為“自右至左”。比如x>y?x:m>n?m:n相當于x>y?x:(m>n?m:n)。22(4)條件表達式語句可以用來代替簡單的if…else語句。例如,“t=x<y?x:y;”可以用來代替“if(x<y)t=x;elset=y;”。234.2switch語句24switch語句也叫開關(guān)語句,是一個多分支語句,用來實現(xiàn)多分支選擇結(jié)構(gòu)。switch語句的一般形式為:switch(表達式){

caseE1:

語句塊1;

break;

caseE2:

語句塊2;

break;

[default:

默認語句塊;

break;]}語句塊X;25switch語句流程圖26【說明】(1)switch后面括號內(nèi)的“表達式”必須是整數(shù)類型的表達式。(2)case后面緊跟的E1、E2必須是整型常量或整型常量表達式,或是與整型兼容的表達式。C語言要求每一個case后的常量表達式必須互不相同。(3)switch語句執(zhí)行時,先計算“表達式”的值,如果該值與某個case后緊跟的常量表達式的值相等,那么就從該case分支的語句開始往后執(zhí)行。(4)如果所有的case后的常量表達式都與“表達式”的值不相同,則接著查找后面有無帶default標號的分支,若有,則從default標號后面的語句往后執(zhí)行,直至switch結(jié)構(gòu)的結(jié)束。若無,則執(zhí)行switch語句后面的語句塊X。(5)如果在某個分支的執(zhí)行過程中遇到break語句,則終止整個switch語句的執(zhí)行。27(6)多個case語句可以共用一組執(zhí)行語句,如:switch(x){case'A':case'B':case'C':printf("OK\n");break;}此例中,無論x的值為'A','B'或是'C',都是執(zhí)行同一個語句序列。28【例4.4】使用switch語句編程實現(xiàn)下面的功能:給出一個百分制成績,要求輸出成績等級'A'、'B'、'C'、'D'、'E'。90分以上為'A',大于或等于80分并且小于90分為'B',大于或等于70分并且小于80分為'C',大于或等于60分并且小于70分為'D',60分以下為'E'?!痉治觥坑米兞縳表示成績,為了把x所屬的成績段和某個整數(shù)對應(yīng)起來,需要先執(zhí)行(int)x/10。29【程序】#include<stdio.h>intmain(void){floatx;intrank;printf("請輸入一個成績值:");scanf("%f",&x);switch((int)x/10){case10:case9:printf("成績等級為A\n");

break;case8:printf("成績等級為B\n");break;case7:printf("成績等級為C\n");break;case6:printf("成績等級為D\n");break;case5:case4:case3:case2:case1:ca

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論