高級語言程序設計(CC++版) 課件 第3章 選擇結構_第1頁
高級語言程序設計(CC++版) 課件 第3章 選擇結構_第2頁
高級語言程序設計(CC++版) 課件 第3章 選擇結構_第3頁
高級語言程序設計(CC++版) 課件 第3章 選擇結構_第4頁
高級語言程序設計(CC++版) 課件 第3章 選擇結構_第5頁
已閱讀5頁,還剩16頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第3章

選擇結構目錄if語句嵌套的if語句關系運算符與關系表達式邏輯運算符與邏輯表達式條件運算符與條件表達式switch語句216:121.if語句if語句通常用來實現雙分支選擇,它通過判斷條件表達式取值(true或false),選擇執行相應的語句序列。if語句的一般格式為:if(表達式)語句1[else語句2]if...else的功能是:當表達式為真時(非0值為真,0值為假)執行語句1,否則執行語句2(else子句為可選項,無該選項時與語句2為空語句等價)。語句1和語句2可以是一個簡單語句,也可以是一個復合語句,甚至是一條空語句。表達式可以是關系表達式、邏輯表達式,甚至是數值表達式。其執行流程圖如圖3.1所示。3返回16:12例3.1:輸入一個雙精度浮點數,將其向0舍入到整數。向0舍入的含義是“正數向下舍入,負數向上舍入”輸入:輸入一個雙精度浮點數。輸出:該雙精度浮點數向0舍入的整數。樣例輸入:3.14樣例輸出:3#include<iostream>usingnamespacestd;intmain(){ doublea;cin>>a;if(a>0)cout<<int(a)<<endl;elsecout<<-int(-a)<<endl;return0;}416:12例3.2:輸入三個整數,按從小到大的順序輸出這三個數?#include<iostream>usingnamespacestd;intmain(){ inta,b,c,temp; cin>>a>>b>>c; if(a>b){ temp=a; a=b; b=temp; }

if(b>c){ temp=b; b=c; c=temp; } if(a>b){ temp=a; a=b; b=temp; } cout<<a<<""<<b<<""<<c<<endl; return0;}516:122.嵌套的if語句if語句還可通過嵌套實現多分支選擇,其一般格式如下:if(條件1)語句1elseif(條件2)語句2elseif(條件3)語句3……注意:if語句可以缺少else選項,但else不能脫離if關鍵字單獨使用。else必須與if關鍵字配套使用,且else總是與離它最近的還未配對的if匹配。6返回16:12例3.3:輸入一個整數,判斷該數是正數、負數還是零。輸入:一個整數。輸出:該數為正數則輸出“positive”,負數則輸出“negative”,零則輸出“zero”。#include<iostream>usingnamespacestd;intmain(){ inta; cin>>a; if(a>0)cout<<"positive"<<endl; elseif(a<0)cout<<"negative"<<endl; elsecout<<"zero"<<endl; return0;}716:12例3.4:龜兔賽跑中,已知烏龜速度為a米每秒,兔子速度為b米每秒,龜兔賽跑的賽程總長度為s米,兔子在比賽中到達終點前的某一時刻睡著了(且僅睡著這一次),耽誤了t秒的時間,如果烏龜贏了輸出"Turtlewin",兔子贏了輸出"Rabbitwin",否則輸出"Tie"。#include<iostream>usingnamespacestd;intmain(){ inta,b,s,t; cin>>a>>b>>s>>t; doubletur=(double)s/a; doublerab=(double)s/b+t; if(tur<rab)cout<<"Turtlewin"; elseif(tur>rab)cout<<"Rabbitwin"; elsecout<<"Tie"; return0;}816:12例3.5:輸入a、b、c,求一元二次方程ax2+bx+c=0的解。

輸入:三個整數a、b、c。

