![C語言程序設(shè)計(第二版)課件第4章 選擇結(jié)構(gòu)程序設(shè)計_第1頁](http://file4.renrendoc.com/view10/M03/23/3F/wKhkGWWAJCuALKWTAACaC2anwmg982.jpg)
![C語言程序設(shè)計(第二版)課件第4章 選擇結(jié)構(gòu)程序設(shè)計_第2頁](http://file4.renrendoc.com/view10/M03/23/3F/wKhkGWWAJCuALKWTAACaC2anwmg9822.jpg)
![C語言程序設(shè)計(第二版)課件第4章 選擇結(jié)構(gòu)程序設(shè)計_第3頁](http://file4.renrendoc.com/view10/M03/23/3F/wKhkGWWAJCuALKWTAACaC2anwmg9823.jpg)
![C語言程序設(shè)計(第二版)課件第4章 選擇結(jié)構(gòu)程序設(shè)計_第4頁](http://file4.renrendoc.com/view10/M03/23/3F/wKhkGWWAJCuALKWTAACaC2anwmg9824.jpg)
![C語言程序設(shè)計(第二版)課件第4章 選擇結(jié)構(gòu)程序設(shè)計_第5頁](http://file4.renrendoc.com/view10/M03/23/3F/wKhkGWWAJCuALKWTAACaC2anwmg9825.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第4章選擇結(jié)構(gòu)程序設(shè)計
掌握關(guān)系表達式和邏輯表達式的組成及運算理解選擇結(jié)構(gòu)(分支結(jié)構(gòu))程序設(shè)計的概念掌握if語句、switch語句的基本結(jié)構(gòu)及執(zhí)行過程學(xué)會簡單的選擇結(jié)構(gòu)程序設(shè)計4.1案例:紅綠燈【例4-1】十字路口倒計時牌中時間結(jié)束后顯示紅燈還是綠燈?當(dāng)前是紅燈?顯示綠燈顯示紅燈是否4.1案例:紅綠燈#include<stdio.h>voidmain(){ intcolor; intred=1; /*用變量red存儲1來代表紅燈*/ printf(“Pleaseinputcolor(1-red,2-green):”); scanf(“%d”,&color); if(color==red) printf(“Pleasedisplaygreen\n”); elseprintf(“Pleasedisplayred\n”);}4.2關(guān)系運算符與關(guān)系表達式4.2.1關(guān)系運算符關(guān)系運算符>、>=、<、<=
==、!=
優(yōu)先級結(jié)合性左結(jié)合a>b<c 等價于 (a>b)<ca!=b>c 等價于 a!=(b>c)
==、!=>、>=、<、<=算術(shù)運算符C語言處理判斷和輸出判斷結(jié)果示意圖C語言非01、-2、9010?014.1關(guān)系運算符與關(guān)系表達式4.2.2關(guān)系表達式表達式關(guān)系運算符表達式a>b'a'+1!='b'3.1415==3.14163>4<5a>=100a>994.3邏輯運算符與邏輯表達式4.3.1邏輯運算符邏輯運算符!(邏輯非)、&&(邏輯與)、||(邏輯或)4.3邏輯運算符與邏輯表達式優(yōu)先級結(jié)合性非運算符(?。┑慕Y(jié)合性為右結(jié)合;與運算符(&&)和或運算符(||)的結(jié)合性為左結(jié)合。==、!=>、>=、<、<=算術(shù)運算符&&!、++、--等||【例4-2】分析下面程序段的運行結(jié)果
#include<stdio.h>voidmain(){ charc; inta,b; c='A'; a=1; b=2; printf("c>\'B\'=%d\n",c>'B'); printf("a>b>2=%d\n",a>b>2);}4.4邏輯運算符的短路現(xiàn)象若&&運算符左邊的表達式為假(或0),則其右邊的表達式將不再運算,整個表達式的值必然為假若||運算符左邊的表達式為真(或非0值),則其右邊的表達式將不再運算,整個表達式的值必然為真3<5||++bABCD【例4-3】測試短路現(xiàn)象#include<stdio.h>voidmain(){ inta,b; a=b=0; a||++b;printf("%d,%d\n",a,b); a=b=1; a||++b;printf("%d,%d\n",a,b); a=b=0; a&&++b;printf("%d,%d\n",a,b); a=b=1; a&&++b;printf("%d,%d\n",a,b);}4.5if語句4.5.1單分支if語句if(表達式)語句;【例4-4】從鍵盤輸入一個整數(shù),判斷是否是偶數(shù),若是,則輸出“Yes”。#include<stdio.h>voidmain(){ inta; printf("Pleaseinputa:"); scanf("%d",&a); if(a%2==0) printf("Yes\n");}4.3if語句4.5.2雙分支if語句形式為:if(表達式)
語句1;else
語句2;【例4-5】從鍵盤輸入一個整數(shù),判斷是否是偶數(shù),若是,則輸出“Yes”,否則輸出“No”#include<stdio.h>voidmain(){ inta; printf("Pleaseinputa:"); scanf("%d",&a); if(a%2==0) printf("Yes\n"); else printf("No\n");}【例4-6】從鍵盤輸入兩個整數(shù),輸出其中最大者#include<stdio.h>voidmain(){ inta,b; printf("Pleaseinputa,b:"); scanf("%d,%d",&a,&b); if(a>b) printf("max=%d\n",a); else printf("max=%d\n",b);}4.5.3多分支選擇結(jié)構(gòu)多分支選擇結(jié)構(gòu)的if語句一般形式為:if(表達式1)語句1;
else
if(表達式2)語句2;…
else
if(表達式n)語句n;
else
語句n+1;4.5.3多分支選擇結(jié)構(gòu)流程圖語句1表達式1語句1表達式1語句1表達式1語句n+1000非0非0非04.6案例:打車費用的計算計算方式為:3公里以內(nèi)8元;3公里以上0車型每公里1.5元,1車型每公里2元。#include<stdio.h>voidmain(){ inttaxiType; floats; floatmoney; printf("Inputtaxitype(0,1):"); scanf("%d",&taxiType); printf("Inputs:"); scanf("%f",&s); if(s<3) money=8; else if(taxiType==0) money=8+(s-3)*1.5; else money=8+(s-3)*2; printf("money=%.2f\n",money);}4.7if語句的嵌套if(表達式)
if(表達式) 語句1;
else
語句2;else
if(表達式) 語句3;
else
語句4;
C語言規(guī)定else總是和其前面最近的沒有else配對的if配對。4.8案例:閏年的判斷【例4-8】輸入一個正整數(shù)作為年份,編程判斷該年是不是閏年。若是輸出“YES”,否則輸出“NO”。
【分析】滿足下面條件之一即為閏年:能被4整除,但不能被100整除。能被400整除。#include"stdio.h"voidmain(){ intyear; scanf("%d",&year); if(year%400==0)printf("Yes\n"); else if(year%4==0&&year%100!=0)printf("Yes\n"); else printf("NO\n");}year%400==0||(year%4==0&&year%100!=0)4.9條件運算符和條件表達式?:
表達式1?
表達式2:表達式3if(x>y)max=x;elsemax=y;max=x>y?x:y優(yōu)先級右結(jié)合性:a>b?a:c>d?c:d等價于a>b?a:(c>d?c:d)【例4-9】用條件運算符輸出3個整數(shù)中的最大者#include<stdio.h>voidmain(){ inta,b,c,max; printf("inputa,b,c:"); scanf("%d,%d,%d",&a,&b,&c); max=a>b?a:b; max=c>max?c:max; printf("max=%d\n",max);}4.10switch語句switch(表達式){case常量表達式1:語句1;case常量表達式2:語句2;…case常量表達式n:語句n;default:語句n+1;}【例4-10】輸入一個十進制數(shù),根據(jù)輸入的數(shù)輸出所對應(yīng)的英文星期單詞,若所輸入的數(shù)小于1或大于7,則輸出“Error”。
#include<stdio.h>voidmain(){ inta; printf("Inputa:"); scanf("%d",&a); switch(a) { case1:printf("Monday\n"); case2:printf("Tuesday\n"); case3:printf("Wednesday\n"); case4:printf("Thursday\n"); case5:printf("Friday\n"); case6:printf("Saturday\n"); case7:printf("Sunday\n"); default:printf("Error\n");}}4.10switch語句switch(表達式){
case常量表達式1:語句1;break;
case常量表達式2:語句2;break;…
case常量表達式n:語句n;break;
default:語句n+1;}修改后的例4-10程序#include<stdio.h>voidmain(){ inta; printf("Inputa:"); scanf("%d",&a); switch(a) { case1:printf("Monday\n");break; case2:printf("Tuesday\n");break; case3:printf("Wednesday\n");break; case4:printf("Thursday\n");break; case5:printf("Friday\n");break; case6:printf("Saturday\n");break; case7:printf("Sunday\n");break; default:printf("Error\n");break; }}【注意】switch后跟的“表達式”允許為任何類型的表達式,其數(shù)據(jù)類型和case后面的常量表達式的數(shù)據(jù)類型一致。每一個case后的各常量表達式的值不允許重復(fù),否則會報錯。每一個case后允許有多條語句,可以不用花括號“{}”括起來。case和default子句出現(xiàn)的先后順序可以變動,不會影響程序的執(zhí)行結(jié)果。default子句也可以省略不用。多個case可以共用一組執(zhí)行語句。例如:…case'A':case'B':case'C':printf("Pass\n");break;關(guān)于break4.11案例:判斷輸入的整數(shù)是否含有數(shù)字6
【例4-11】輸入一個100以內(nèi)的十進制正整數(shù),判斷該數(shù)是否包含數(shù)字字符“6”。若是輸出“Yes!”,否則輸出“No!”。#include<stdio.h>voidmain(){inta; printf("Inputa:"); scanf("%d",&a); if(a==6||(a%10==6||a/10==6)) printf("Yes!\n"); else printf("No!\n");}4.12案例:三個數(shù)的排序【例4-12】輸入3個數(shù),按從小到大的順序輸出。#include"stdio.h"voidmain(){ 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(b>c){t=b;b=c;c=t;} if(a>b){t=a;a=b;b=t;} printf("%d<=%d<=%d\n",a,b,c);}4.13案例:分?jǐn)?shù)等級的劃分【例4-13】將一個百分制的成績(設(shè)是整數(shù))轉(zhuǎn)化成5個等級90分以上為‘A’,80~89分為‘B’,70~79分為‘C’,60~69分為‘D’,60分以下為‘E’。
例如,輸入75,則顯示C。
【分析】先判斷輸入的數(shù)據(jù)是否在合理的分?jǐn)?shù)范圍(0~100)內(nèi),然后再判斷是哪個分?jǐn)?shù)段:90分以上輸出A,80~89分輸出B,70~79分輸出C,60~69分輸出D,否則顯示E。4.13案例:分?jǐn)?shù)等級的劃分#include<stdio.h>voidmain(){ inta; printf("Inputa:"); scanf("%d",&a); if(a<0||a>100) printf("Inputdataerror\n"); else if(a>=90) printf("A\n"); else if(a>=80) printf("B\n"); else if(a>=70) printf("C\n"); else if(a>=60) printf("D\n"); else printf("E\n");}【分析】使用switch語句,當(dāng)然最笨的辦法是每一個分?jǐn)?shù)一個case分支,將需要101個分支,顯然這種程序不值得推薦。那么有沒有簡化的辦法呢?
其實,任何好的算法都是對問題分析和提煉的結(jié)果。題目中60分以上都是每10分一個層次,60分以下是一個層次。只要把每個層次的共性找到就容易找到簡化程序的辦法了。以60~69為例。每個分?jǐn)?shù)的十位數(shù)都是6,對于該層次的成績,整除10的結(jié)果都是6。同樣對于70~79、80~89、90~99都是一樣。而69分以下的成績整除10的結(jié)果都小于6。
【例4-13】將一個百分制的成績(設(shè)是整數(shù))轉(zhuǎn)化成5個等級(用switch語句完成)#include<stdio.h>voidmain(){ inta; printf("Inputa:");scanf("%d",&a); if(a<0||a>100)printf("Inputdataerror\n"); else switch(a/10) { case10: case9:printf("A\n");break; case8:printf("B\n
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO 25062:2025 EN Systems and software engineering - Systems and software Quality Requirements and Evaluation (SQuaRE) - Common Industry Format (CIF) for reporting usability
- 2025年度跨境電商物流配送服務(wù)合作協(xié)議書4篇
- 廣東電力市場2024年半年報告
- 2025年度體育產(chǎn)業(yè)合伙人投資管理合同模板
- 2025年紡織片梭織機合作協(xié)議書
- 2025年度房地產(chǎn)項目開發(fā)貸款合同范本
- 2025年智能物流運輸車輛節(jié)能減排服務(wù)協(xié)議
- 美術(shù)教育的社會責(zé)任倡導(dǎo)計劃
- 生物課程教學(xué)設(shè)計工作坊計劃
- 學(xué)生美術(shù)能力測評體系建設(shè)計劃
- 2025年2級注冊計量師專業(yè)實務(wù)真題附答案
- 果實品質(zhì)評價體系建立與應(yīng)用-深度研究
- 服裝廠安全生產(chǎn)培訓(xùn)
- 城市隧道工程施工質(zhì)量驗收規(guī)范
- 2025年湖南高速鐵路職業(yè)技術(shù)學(xué)院高職單招高職單招英語2016-2024年參考題庫含答案解析
- 北京市東城區(qū)2024-2025學(xué)年高一上學(xué)期期末統(tǒng)一檢測歷史試卷(含答案)
- 五 100以內(nèi)的筆算加、減法2.筆算減法 第1課時 筆算減法課件2024-2025人教版一年級數(shù)學(xué)下冊
- 2025年八省聯(lián)考陜西高考生物試卷真題答案詳解(精校打印)
- 2024年湖南省公務(wù)員錄用考試《行測》真題及答案解析
- 人教版小學(xué)六年級下冊音樂教案全冊
- 12J201平屋面建筑構(gòu)造圖集(完整版)
評論
0/150
提交評論