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

下載本文檔

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

文檔簡介

IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBULecture7SelectionStructures(1/2)

——選擇結(jié)構(gòu)(1/2)

1IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBUCharacteristicsofSelectionStructuresRelationalExpressionsLogicalExpressionsif

StatementsNestedSelectionStructuresConditionalExpressionsswitchStatementLecture7SelectionStructures(1/2)

2IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBUCharacteristicsofSelectionStructures

——選擇結(jié)構(gòu)的特征

RelationalExpressionsLogicalExpressionsif

StatementsNestedSelectionStructuresConditionalExpressionsswitchStatementLecture7SelectionStructures(1/2)

3IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU順序結(jié)構(gòu)與選擇結(jié)構(gòu)的差異CharacteristicsofSelectionStructures4順序結(jié)構(gòu)操作A操作B分支(選擇)結(jié)構(gòu)判斷操作A操作BYN如果則否則IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU我們需要邏輯判斷2012年是閏年嗎?——從問題到答案地球繞太陽運行周期為365天5小時48分46秒(1個回歸年,合365.24219日)因為在平年公歷只計算365日,結(jié)果四年后便會累積0.24220×4=0.9688日,大約等于一日,所以便逢四年增加一日閏日以抵銷這0.9688日經(jīng)過四百年就會多算出(1-0.9688)×100=3.12日(大約3日),因此,每四百年中要減少三個閏年CharacteristicsofSelectionStructures5IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU我們需要邏輯判斷閏年設(shè)定——讓地球/人類“等”一天,使我們與地球同步CharacteristicsofSelectionStructures0.24220day每年人類落后0.24220日≈8學時0.24220×4=0.9688day每4年人類落后近1日,每4年應(yīng)補1日1-0.9688=0.0312day每4年人類超前0.0312日≈1學時0.0312×100=3.12days每400年人類超前近3日,每400年應(yīng)減少3日,即100,200,300,400年中只增加1日6被100整除的年份,如果被400整除才加1日被4整除的年份,需加1日IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU我們需要邏輯判斷算法(y為年度,如2012)如果:y被4整除如果:y不被100整除則:y是閏年否則:如果:y被400整除則:y是閏年否則:y不是閏年否則:y不是閏年CharacteristicsofSelectionStructures7y被4整除但不被100整除y被4整除同時被100整除,也被400整除y被400整除12如果: y被4整除并且

y不被100整除或者y被400整除則:y是閏年否則:y不是閏年需解決3個問題IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBUCharacteristicsofSelectionStructuresRelationalExpressions

——關(guān)系表達式【重點】關(guān)系運算規(guī)則【難點】真假值的確定LogicalExpressionsif

StatementsNestedSelectionStructuresConditionalExpressionsswitchStatementLecture7SelectionStructures(1/2)

8IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU關(guān)系表達式:進行數(shù)據(jù)之間的大小比較運算的表達式關(guān)系運算符【pp91】RelationalExpressionsCategory

OperatorAssociativity大小關(guān)系運算

>(大于,isgreaterthan)<(小于,islessthan)>=(大于等于,isgreaterthanorequalto)<=(小于等于,islessthanorequalto)

Lefttoright

相等運算

==(等于,isequalto)!=(不等于,isnotequalto)

Lefttoright

highestprecedencelowestprecedence9IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU格式與運算規(guī)則格式其中E1和E2為算術(shù)類型表達式或指針Op為關(guān)系運算符運算規(guī)則左結(jié)合,優(yōu)先級低于算術(shù)運算、高于賦值運算計算E1和E2的值如果E1和E2之間大小關(guān)系與Op的含義一致,則結(jié)果為1,否則結(jié)果為0結(jié)果類型為intRelationalExpressionsE1OpE210>,>=,<,<=,==,!=字符型整型枚舉型浮點型整型類型IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU關(guān)系表達式的值是邏輯值邏輯值是表示邏輯判斷結(jié)果的量關(guān)系表達式的值是邏輯值,即1或0;1表示真(True),0表示假(False)1==1的值為1(真)1<1的值為0(假)1!=5>=3的值為0(假)2012%4==0的值為1(真)2012%100!=0的值為1(真)2012%400==0的值為0(假)RelationalExpressions11值為1IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU關(guān)于關(guān)系表達式的說明不同類型之間運算時進行類型轉(zhuǎn)換,應(yīng)盡量采用同類型(類型不同時可采用強制轉(zhuǎn)換)4>=3.9

