版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年農(nóng)業(yè)項目居間服務(wù)合同2篇
- 二零二五年度范文設(shè)備租購服務(wù)合同2篇
- 二零二五年度集團公司內(nèi)部子公司間借款合同范本3篇
- 二零二五版花崗石石材行業(yè)標準制定與實施合同3篇
- 二零二五年高空玻璃安裝與玻璃清潔保養(yǎng)合同3篇
- 二零二五版公司獨立董事薪酬及激勵合同2篇
- 建筑工地2025年度水電暖供應(yīng)與安裝承包合同2篇
- 基于2025年度市場分析的營銷推廣合同標的修訂3篇
- 二零二五版智能倉儲物流設(shè)施施工合同協(xié)議3篇
- 二零二五年度花卉新品種研發(fā)與購銷合同3篇
- 綿陽市高中2022級(2025屆)高三第二次診斷性考試(二診)歷史試卷(含答案)
- 《視頻壓縮基礎(chǔ)》課件
- 2025南方財經(jīng)全媒體集團校園招聘63人高頻重點提升(共500題)附帶答案詳解
- 《A機場公司人力資源管理工作實踐調(diào)研報告》2600字(論文)
- 社工人才培訓(xùn)計劃實施方案
- 四年級數(shù)學(xué)(上)計算題專項練習(xí)及答案
- 6、水平四+田徑18課時大單元計劃-《雙手頭上前擲實心球》
- 幼兒園人民幣啟蒙教育方案
- 軍事理論(2024年版)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 青島版科學(xué)四年級下冊課程綱要
- GB/T 6672-2001塑料薄膜和薄片厚度測定機械測量法
評論
0/150
提交評論