




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第三章C++程序的流程控制本章目標3.掌握for循環和do/while循環結構的運用。4.掌握switch多分選擇結構5.理解break和contiue在程序控制中的作用。1.掌握一種選擇結構(if/else)2.掌握一種循環結構(while)§4.1C++語句和程序結構一、C++程序結構·每一個源文件由預編譯命令和若干函數組成(對每個文件分別編譯,然后連接)·一般地,一個C++程序可由多個源文件組成·每一個函數由說明部分和語句部分組成C++程序結構:C++程序源程序文件1源程序文件i源程序文件n預編譯命令函數1函數n說明部分執行部分(語句)………二、C++程序語句概述1、說明語句:
對數據結構的定義和對變量的定義等。2、控制語句:完成一定控制功能的語句。C++程序語句可分為六大類:
if()~else~(條件)
for()~(循環)
while()~(循環)
do~while(循環)
switch(多分支選擇)
包括:5、空語句:
只由一個分號所構成的語句。3、函數調用語句:如:cout<<“…”;
sin(x)4、表達式語句:在任一表達式的后面加上分號如:i=i+1;
j++;如:;6.、復合語句(語句體):由花括號把一個或多個語句括起來后構成一個語句。用{}括起來的一系列語句。如:{z=x+y;t=z/100;cout<<t;
}三、程序的三種基本結構從結構化程序設計角度出發,程序只有三種結構:·順序結構·選擇結構·循環結構1.順序結構表示ABAB先執行A,再執行B.2.選擇結構表示為ABPTFBTPFA存在某條件P,若P為真,則執行A,否則執行B。另一種選擇結構––多分支結構.KK=K1A1A2AiAn……K=K2K=Kn3.循環結構表示為PFTAAP為T(1)
當型結構當P條件成立時(T),反復執行A,直到P為“假”時才停止循環.有兩種結構:當型和直到型(2)
直到型APTFA直到P為F先執行A,再判斷P,若為F,再執行A,如此反復,直到P為F.
已證明:上述三種結構組成的程序可以解決全部的問題,所以任何一種高級語言都具備上述三種結構。§4.3選擇結構語句一、if的三種形式功能:
當表達式值非0時,執行語句體A,否則不執行語句體A.形式1if(表達式)語句體A;表達式語句體A=0
0例如:if(x>1.5)
y+=5;
y=x**+5*x;其流程圖:形式2if(表達式)功能:
表達式為非0,執行語句體A
表達式為0,執行語句體Belse語句體B;語句體A;表達式語句體A語句體B
0=0例:if(x>y) cout<<x; else
cout<<y;形式3if(表達式1)elseif(表達式2)elseif(表達式3)……elseif(表達式n)else語句體1;語句體2;語句體3;語句體n;語句體n+1;流程:表達1表達2表達3表達n語句體2語句體3語句體n語句n+1語句體1……
0=0=0
0
0
0如:if(3)cout<<"o.k";if('a')…
1.表達式可以是邏輯、關系,甚至是算術表達式。
2.語句必須以分號結束
3.若語句不止一條,則必須用{}括起來。在{}外可以不用分號.二、注意的問題:#include<iostream.h>
main()
{floata,b,t;
cin>>a>>b;
if(a>b)
{t=a;a=b;b=t;}
cout<<a<<<<“,”<<b<<endl;
}例1
輸入兩個實數,按代數值由小到大次序輸出這兩個數。
3.6,–3.2
–3.2,3.6運行情況如下:例2
輸入三個數,按大小順序輸出。#include<iostrem.h>
main()
{floata,b,c,t;
cin>>a>>b>>c;
if(a>b)
{t=a;a=b;b=t;}
if(a>c)
{t=a;a=c;c=t;}
if(b>c)
{t=b;b=c;c=t;}
cout<<a<<“,”<<b<<“,”<<c<<endl;
}運行情況如下:3,7,1
1,3,7三、if語句的嵌套if(表達式1)內嵌ifelse內嵌注意:else與最近的if配對.一般形式在上述形式的if語句中,又可以是if語句–––稱為嵌套。if(表達式2)語句1if(表達式3)語句3else語句2else語句4例:if()if()語句2else語句3if(){if()語句1}else…所以:必要時加{}.if()語句1else例3
有一函數:y=–1(x<0)0(x=0)1(x>0)編一程序,輸入一個x值,輸出y值。有以下幾種寫法,請判斷哪些是正確的?程序2:將程序1的if語句改為:
//exp2.cpp
#include<iostream.h>
main()
{intx,y;
cin>>x;
if(x>=0)
if(x>0)
y=1;
else
y=0;
else
y=-1;
cout<<x<<y;
}
程序1:
//exp1.cpp
#include<iostream.h>
main()
{intx,y;
cin>>x;
if(x<0)
y=–1;
elseif(x==0)
y=0;
else
y=1;
cout<<x<<y;
}程序4:將程序1的if語句改為://exp4.cpp#include<iostream.h>main(){intx,y;cin>>x;
y=0;if(x>=0)if(x>0)y=1;elsey=-1;cout<<x<<y;}
程序3:將程序1的if語句改為://exp3.cpp#include<iostream.h>main(){intx,y;cin>>x;
y=-1;if(x!=0)if(x>0)y=1;elsey=0;cout<<x<<y;
}1.程序1和程序2是正確的。
它們代表的函數為:2.程序3和程序4是錯誤的。
它們代表的函數為:y=
0(x<0)–1(x=0)1(x>0)y=–1(x<0)0(x=0)1(x>0)結論:四、條件運算符
C++語言提供了一個簡單的條件賦值語句或條件表達式。問題:
當判斷條件不論是“真”是“假”,均給同一變量賦值時。簡化條件語句運算符書寫方式:?:
屬三目運算符。功能:
先判表達式1,若非0,則值為表達式2的值,否則為表達式3的值。一般形式:表達式1?表達式2:表達式3
max=a>b?a:b;當a>b.max
a.否則max
b注意:1.
條件運算符優先于賦值運算符.
例:max=(a>b?a:b)可去掉()
2.
條件運算符低于關系運算符和算術運算符。
3.
條件運算符結合性為從右至左。例:max=a>b?a:b+1
max=a>b?a:(b+1)并不是
max=(a>b?a:b)+1如:a>b?a:c>d?c:d
相當于a>b?a:(c>d?c:d)4.
條件表達式不能取代一般的if語句,只有當if的兩個分支為給同一變量賦值時才可替代if.if(a>b)
cout<<a;else
cout<<b;可寫成:cout<<a>b?a:b;如:5.
表達式1、表達式2、表達式3的類型可以不同。
#include<iostream.h>
main()
{charch;
cin>>ch;
ch=(ch>='A'&&ch<='Z')?(ch+32):ch;
cout<<ch;
}例4
輸入一個字符,判別它是否大寫字母,如果是,
將它轉換成小寫字母;如果不是,不轉換。然后輸出最后得到的字符。運行結果如下:
A
a
五、開關語句(switch多分支選擇語句)用if或if/else或它們的嵌套也可使程序實現多路分支,但容易出現下面的問題:
可讀性差
破壞結構解決問題的方法:采用switch語句。
switch(變量){case常量表達式1:語句體1;<<break;>>case常量表達式2:語句體2;
<<break;>>
case常量表達式n:語句體n;
<<break;>>default:語句體(n+1)}一般形式:
根據表達式的取值,判斷其與哪一個常量表達式相等。如=表達式i,則自語句i開始執行,直到語句n+1止。
若與所有常量表達式值不相等,則從default后的語句開始執行。功能:注:default可有可無。例4.5運輸公司對用戶計算運費。路程(s)越遠,每公里運費越低。標準如下:s<250km沒有折扣250≤s<5002%折扣500≤s<10005%折扣1000≤s<20008%折扣2000≤s<300010%折扣3000≤s15%折扣設每公里每噸貨物的基本運費為p,貨物重為w,距離為s,折扣為d,則總運費f的計算公式為:f=p*w*s*(1-d/100.0)
分析折扣變化的規律性:折扣的“變化點”都是250的倍數,在橫軸上加一種坐標c,c的值為s/250。c代表250的倍數。c<1,無折扣;1≤c<2,折扣d=2%;2≤c<4,d=5%;4≤c<8,d=8%;8≤c<12,d=10%;c≥12,d=15%。§5.5程序舉例(續)#include<stdio.h>
voidmain()
{ intc,s;
floatp,w,d,f;
cout<<“輸入運費單價P,重量w和距離”;
cin>>p>>w>>s;
c=s/250;
switch(c){
case0:d=0;break;
case1:d=2;break;
case2:case3:d=5;break;
case4:case5:case6:case7:d=8;break;
case8:case9:case10:
case11:d=10;break;
default:d=15;}
f=p*w*s*(1-d/100.0);
cout<<“運費單價”<<p<<‘\t’<<“重量=”<<w<<‘\t’<<s<<‘\n’;
cout.precision(2);
cout<<“運費”<<f<<‘\n’;}例:如用條件語句實現,關健程序如下:if(s<250)d=0;elseif(s<500)d=2;elseif(s<1000)d=5;elseif(s<2000)d=8;elseif(s<3000)d=10;elsed=15;§4.3循環結構語句1.形式:while(表達式)
語句體S2.執行過程:
先判斷表達式的值。若
0.則執行其后面的語句體,否則while執行完畢。專門的當型循環語句––while語句3.
流程圖:表達式語句
0=0下一語句例如:inti=0,s=0;
while(i<100)
{i++;s+=i;}cout<<“s=”<<s<<‘\n’;語句中應有使表達式=0的語句。否則會出現無限循環–––"死"循環。若while后面的語句為復合語句,必須加{}語句有可能一次也不執行注:注意前置和后置運算間的差異直到型循環語句:dowhile語句表達式語句
0=0下一語句例如:voidmain(void){floatx0,x1,a;cout<<“輸入一個正數”;
cin>>a;if(a<0)cout<<a<<“不能開平方\n”;else{x1=a/2;do{x0=x1;x1=(x0+a/x0)/2;}while(fabs(x1-x0)>1e-5);cout<<a<<“平方根等于<<x1<<‘/n’;}}
一、語法結構for(初始表達式1;條件表達式2;循環表達式3)§4.3.3for循環語句體(S)二、執行過程for語句的執行過程:
(1)先求解表達式1。
(2)求解表達式2,若其值為真(值為非0),則執行for語句中指定的內嵌語句,然后執行下面第(3)步。若為假(值為0),則結束循環,轉到第(5)步。
(3)求解表達式3。
(4)轉回上面第(2)步驟繼續執行。
(5)循環結束,執行for語句下面的一個語句
表達式2?執行語句成立不成立執行for循環之后的語句執行表達式3執行表達式1表達式2?執行語句成立不成立執行for循環之后的語句執行表達式3執行表達式1循環初始條件循環控制條件循環體for語句等價于下列語句:表達式1;while(表達式2){語句;表達式3;}
for語句最簡單的應用形式也就是最易理解的如下形式:
for(循環變量賦初值;循環條件;循環變量增值)說明:從for語句的執行過程可以看出,首先判斷循環條件,如果滿足循環條件,則執行循環體,所以循環體有可能一次也不執行,也有可能執行若干次。該循環語句中的三個表達式可以是任何表達式,當然也可以是逗號表達式。如:for(j=a+b+c,l=k*i;i;i--){}(3)三個表達式均可以省略,但兩個分號不可省。如:for(;;)輸入一行字符,并按輸入的順序次序依次輸出該行字符#include<iostrem.h>
voidmain(void)
{charc;
cout<<“輸入一行字符串!\n”;
cin.get(c);
for(;c!=‘\n’;){
cout<<c;
cin.get(c);}cout<<c;
}四、實例:三種循環的比較(1)三種循環都可以用來處理同一問題,一般情況下它們可以互相代替。(2)在while循環和do-while循環中,只在while后面的括號內指定循環條件,因此為了使循環能正常結束,應在循環體中包含使循環趨于結束的語句(如i++,或i=i+1等)。for循環可以在表達式3中包含使循環趨于結束的操作,甚至可以將循環體中的操作全部放到表達式3中。因此for語句的功能更強,凡用while循環能完成的,用for循環都能實現。
(3)用while和do-while循環時,循環變量初始化的操作應在while和do-while語句之前完成。而for語句可以在表達式1中實現循環變量的初始化。(4)用得最多的循環語句是for循環。§4.3.5
循環的嵌套及其應用例1:while(){…
while() {…}}一、for循環
while循環do/while循環三種結構可以互相嵌套例2:for(;<條件表達式>;) {… while()
{} do {}
while(); … }為正確的嵌套。但:while(){…while(){}…}for(;;){for(;;){…}}不能理解為正確的形式。要注意語句的包含關系。§4.4控制執行順序的語句一、break語句適用范圍:
while循環for循環do/while循環switch分支作用:無條件地跳出該結構例:
計算圓的面積
r2,半徑取1,2,3,4…,當面積>100時結束。程序:
floatpi=3.14159,area;
for(r=1;r<=10;r++)
{area=pirr;
if(area>100)
break;
cout<<"r=“<<r<<“,area=“<<area;
}
cout<<"brokeat“<<endl;
cout<<"r=“<<r<<“,area=“<<area<<endl;
}#include<iostream.h>main(){intr;第三章C++語言的流程控制二、continue語句適用范圍:while循環
for循環
do/while循環作用:結束本次循環,繼續下一次循環第三章C++語言的流程控制程序一:使用continue語句:
#include<iostream.h>
voidmain(void){inti;for(i=100;i++<200;)
{if(n%3==0)/*n能被3整除*/
continue;cout<<i<<“”;
}}例:
編寫程序,打印100~200中不能被3整除的數。程序二:不用continue語句而用break語句:
#include<iostream.h>
voidmain(void){inti;for(i=100;i++<200;)
{if(n%3==0)/*n能被3整除*/
break;cout<<i<<“”;
}}三、正確認識break和continue兩種觀點:1.break和continue語句有可能破壞程序的結構化。2.break和continue語句在某種情況下可提高程序的速度不使用break和continue也可使程序達到目的。建議:辯證地對待break和continue.第三章C++語言的流程控制4.4.3、goto語句和標號1、標號,格式:label:S2、goto語句,格式:
goto
語句標號;語句標號用標識符表示,它的定名規則與變量名相同,即由字母、數字和下劃線組成,其第一個字符必須為字母或下劃線。
例如:gotolabel_1;合法;goto123;不合法.4.4.4:exit()和abort()函數兩個都是C++的庫函數,功能:終止程序執行。1、exit()函數格式:exit(<表達式>);功能:無條件終止程序的執行,并把控制權返回給操作系統。并做收尾工作。表達式的值:0表示正常退出,其它的整數值作為異常退出。1、abort()函數格式:abort();功能:直接終止程序的執行,系統不做收尾工作。括號必須為空。例4.14求Fibonacci數列前40個數。
#include<iostream.h>
#include<iomanip.h>
voidmain()
{longf1=1,f2=1,f3;
cout<<setw(12)<<f1<<setw(12)<<f2;
for(i=3;i<=40;i++)
{cout<<setw(12)<<f3;
f1=f2;f2=f3;
if(i%4==0)cout<<‘\n’;
}
cout<<‘\n’;
}
運行結果:
11235
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度浙江省護師類之主管護師通關試題庫(有答案)
- 2024年度浙江省二級造價工程師之建設工程造價管理基礎知識自測模擬預測題庫
- 美麗的花公雞課件
- DB43-T 2883-2023 切花百合種植技術規程
- 介紹新加坡的經濟
- 桌面消防演練
- 高考生物核心考點考前沖刺 發酵工程(含解析)
- 人工公務員面試題及答案
- java對外接口面試題及答案
- 湖北移動面試題及答案
- 銀行安全用卡培訓課件
- 改善患者就醫體驗服務課件
- (高清版)DB50∕T 689-2016 合成鉆石鑒定技術規范
- 2025-2030中國智慧社區行業市場深度調研及前景趨勢與投資研究報告
- 初中生安全用電課件
- 2025年廣東省地理初中學業水平模擬練習卷(含答案)
- 心率測定-教學設計-八年級體育健康教育
- 2025年ps cs5操作試題及答案
- 2025年太陽能空調系統合同
- 醫院護理人文關懷實踐規范專家共識課件
- 2025年中國國投高新產業投資集團招聘筆試參考題庫含答案解析
評論
0/150
提交評論