4.0>=3.9RelationalExpressions#include<stdio.h>main(){inta=-1;unsignedintb=0;printf("%d,%d",a>b,-1>0);}1111111111111111a0000000000000000b65535intunsigned12顯示:1,0-1>0?不同類型混合運算——進行類型轉(zhuǎn)換(int→unsignedint)!同類型(int)運算IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU關(guān)于關(guān)系表達式的說明字符的比較通過其ASCII碼進行’a’>’A’97>65的值為1實數(shù)的比較要考慮存儲和運算的誤差x==0.0

可能永遠不為真,可代替為fabs(x)<1.0e-6RelationalExpressions數(shù)學庫函數(shù),x的絕對值13IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU計算機采用二值邏輯判斷結(jié)果只有真或假兩種情況的邏輯體系計算機中的邏輯運算就是二值邏輯體系,C中的邏輯值只有1和0RelationalExpressions14IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU前沿知識:模糊邏輯(Zadeh,1965)經(jīng)典集合集合論中,任何一個元素a和集合A之間的關(guān)系只有兩種:aA和aA而模糊邏輯中一個元素a以一定的隸屬度屬于A模糊邏輯用于模擬人類的高級思維RelationalExpressions15IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBURelationalExpressions扎德(1921~

Zadeh,L.A.

美國自動控制專家。模糊集理論的先驅(qū)者。1921年2月生于蘇聯(lián)巴庫。1949年獲哥倫比亞大學電機工程博士學位。在博士論文中引入時變變換函數(shù)概念,成為分析線性時變系統(tǒng)的工具。50年代從事濾波器研究。60年代研究狀態(tài)空間理論。1965年在《信息與控制》雜志第八期上發(fā)表《模糊集》論文,通過引進模糊集(邊界不明確的類)提供了一種分析復(fù)雜系統(tǒng)的新方法。他提出用語言變量代替數(shù)值變量來描述系統(tǒng)的行為,并繪出了一種較好的人類推理模式。他的模糊集理論開創(chuàng)了模糊系統(tǒng)與模糊控制理論的研究。CreatorofFuzzy16IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU模糊邏輯禿頂?RelationalExpressions17IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU模糊邏輯年輕?15歲,24歲,25歲,26歲,35歲,45歲,65歲,…RelationalExpressionsx=30時最模糊18經(jīng)典邏輯中的排中律不成立——30歲時“既年輕又不年輕”,否定與肯定同時為“真”IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBUCharacteristicsofSelectionStructuresRelationalExpressionsLogicalExpressions

——邏輯表達式【重點】邏輯運算規(guī)則【難點】運算對象和運算結(jié)果的真假值if

StatementsNestedSelectionStructuresConditionalExpressionsswitchStatementLecture7SelectionStructures(1/2)19IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU目前已解決的問題——簡單判斷LogicalExpressions如果: y被4整除并且

y不被100整除或者y被400整除則:是閏年否則:不是閏年檢測:y%4==0的值y%100!=0的值y%400==0的值20IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU下一步要解決的問題——實現(xiàn)更復(fù)雜的邏輯判斷LogicalExpressions如果: y被4整除并且

y不被100整除或者y被400整除則:是閏年否則:不是閏年21IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU邏輯表達式對邏輯量(具有邏輯值——真/假——的量,是某種判斷的結(jié)果)進行邏輯組合,實現(xiàn)復(fù)雜邏輯判斷的表達式邏輯運算符的運算對象是邏輯量(可以是關(guān)系表達式),運算結(jié)果也是邏輯量(最終判斷結(jié)果)關(guān)系表達式是邏輯表達式的特例LogicalExpressions22IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU邏輯運算符LogicalExpressionshighestprecedencelowestprecedenceCategory

OperatorAssociativityLogicalNOT

(邏輯非)!Righttoleft

LogicalAND

(邏輯與)&&

Lefttoright

LogicalOR

(邏輯或)||

Lefttoright

23IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU邏輯表達式格式格式其中表達式E1和E2的類型不必一致,但必須為算術(shù)類型

(包括關(guān)系表達式)或指針算術(shù)類型字符型整型枚舉型浮點型LogicalExpressionsE1&&E2E1||E2!E124整型類型邏輯表達式運算規(guī)則真值表(Truthtable,列出邏輯表達式真假值的表)邏輯運算對象的邏輯值:非0為真,0為假邏輯運算(包括關(guān)系運算)結(jié)果:1為真,0為假E1的值E2的值E1&&E2E1||E2!E1000010非零011非零0010非零非零110IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBULogicalExpressions25IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU邏輯表達式運算規(guī)則邏輯與運算(&&)兩個運算對象都非0,結(jié)果才為1,否則為0具有嚴格求值順序:E1&&E2中E1為非0時才計算E2,E1為0時不計算E2類比LogicalExpressionsE1E2E1&&E2E1打開時不必檢查E226IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU邏輯表達式運算規(guī)則邏輯或運算(||)兩個運算對象都為0,結(jié)果才為0,否則為1具有嚴格求值順序:E1||E2中E1為0時才計算E2,E1為非0時不計算E2類比LogicalExpressionsE1||E2E1E2E1閉合時不必檢查E227IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU邏輯表達式運算規(guī)則邏輯非運算(?。┲挥幸粋€運算對象(單目運算符)運算對象的邏輯值為0(非0)時,結(jié)果1(0)類比LogicalExpressions!E1E1R28IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU邏輯表達式運算規(guī)則優(yōu)先級與結(jié)合性小結(jié)【pp378-379:App.D】LogicalExpressions29!(右結(jié)合)算術(shù)運算符關(guān)系運算符&&||賦值運算符(右結(jié)合)逗號運算符高低IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU閏年的條件y被4整除并且y不被100整除或者y被400整除((y%4==0)&&(y%100!=0)) ||(y%400==0)的值為1(真)考慮優(yōu)先級后:y%4==0&&

y%100!=0

||y%400==0的值為1(真)LogicalExpressions30IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBUCharacteristicsofSelectionStructuresRelationalLogicalExpressionsLogicalExpressionsif

Statements ——if語句【重點】if語句的執(zhí)行流程【難點】選擇結(jié)構(gòu)條件的表示NestedSelectionStructuresConditionalExpressionsswitchStatementLecture7SelectionStructures(1/2)

31IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU目前已解決的問題——邏輯判斷,即語句的執(zhí)行條件if

Statements如果: y被4整除并且

y不被100整除或者y被400整除則:是閏年否則:不是閏年檢測:y%4==0&& y%100!=0|| y%400==0

的值32IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU下一步要解決的問題——實現(xiàn)程序的分支結(jié)構(gòu)if

Statements如果: y被4整除并且

y不被100整除或者y被400整除則:是閏年否則:不是閏年33IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU簡單if語句格式其中表達式E為算數(shù)類型(包括邏輯表達式)或指針,稱為條件E非0:條件成立;E等于0:條件不成立S為1條語句(以;號結(jié)尾)執(zhí)行過程if

Statementsif

(E)S計算EE0?執(zhí)行SYesNo表達式必須用()括起!執(zhí)行S的下一條語句34IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU示例-1:從鍵盤輸入一個年份,如果是平年則顯示365,如果是閏年則顯示366if

Statements#include<stdio.h>main(){ unsignedintyear,days=365; printf("\nPleaseinputayear:"); scanf("%u",&year); if(year%4==0&&year%100!=0||year%400==0)

days=366; printf("\n%u",days);}SE35條件不成立時days=?閏年的條件:

year%4==0&&year%100!=0||year%400==0的值為1(真)if((year%4==0&&year%100!=0||year%400==0)==1)…等價于:if((year%4==0&&year%100!=0||year%400==0)!=0)…等價于:if(year%4==0&&year%100!=0||year%400==0)…在邏輯值的意義上:E!=0與E等價;E==0與!E等價邏輯表達式的值只能為1或0IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBUif(E)S在語法上是1條語句條件成立時需要執(zhí)行多條語句怎么辦?問題:E非0時需要執(zhí)行多個語句S1,S2,…,Sn解決方法:使用復(fù)合語句{S1S2…Sn}(語法上相當于1條語句)替代Sif

Statementsif

(E)S36如果a大于b則交換a和b的值:

t=a;a=b;b=a;if(a>b)t=a;a=b;b=a;a>b時正常工作,但a≤b時不符合題意{}IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU可讀性好的編碼風格采用鋸齒形格式,使{與}對齊,其內(nèi)部語句向右縮進(采用Tab鍵)if(a>b){t=a;a=b;b=t;}if(a>b) {t=a;a=b;b=t;}if(a>b){ t=a; a=b; b=t; }if

StatementsK&Rstyle37if(a>b) {t=a;a=b;b=t; }AllmanstyleIntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU關(guān)于條件E可以是關(guān)系表達式或邏輯表達式:E的值為1時條件成立,0時條件不成立if(i!=0)x=1.0/i;E也可以是一般的數(shù)值表達式:當E的值為非0時條件成立,0時條件不成立if(i)x=1.0/i;(效率更高,但是…)if((a<=b)==1)…

if((a<=b)!=0)…

if(a<=b)…if

Statements38IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU基本if語句【重點】格式其中表達式E為算數(shù)類型(包括邏輯表達式)或指針,稱為條件E非0:條件成立;E等于0:條件不成立S1,S2分別為1條語句執(zhí)行過程if

(E)S1elseS2在語法上視為1條語句if

Statementsif

(E)S1elseS2計算EE0?執(zhí)行S1YesNo執(zhí)行S2的下一條語句執(zhí)行S239表達式必須用()括起!IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU示例-2:平年顯示365,閏年顯示366if

Statements#include<stdio.h>main(){ unsignedintyear,days; printf("\nPleaseinputayear:"); scanf("%u",&year); if(year%4==0&&year%100!=0||year%400==0)

days=366; else

days=365; printf("\n%u",days);}S1ES240IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU說明簡單if語句是if-else語句的特例當S2為空語句時,if(E)S1elseS2等價于if(E)S1if

