版權(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ì)
掌握關(guān)系表達(dá)式和邏輯表達(dá)式的組成及運(yùn)算理解選擇結(jié)構(gòu)(分支結(jié)構(gòu))程序設(shè)計(jì)的概念掌握if語(yǔ)句、switch語(yǔ)句的基本結(jié)構(gòu)及執(zhí)行過(guò)程學(xué)會(huì)簡(jiǎn)單的選擇結(jié)構(gòu)程序設(shè)計(jì)4.1案例:紅綠燈【例4-1】十字路口倒計(jì)時(shí)牌中時(shí)間結(jié)束后顯示紅燈還是綠燈?當(dāng)前是紅燈?顯示綠燈顯示紅燈是否4.1案例:紅綠燈#include<stdio.h>voidmain(){ intcolor; intred=1; /*用變量red存儲(chǔ)1來(lái)代表紅燈*/ printf(“Pleaseinputcolor(1-red,2-green):”); scanf(“%d”,&color); if(color==red) printf(“Pleasedisplaygreen\n”); elseprintf(“Pleasedisplayred\n”);}4.2關(guān)系運(yùn)算符與關(guān)系表達(dá)式4.2.1關(guān)系運(yùn)算符關(guān)系運(yùn)算符>、>=、<、<=
==、!=
優(yōu)先級(jí)結(jié)合性左結(jié)合a>b<c 等價(jià)于 (a>b)<ca!=b>c 等價(jià)于 a!=(b>c)
==、!=>、>=、<、<=算術(shù)運(yùn)算符C語(yǔ)言處理判斷和輸出判斷結(jié)果示意圖C語(yǔ)言非01、-2、9010?014.1關(guān)系運(yùn)算符與關(guān)系表達(dá)式4.2.2關(guān)系表達(dá)式表達(dá)式關(guān)系運(yùn)算符表達(dá)式a>b'a'+1!='b'3.1415==3.14163>4<5a>=100a>994.3邏輯運(yùn)算符與邏輯表達(dá)式4.3.1邏輯運(yùn)算符邏輯運(yùn)算符!(邏輯非)、&&(邏輯與)、||(邏輯或)4.3邏輯運(yùn)算符與邏輯表達(dá)式優(yōu)先級(jí)結(jié)合性非運(yùn)算符(?。┑慕Y(jié)合性為右結(jié)合;與運(yùn)算符(&&)和或運(yùn)算符(||)的結(jié)合性為左結(jié)合。==、!=>、>=、<、<=算術(shù)運(yùn)算符&&!、++、--等||【例4-2】分析下面程序段的運(yùn)行結(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邏輯運(yùn)算符的短路現(xiàn)象若&&運(yùn)算符左邊的表達(dá)式為假(或0),則其右邊的表達(dá)式將不再運(yùn)算,整個(gè)表達(dá)式的值必然為假若||運(yùn)算符左邊的表達(dá)式為真(或非0值),則其右邊的表達(dá)式將不再運(yùn)算,整個(gè)表達(dá)式的值必然為真3<5||++bABCD【例4-3】測(cè)試短路現(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語(yǔ)句4.5.1單分支if語(yǔ)句if(表達(dá)式)語(yǔ)句;【例4-4】從鍵盤輸入一個(gè)整數(shù),判斷是否是偶數(shù),若是,則輸出“Yes”。#include<stdio.h>voidmain(){ inta; printf("Pleaseinputa:"); scanf("%d",&a); if(a%2==0) printf("Yes\n");}4.3if語(yǔ)句4.5.2雙分支if語(yǔ)句形式為:if(表達(dá)式)
語(yǔ)句1;else
語(yǔ)句2;【例4-5】從鍵盤輸入一個(gè)整數(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】從鍵盤輸入兩個(gè)整數(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語(yǔ)句一般形式為:if(表達(dá)式1)語(yǔ)句1;
else
if(表達(dá)式2)語(yǔ)句2;…
else
if(表達(dá)式n)語(yǔ)句n;
else
語(yǔ)句n+1;4.5.3多分支選擇結(jié)構(gòu)流程圖語(yǔ)句1表達(dá)式1語(yǔ)句1表達(dá)式1語(yǔ)句1表達(dá)式1語(yǔ)句n+1000非0非0非04.6案例:打車費(fèi)用的計(jì)算計(jì)算方式為: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語(yǔ)句的嵌套if(表達(dá)式)
if(表達(dá)式) 語(yǔ)句1;
else
語(yǔ)句2;else
if(表達(dá)式) 語(yǔ)句3;
else
語(yǔ)句4;
C語(yǔ)言規(guī)定else總是和其前面最近的沒(méi)有else配對(duì)的if配對(duì)。4.8案例:閏年的判斷【例4-8】輸入一個(gè)正整數(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條件運(yùn)算符和條件表達(dá)式?:
表達(dá)式1?
表達(dá)式2:表達(dá)式3if(x>y)max=x;elsemax=y;max=x>y?x:y優(yōu)先級(jí)右結(jié)合性:a>b?a:c>d?c:d等價(jià)于a>b?a:(c>d?c:d)【例4-9】用條件運(yùn)算符輸出3個(gè)整數(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語(yǔ)句switch(表達(dá)式){case常量表達(dá)式1:語(yǔ)句1;case常量表達(dá)式2:語(yǔ)句2;…case常量表達(dá)式n:語(yǔ)句n;default:語(yǔ)句n+1;}【例4-10】輸入一個(gè)十進(jìn)制數(shù),根據(jù)輸入的數(shù)輸出所對(duì)應(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語(yǔ)句switch(表達(dá)式){
case常量表達(dá)式1:語(yǔ)句1;break;
case常量表達(dá)式2:語(yǔ)句2;break;…
case常量表達(dá)式n:語(yǔ)句n;break;
default:語(yǔ)句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后跟的“表達(dá)式”允許為任何類型的表達(dá)式,其數(shù)據(jù)類型和case后面的常量表達(dá)式的數(shù)據(jù)類型一致。每一個(gè)case后的各常量表達(dá)式的值不允許重復(fù),否則會(huì)報(bào)錯(cuò)。每一個(gè)case后允許有多條語(yǔ)句,可以不用花括號(hào)“{}”括起來(lái)。case和default子句出現(xiàn)的先后順序可以變動(dòng),不會(huì)影響程序的執(zhí)行結(jié)果。default子句也可以省略不用。多個(gè)case可以共用一組執(zhí)行語(yǔ)句。例如:…case'A':case'B':case'C':printf("Pass\n");break;關(guān)于break4.11案例:判斷輸入的整數(shù)是否含有數(shù)字6
【例4-11】輸入一個(gè)100以內(nèi)的十進(jìn)制正整數(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案例:三個(gè)數(shù)的排序【例4-12】輸入3個(gè)數(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ù)等級(jí)的劃分【例4-13】將一個(gè)百分制的成績(jī)(設(shè)是整數(shù))轉(zhuǎn)化成5個(gè)等級(jí)90分以上為‘A’,80~89分為‘B’,70~79分為‘C’,60~69分為‘D’,60分以下為‘E’。
例如,輸入75,則顯示C。
【分析】先判斷輸入的數(shù)據(jù)是否在合理的分?jǐn)?shù)范圍(0~100)內(nèi),然后再判斷是哪個(gè)分?jǐn)?shù)段:90分以上輸出A,80~89分輸出B,70~79分輸出C,60~69分輸出D,否則顯示E。4.13案例:分?jǐn)?shù)等級(jí)的劃分#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語(yǔ)句,當(dāng)然最笨的辦法是每一個(gè)分?jǐn)?shù)一個(gè)case分支,將需要101個(gè)分支,顯然這種程序不值得推薦。那么有沒(méi)有簡(jiǎn)化的辦法呢?
其實(shí),任何好的算法都是對(duì)問(wèn)題分析和提煉的結(jié)果。題目中60分以上都是每10分一個(gè)層次,60分以下是一個(gè)層次。只要把每個(gè)層次的共性找到就容易找到簡(jiǎn)化程序的辦法了。以60~69為例。每個(gè)分?jǐn)?shù)的十位數(shù)都是6,對(duì)于該層次的成績(jī),整除10的結(jié)果都是6。同樣對(duì)于70~79、80~89、90~99都是一樣。而69分以下的成績(jī)整除10的結(jié)果都小于6。
【例4-13】將一個(gè)百分制的成績(jī)(設(shè)是整數(shù))轉(zhuǎn)化成5個(gè)等級(jí)(用switch語(yǔ)句完成)#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. 本站所有資源如無(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小吃店租房合同范例
- 關(guān)于水果店轉(zhuǎn)讓合同范例
- 工廠木材買賣合同范例
- 建筑承攬合同范例
- 定鋪?zhàn)赓U合同范例
- 上海團(tuán)體旅游合同模板
- 廣告公司合同范例
- 化工設(shè)備清洗合同模板
- 公園承包攤位合同范例
- 2024年佛山客運(yùn)考試題庫(kù)
- 六爻必背口訣
- 多重耐藥菌病例分析ppt課件
- 六十四卦圖文詳解
- 要事第一(課堂PPT)
- SDR特別提款權(quán)PPT課件
- 對(duì)排球大力跳發(fā)球失誤的技術(shù)原因分析
- 中藥飲片甲類
- 初中化學(xué)儀器與藥品編碼
- PRVC機(jī)械通氣PPT課件
- 2型糖尿病人生活質(zhì)量評(píng)定量表(中文版)
- GR326CORE規(guī)范講解
評(píng)論
0/150
提交評(píng)論