輸出:方程ax2+bx+c=0的解(保留兩位精度),a=0則輸出“Thisisnotaquadraticequation”。若有多個解,則多個解以空格分隔輸出。#include<cstdio>#include<cmath>intmain(){ doublea,b,c,delta,x1,x2,realpart,imagpart; scanf("%lf%lf%lf",&a,&b,&c); if(fabs(a)<=1e-6)printf("Theequationisnotaquadraticequation\n"); else { delta=b*b-4*a*c; if(fabs(delta)<=1e-6)printf("%.2f\n",-b/(2*a)); elseif(delta>1e-6) { x1=(-b+sqrt(delta))/(2*a); x2=(-b-sqrt(delta))/(2*a); printf("%.2f%.2f\n",x1,x2); } else { realpart=-b/(2*a); //realpart是復根的實部 imagpart=sqrt(-delta)/(2*a); //imagpart是復根的虛部 printf("%.2f+%.2fi",realpart,imagpart); //輸出一個復根 printf("%.2f-%.2fi\n",realpart,imagpart); //輸出另一個復根 } } return0;}916:123.關系運算符與關系表達式關系運算符也稱比較運算符,關系運算符都是雙目運算符,其結合性均為左結合。關系運算符的優先級低于算術運算符,高于賦值運算符。在六個關系運算符中,“<、<=、>、>=”的優先級相同,“==、!=”的優先級相同,且前四個運算符優先級高于后兩個運算符。10返回16:12例3.6:輸入一個整數,判斷該數的奇偶性(“odd”或“even”)。

輸入:一個整數。

輸出:奇數則輸出“odd”,偶數則輸出“even”。#include<iostream>usingnamespacestd;intmain(){ inta; cin>>a; if(a%2==0)cout<<"even"<<endl; elsecout<<"odd"<<endl; return0;}1116:124.邏輯運算符與邏輯表達式關系運算符可以方便地構成相對簡單的條件判斷,而邏輯運算符則可以連接多個關系表達式構成邏輯表達式,以表達相對復雜的條件組合判斷。邏輯運算符包括與(&&)、或(||)、非(!)3種,C/C++中邏輯運算符的含義和邏輯運算的真值表分別見表3.1和表3.2。

“&&”和“||”是雙目運算符,“!”是單目運算符。“!”的優先級別高于關系運算符和所有的雙目運算符,“&&”和“||”的優先級則低于算術運算符和關系運算符,而“&&”的優先級又高于“||”。邏輯運算符和其它運算符優先級從低到高依次為:

非(!)>算術運算符>關系運算符>與(&&)>或(||)>賦值運算符(=)在邏輯表達式的求值過程中,并非所有的邏輯運算符都能夠得到執行,只有當必須要執行下一個邏輯運算符才能求解表達式的值時,才執行該運算符。a&&b&&c。只有a為真時才需要計算b的值,只有當a和b都為真時才需要判別c的值。a‖b‖c。只要a為真,就不再判斷b和c。只有a為假時才判別b,a和b都為假才判別c。12返回運算符含義示例真值&&與p&&q若p和q均為真則判定為真,否則為假||或p||q若p和q均為假則判定為假,否則為真!非!p若p真則!p為假,若p假則!p為真pq!p!qp&&qp||q11001110010101100100110016:12例3.7:輸入年份year,判斷該年是否為閏年。

輸入:輸入一個整數代表年份。

輸出:若該年是閏年則輸出“yearisaleapyear”,否則輸出“yearisnotaleapyear”。#include<iostream>usingnamespacestd;intmain(){ intyear; cin>>year; if((year%4==0&&year%100!=0)||year%400==0)cout<<year<<"isaleapyear"<<endl; elsecout<<year<<"isnotaleapyear"<<endl; return0;}//地球繞太陽運行周期為365天5小時48分46秒(合計365.24219天)1316:125.條件運算符與條件表達式“?:”是條件運算符,條件表達式需要3個操作對象,“?”和“:”一起出現在表達式中,條件運算符是C/C++中唯一的一個三目運算符。使用條件表達式的一般形式為:

<表達式1>?<表達式2>:<表達式3>條件表達式的計算過程為:

計算表達式1的值;

若表達式1的值為真(非0),則僅計算表達式2并將其結果作為整個表達式的值;

若表達式1的值為假(0)則僅計算表達式3并將其結果作為整個表達式的值。14返回16:12例3.8:輸入兩個整數,輸出其中的較大數。

輸入:兩個整數。

輸出:兩個整數中的較大數。#include<iostream>usingnamespacestd;intmain(){ inta,b,max; cin>>a>>b; max=a>b?a:b; cout<<max<<endl; return0;}1516:126.switch語句if…else…語句可清晰便捷地實現雙分支選擇,當需要處理的分支情況較多時,使用switch語句可使程序結構更清晰,執行速度更快。switch常和關鍵詞case、break、default等一起配合使用。switch語句的一般格式如下:switch(表達式){ case常量表達式1:[語句1][break;]

…… case常量表達式n:[語句2][break;] default:[語句n+1]}16返回16:12說明switch語句中表達式的取值只能是整型、字符型、布爾型或枚舉型。花括號內是一個復合語句,內包含多個以關鍵字case開頭的語句行和最多一個以default開頭的行。case后面跟一個常量(或常量表達式,其取值類型與表達式類型一致),它們和default都是起標號作用,用來標志一個位置。執行switch語句時,先計算switch后面的“表達式”的值,然后將它與各case標號比較,如果與某一個case標號中的常量相同,流程就轉到此case標號后面的語句。如果沒有與switch表達式相匹配的case常量,流程轉去執行default標號后面的語句。可以沒有default標號,此時如果沒有與switch表達式相匹配的case常量,則不執行任何語句。各個case標號出現次序不影響執行結果。任意兩個case后的常量表達式取值必須不同,否則將導致沖突。case標號只起標記的作用。在執行switch語句時,根據switch表達式的值找到匹配的入口標號,在執行完一個case標號后面的語句后,就從此標號開始執行下去,不再進行判斷。因此,一般情況下,在執行一個case子句后,應當用break語句使流程跳出switch結構。最后一個case子句(今為default子句)中可不加break語句。在case子句中雖然包含了一個以上執行語句,但可以不必用花括號括起來,會自動順序執行本case標號后面所有的語句。當然加上花括號也可以。break語句為可選項,用于終止

switch

中的一個case,是否需要視具體情形而定。若某幾個case子句后無break語句,則這幾個case子句和隨后緊跟的第一個帶break語句的case子句共用一組執行語句。1716:12例3.9:給定一個百分制成績,請根據百分制成績輸出其對應的等級。轉換關系如下:90分及以上為'A',80~89為'B',70~79為'C',60~69為'D',60分以下為'E'。

輸入:一個百分制成績(0~100的整數)。

輸出:成績對應的等級。#include<iostream>usingnamespacestd;intmain(){ intscore; scanf("%d",&score); switch(score/10) { case10: case9:printf("A\n");break; case8:printf("B\n");break; case7:printf("C\n");break; case6:printf("D\n");break; default:printf("E\n"); } return0;}1816:12例3.10:輸入三個整數,輸出最大數和最小數。

輸入:輸入三個整數a、b、c。

輸出:三個數中的最大數和最小數(以空格分隔)。#include<iostream>usingnamespacestd;intmain(){ inta,b,c,max,min;cin>>a>>b>>c; if(a>b){ max=a; min=b; } else{ max=b; min=a; }if(max<c)max=c;elseif(min>c)min=c;cout<<max<<""<<min;return0;}1916:12例3.11:輸入運算數和四則運算符,輸出計算結果。

輸入:輸入兩個浮點數和一個操作符。

輸出:輸出計算結果(精度為2)。#include<cstdio>intmain(){ doublea,b; charc; scanf("%lf%lf%c",&a,&b,&c);

switch(c)

{ case'+':printf("%.2lf\n",a+b);break;

case'-':printf("%.2lf\n",a-b);break;

cas

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論