Statementsif

(E)Sif

(E)Selse;41;計算EE0執(zhí)行SYesNo;IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU說明當條件成立(不成立)時需要執(zhí)行多條語句,則S1(S2)應(yīng)以復(fù)合語句替換表達式計算可能的副作用在執(zhí)行S(或S1或S2)之前全部產(chǎn)生完畢后【難點】if

Statements42#include<stdio.h>main(){ inti=0; if(i++==0) printf("%d",i);}i++的值為0此時i值為1IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU說明注意區(qū)分=和==運算的區(qū)別!=有副作用,==沒有副作用【重點】i=4==4;執(zhí)行后表達式的值與i的值?(i=4)==4;執(zhí)行后表達式的值與i的值?if

Statements43#include<stdio.h>main(){ inti=0; if(i=1) printf("1!"); else printf("0!");}【容易犯的錯誤!】此時i值變成1(副作用?。?,賦值運算i=1的值為1(非0)IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU示例-3:如果鍵盤輸入是英文字母則顯示其ASCII碼if

Statements#include<stdio.h>main(){ charch; printf("\nPleaseinputacharacter:"); scanf("%c",&ch); if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z') printf("\nASCIIof%cis%d",ch,ch);}Pleaseinputacharacter:aASCIIofais97

不能寫成:’A’<=ch<=’Z’||’a’<=ch<=’z’當ch值為’4’時:ch>=’A’&&ch<=’Z’的值為0;而’A’<=ch<=’Z’(’A’<=ch)<=’Z’(’A’<=’4’)<=’Z’0<=90的值為1(真)!44也不能寫成:ch>='A'&&ch<='z'IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU示例-4:問題同前if

Statements#include<stdio.h>main(){ charch; if((ch=getchar())>='A'&&ch<='Z'|| ch>='a'&&ch<='z') printf("\nASCIIof%cis%d",ch,ch); else printf("\nNotaletter");}45&&和||具有嚴格求值順序,計算過程中產(chǎn)生的副作用影響后續(xù)運算一定會先調(diào)用getchar(),因而后續(xù)的ch具有確定的值!值為ch的值條件可否寫成: getchar()>=’A’&&getchar()<=’Z’||getchar()>=’a’&&getchar()<=’z’IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU多路if語句【重點】格式if

Statementsif

(E1) S1else

if

(E2) S2else

if

(E3) S3…else

if

(En) SnelseSn+1

其中E1,E2,…,En為條件:非0則條件成立;等于0則條件不成立S1,S2,…,Sn,Sn+1分別為1條語句當Sn+1為空語句時,最后一個elseSn+1可以省略46IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU多路if語句執(zhí)行過程if

Statementsif

(E1) S1else

if

(E2) S2…else

if

(En) Snelse Sn+1

E10?執(zhí)行S1YesNo執(zhí)行Sn+1的下一條語句E20?執(zhí)行S2YesNoEn0?執(zhí)行SnYesNo執(zhí)行Sn+1No47計算E1計算E2計算En語法上視為1條語句IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU說明當條件成立(不成立)時需要執(zhí)行多條語句,則S1,S2,…,Sn,Sn+1應(yīng)以復(fù)合語句替換各路判斷中的隱含前提if

Statementsif(E1)S1elseif(E2)S2/*此時E1為0*/elseif(E3)S3/*此時E1和E2皆為0*/…elseif(En)Sn/*此時E1,E2,…,En-1皆為0*/else/*此時E1,E2,…,En皆為0*/Sn+148IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU說明S1,S2,…,Sn,Sn+1中的語句必定能夠得到執(zhí)行,而且僅有一個語句得以執(zhí)行n==1時本語句變成基本if語句if

Statements4

溫馨提示

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

評論

0/150

提交評論