c《面向?qū)ο蟪绦蛟O(shè)計》第三章.ppt
《c《面向?qū)ο蟪绦蛟O(shè)計》第三章.ppt》由會員分享,可在線閱讀,更多相關(guān)《c《面向?qū)ο蟪绦蛟O(shè)計》第三章.ppt(100頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、2020/7/27,北京科技大學計算機系,-1-,C++大學基礎(chǔ)教程,第3章 C++控制語句 北京科技大學計算機系,2020/7/27,北京科技大學計算機系,-2-,用計算機解決實際問題,首先要分析問題,設(shè)計合適的算法,然后編程實現(xiàn)算法。,2020/7/27,北京科技大學計算機系,-3-,第3章 過程化語句,3.0 算法的基本控制結(jié)構(gòu): 算法,基本控制結(jié)構(gòu),基本控制語句 3.1 順序結(jié)構(gòu)程序設(shè)計 3.2 if選擇語句 語句格式,IF嵌套,考點說明 3.3 switch選擇語句 語句格式和執(zhí)行順序,例子,考點說明 3.4 循環(huán)語句 使用場合,基本概念,格式 轉(zhuǎn)向語句 3.5 循環(huán)嵌套 國際象棋
2、,例2 3.6 應用舉例 素數(shù),按位翻轉(zhuǎn),小球落地(不要求), 小牛家族,最大公約數(shù),階乘 課堂練習,總結(jié)和作業(yè),2020/7/27,北京科技大學計算機系,-4-,算法,什么是算法 為解決某一應用問題而采用的解題步驟 算法 1、計算機執(zhí)行的操作 2、這些操作的順序,,,2020/7/27,北京科技大學計算機系,-5-,算法,算法的描述方式 用自然語言描述算法 用流程圖描述算法 用N-S結(jié)構(gòu)圖描述算法,例如:輸出兩個數(shù)中的最大數(shù),,2020/7/27,北京科技大學計算機系,-6-,用自然語言描述算法,第一步:輸入x和y的值 第二步:比較x和y的值,如果x大于y,則輸出x的值,否則輸
3、出y的值。,易于理解,但冗長,不夠精確,難于描述復雜算法。,例如當描述“輸出10個數(shù)中最大數(shù)”的算法時,會冗長、難于理解,,2020/7/27,北京科技大學計算機系,-7-,用流程圖描述算法,用流程圖描述算法,,起止框,輸入/輸出框,判斷框,處理框,流程線,,,2020/7/27,北京科技大學計算機系,-8-,3.1 算法的基本控制結(jié)構(gòu),流程圖 開始/結(jié)束 執(zhí)行 判斷 聯(lián)系,,,,,,2020/7/27,北京科技大學計算機系,-9-,用N-S結(jié)構(gòu)圖描述算法,用N-S結(jié)構(gòu)圖描述的算法,,,2020/7/27,北京科技大學計算機系,-10-,3.1 算法的基本控制結(jié)構(gòu),程序的三種基本控制
4、結(jié)構(gòu) 小結(jié) (1)順序結(jié)構(gòu) (2)選擇結(jié)構(gòu) (3)循環(huán)結(jié)構(gòu),已經(jīng)證明,任何復雜的問題都可以三種基本算法結(jié)構(gòu)來描述:順序、選擇、循環(huán)。因此用計算機語句描述的程序也包含三種基本結(jié)構(gòu)。,,2020/7/27,北京科技大學計算機系,-11-,順序結(jié)構(gòu)流程圖,A,B,,,,,,,,A,B可以是一條語句,也可以是一條復合語句,,C++中默認的語句執(zhí)行次序為:順序執(zhí)行。,,2020/7/27,北京科技大學計算機系,-12-,分支結(jié)構(gòu)流程圖,,,2020/7/27,北京科技大學計算機系,-13-,循環(huán)結(jié)構(gòu)流程圖,,2020/7/27,北京科技大學計算機系,-14-,總結(jié)以上三種結(jié)構(gòu)有以下的共同特點: )只有一
5、個入口。 )只有一個出口。 )結(jié)構(gòu)內(nèi)的每一個部分都有機會被執(zhí)行到 )結(jié)構(gòu)內(nèi)不存在死循環(huán)。,,2020/7/27,北京科技大學計算機系,-15-,3.1 算法的基本控制結(jié)構(gòu),流程控制語句 選擇語句:if..else、switch 選擇結(jié)構(gòu) 循環(huán)語句: while、for 、do..while 循環(huán)結(jié)構(gòu) 轉(zhuǎn)向語句:break、continue,,2020/7/27,北京科技大學計算機系,-16-,順序結(jié)構(gòu)程序是按照語句的先后順序依次執(zhí)行。一般而言,順序結(jié)構(gòu)的算法中應包括幾個基本操作步驟。各操作步驟的邏輯順序關(guān)系如圖3-1所示。,,圖3-1 順序程序的一般算法,,,2020/7/27,北京科
6、技大學計算機系,-17-,【例3-2】數(shù)據(jù)交換。從鍵盤輸入x、y的值,輸出交換以后的值。,#include using namespace std; int main( ) int x,y,c; cout xy; cout < 7、) c=a;a=b;b=c; 2. 雙分支 if (表達式) 語句1 else 語句2 例:if (a=b) cout<
8、的那些年,但不包括能被100整除而不能被400整除的年,if ((year % 4 == 0 void main() int year; cinyear; if ((year % 4 == 0 ,,,2020/7/27,北京科技大學計算機系,-21-,,,2020/7/27,北京科技大學計算機系,-22-,例子:輸出學生的成績,#include using namespace std; void main() int x; cinx; if(x=90) cout=80) cout=60) cout<<“合格”< 9、格”< 10、ndl; else cout<
11、非0為真,結(jié)果0為假。 思考執(zhí)行下面語句后,變量b的值是多少? a = 10; b = 30; if (a = 0) b = 15; else b = 20 ; if (a = 1) b = 15; else b = 20 ; if (a == 1) b = 15; else b = 20 ; 注意: 賦值表達式 a = 1與關(guān)系表達式 a = = 1 的區(qū)別。 表達式的值為0時語句的執(zhí)行情況。,注意:,,,2020/7/27,北京科技大學計算機系,-28-,3.2 if選擇語句,3 注意:二義性(出現(xiàn)嵌套) int x=-1; if (x0) if (x<50) cout<<“x i 12、s <50”endl; else cout<<“x is <=0”< 13、算機系,-30-, if (c=50) cout 150n; if (c=50) cout << 50<=c<=100n; else cout << c<50n;,例如:, if (c=50) cout <<50<=c<=100n;,與哪個if 配對?,,,,2020/7/27,北京科技大學計算機系,-31-,再例如:,if(ab) //1 if(ac) //2 if(ad) flag=1; //3 else flag=2; //4 else flag=3; //5,問題:第4 行和第5 行的 else 和哪一個 if 相匹配? 分析:匹配方案可以有很多種:(2-4,1-5)、( 14、3-4, 2-5),(1-4,),匹配規(guī)則:在嵌套的ifelse語句中,else總是與上面的、離它最近的、在同一復合語句中還沒有配對的if配對。,,,2020/7/27,北京科技大學計算機系,-32-,等價于:, if (ab) if (ac) if (ad) flag=1; else flag=2; else flag=3;, if (ab) if (ac) if (ad) flag=1; else flag=2; else flag=3;,flag=3的條件:,flag=3 的條件:,當 cab 時,當 a b 時,,2020/7/27,北京科技大學計算機系,-33-,一般形式 15、switch (表達式) case 常量表達式 1:語句1 case 常量表達式 2:語句2 case 常量表達式 n:語句n default : 語句n+1 ,switch 語句,,,,,執(zhí)行順序 以case中的常量表達式值為入口標號,由此開始順序執(zhí)行。因此,每個獨立的case分支最后應該加break語句,跳出整個switch語句。,,,2020/7/27,北京科技大學計算機系,-34-,,2020/7/27,北京科技大學計算機系,-35-,例子:輸出學生的成績,int x; cinx; switch(x/10) case 10: case 9:cout<<“ 16、優(yōu)秀”< 17、int v1=0,v2=0,v3=0,v4=0,k; cin k; switch(k) default:v4++; case 1:v1++; case 2:v3++; case 3:v2++; ,v1=1, v2=1, v3=1, v4=1,,2020/7/27,北京科技大學計算機系,-38-,問題1:如何根據(jù)收入,確定一個人的納稅比例及納稅額?,當一個公司有多名員工時,如何計算每個人的納稅比例及納稅額?,提出問題:,C++語言:循環(huán)語句,?,?,問題2 :如何根據(jù)學生的分數(shù)判斷是否及格?,如何根據(jù)全班學生的分數(shù),分別判斷他們是否及格?,,,2020/7/27,北京科技大學計算機系,-3 18、9-,#include #include using namespace std; void main() cout< 19、in() int i=2; cout< 20、,3.4 循環(huán)語句,三種基本語法 1、 while 語句 格式和順序,例子 2、 dowhile 語句格式和順序,對比,例子 3、 for 語句 格式和順序,例子,說明 三種語句的應用區(qū)別,,2020/7/27,北京科技大學計算機系,-43-,3.4 循環(huán)語句,while循環(huán)語句,while(表達式) 循環(huán)體語句;,,2020/7/27,北京科技大學計算機系,-44-,例1:編程循環(huán)輸出1-9這9個數(shù)字?,#include using namespace std; void main() int i=1; while ( ) cout<<“循 21、環(huán)結(jié)束”< 22、不執(zhí)行 (例如當i的初值=100) 。 在循環(huán)體中必須有使循環(huán)趨向結(jié)束的操作,否則循環(huán)將無限進行(死循環(huán))。 在循環(huán)體中,語句的先后位置必須符合邏輯,否則會影響運算結(jié)果。,思考程序段的輸出? while (i<=99) i+=2; sum=sum+i; ,運行后,輸出: sum=2600 原因是什么?,,,2020/7/27,北京科技大學計算機系,-47-,其他的while 語句形式,while (0) .... 由于表達式恒等于0,所以循環(huán)體永遠也不會執(zhí)行,是一個邏輯錯誤的語句,while (1) .... 由于表達式恒等于1,所以不可能通過循環(huán)控制條件來結(jié)束循環(huán)體的執(zhí)行,即死循 23、環(huán)。 為了保證循環(huán)正常運行,應該特別注意: 循環(huán)控制條件的描述 控制條件的初始狀態(tài)(初始值) 循環(huán)體內(nèi)部對控制條件的影響,,,2020/7/27,北京科技大學計算機系,-48-,例3:打印可視字符,#include using namespace std; void main() unsigned char ch=32; while(ch<128) cout<<(int)ch< 24、k=1,sum=0,n; cout0):; cinn; while( ) if(n0) cout< 25、行循環(huán)體一次; While語句有可能一次也不執(zhí)行循環(huán)體,,,2020/7/27,北京科技大學計算機系,-52-,對比下列程序:,程序1: #include void main( ) int i, sum(0); cini; while(i<=10) sum+=i; i++; cout< 26、-,#include #include using namespace std; void main() int i=2; cout< 27、 main() int k=1,sum=0,n; cout0):; cinn; while(k0) cout< 28、出1-9這9個數(shù)字?,#include using namespace std; void main() for (int i=1; i<10; i++) cout<
29、 cout< 30、時應在for語句之前給循環(huán)變量賦初值。如果省略表達式2,即不判斷循環(huán)條件,循環(huán)無終止地進行下去。省略表達式3時,此時程序設(shè)計者應另外設(shè)法保證循環(huán)能正常結(jié)束。 2,for后一對圓括號中的表達式可以是任意有效的C++語言表達式。例如: for(sum=0,i=1;i<=100;sum=sum+i,i++) ,,,2020/7/27,北京科技大學計算機系,-60-,省略for語句的表達式, 表達式1、2、3全省略,即: for ( ; ; ) 就等同于:while (1),會無限循環(huán)(死循環(huán)),注意:在省略某個表達式時,應在適當位置進行循環(huán)控制的必要操作,以保證循環(huán)的正確執(zhí)行, 省略表達式1 31、和表達式3,即: for(;表達式2;) 就等同于:while( 表達式2 ) 省略表達式2,即: for(表達式1; ;表達式3) 就等同于:表達式1; while(1)表達式3;,,,2020/7/27,北京科技大學計算機系,-61-,例如:, i=1; for ( ; i<=100; i++) sum+=i;, for (i=1; ; i++) if(i100) for (i=1; i100) i++; ,,,2020/7/27,北京科技大學計算機系,-62-,例4:判斷輸出結(jié)果?,#include using namespace std; void main() 32、 for(int i=0,j=10,k=0; i 33、tch和循環(huán)結(jié)構(gòu),用在循環(huán)退出本層循環(huán) 2、continue語句 只能用在循環(huán)結(jié)構(gòu)中,表示退出本次循環(huán),,,2020/7/27,北京科技大學計算機系,-65-,3.4.4 轉(zhuǎn)向語句break,用途: 常用在while、do-while、for和switch語句中,用來跳出循環(huán)或switch語句。,,,2020/7/27,北京科技大學計算機系,-66-,,5.5.2 循環(huán)中break的應用,,break;,,while語句,,break;,,,,do-while語句,,break;,,,for語句,,,,,2020/7/27,北京科技大學計算機系,-67-,例如:, int x,n=0,s=0 34、; while (nx; if (x<0) break; s+=x; n++; ;, int x,n=0,s=0; do cin x; if (x<0) break; s+=x; n++; while (n<10);, for (n=0,s=0; nx; if (x<0) break; s+=x; ,,,2020/7/27,北京科技大學計算機系,-68-,例1:判斷輸出結(jié)果?,#include using namespace std; void main() int sum=0; for (int i=1;i<10;i++) if (i % 3==0) break; s 35、um+=i; cout< 36、 (x<0) continue; s+=x; n++; ;, int x,n=0,s=0; do cin x; if (x<0) continue; s+=x; n++; while (n<10);, for (n=0,s=0; nx; if (x<0) continue; s+=x; ,,,2020/7/27,北京科技大學計算機系,-72-,例1:判斷輸出結(jié)果?,#include using namespace std; void main() int sum=0; for (int i=1;i<10;i++) if (i % 3==0) continue; sum+=i 37、; cout< 38、6 7,if ((i+j)%2==0),,2020/7/27,北京科技大學計算機系,-74-,3.3.5 循環(huán)嵌套,【例3-15】打印由數(shù)字組成的如下所示的金字塔圖案。 1 222 33333 4444444 555555555 66666666666 7777777777777 888888888888888 99999999999999999 分析:打印圖案一般可由多重循環(huán)實現(xiàn),外循環(huán)用來控制打印的行數(shù),內(nèi)循環(huán)控制每行的空格數(shù)和字符個數(shù)。實現(xiàn)打印上金字塔圖案的程序如下。,,,2020/7/27,北京科技大學計算機系,-75-,注意:,#include 39、 using namespace std; int main( ) char c=48; int i, k, j; for(i=1; ;i++) // 外循環(huán)控制打印行數(shù) for(k=1; ;k++) //每行起始打印位置 cout << ; for (j= 1 ; ; j++)//內(nèi)循環(huán)控制打印個數(shù) cout <<(char)(c+i); //打印內(nèi)容數(shù)字字符19 cout << n; // 換行 return 0; ,,,i<=9,k<=10-i,j<= 2* i- 1,2020/7/27,北京科技大學計算機系,-76-,注意:,while、do-while、for 40、循環(huán)語句可以并列,也可以相互嵌套,但要層次清楚,不能出現(xiàn)交叉。 多重循環(huán)程序執(zhí)行時,外層循環(huán)每執(zhí)行一次,內(nèi)層循環(huán)都需要循環(huán)執(zhí)行多次。 例如:,for(a=1;a<=10;a++) for (b=0;b<=5;b++) ,外循環(huán)執(zhí)行了10次,內(nèi)循環(huán)執(zhí)行6次 循環(huán)正常結(jié)束時,內(nèi)循環(huán)執(zhí)行了106=60次,,2020/7/27,北京科技大學計算機系,-77-,3.6 應用舉例1,任意輸入一個整數(shù),判斷是否是素數(shù)? 問題:什么是素數(shù)?,,,2020/7/27,北京科技大學計算機系,-78-,#include using namespace std; void main() int n,i; 41、cinn; for (i=2;i 42、京科技大學計算機系,-81-,#include using namespace std; void main() int i, n, result=0; coutn; cout<<按位翻轉(zhuǎn)的結(jié)果為:; while (n!=0) i =n % 10; result=result*10+i; n /= 10; cout< 43、 0 時結(jié)束循環(huán) 此時的m為最大公約數(shù),,,2020/7/27,北京科技大學計算機系,-83-,算法和程序:,#include using namespace std; int main( ) int m,n,r; cin mn; do r=m%n; m=n; n=r; while(r!=0); cout << 最大公約數(shù)是: << m < 44、米?,,,,,,,,,,2020/7/27,北京科技大學計算機系,-85-,#include using namespace std; void main() int n=10; double height=100; double sum=height; for (int i=1;i 45、1; f(2)=1; f(3)=1; f(n)=f(n-1)+f(n-3);,,,2020/7/27,北京科技大學計算機系,-87-,#include using namespace std; void main() int n; long a=1, b=1, c=1, temp; cout n; for(int i=4; i<=n; i++) temp=a+c; a=b; b=c; c=temp; cout << c < 46、乘與求累加的運算處理過程類似,只要將“+”變?yōu)椤?”。,設(shè)置: 乘數(shù)i ,初值為1,終值為n(n是循環(huán)控制終值,需要從鍵盤輸入) 累乘器 p ,每次循環(huán)令p = p*i,,,2020/7/27,北京科技大學計算機系,-89-,程序:,#include using namespace std; int main( ) int i,n,p=1; cout n; for (i=1; i<=n; i++) p = p * i; cout << n << != << p << n ; return 0; ,思考: 如何輸出1!, 2!, , n! ? 如何求s =1!+ 2!+ + n! ?,,202 47、0/7/27,北京科技大學計算機系,-90-,總結(jié),三種基本結(jié)構(gòu):順序、選擇和循環(huán) 流程圖和偽碼,幫助我們設(shè)計算法、完善算法,增強算法的可讀性,,2020/7/27,北京科技大學計算機系,-91-,作業(yè),P61 9,10,11,,2020/7/27,北京科技大學計算機系,-92-,課堂練習,選擇題 例題1:如果有以下語句: int a,b; char m,n; cinabmn; 則下列輸入數(shù)據(jù)的方式中正確的是( )。 A10,20,X,Y B1020 XY C10 20 X Y D10、20、X、Y,C,用cin輸入時,空格和回車鍵均可作為輸入字符之間的分隔符,逗號不能作為分隔 48、符。字符型變量只能容納一個字符。,,,2020/7/27,北京科技大學計算機系,-93-,課堂練習,選擇題 以下不正確的語句是( ) 。 Aif(xy); Bif(x=y) if(a5) a-=1; b+=1; else a+=1; b-=1; cout<<”a=”<
49、;i++)表示無限循環(huán) Bfor(;;)表示無限循環(huán) Cfor()也表示無限循環(huán) Dwhile(1)表示無限循環(huán),C,for循環(huán)語句中的表達式可以省略,但分號不可省略。,,,2020/7/27,北京科技大學計算機系,-96-,課堂練習,下面循環(huán)體的執(zhí)行次數(shù)為 ( )。 #include void main() int a,b; for(a=0,b=5;a<=b+1;a+=2,b--) cout<
50、 0 5 2 4 4 3 6 2,,,,2020/7/27,北京科技大學計算機系,-97-,課堂練習,有以下程序段: int n=0; while(n=1)n++; while循環(huán)執(zhí)行次數(shù)是_____ _____ 。,無限次,下面程序運行結(jié)束后,k的值為_____ _____ 。 #include void main() int i,j,k; for(i=0,j=10;i<=j;i++,j--) k=i+j; cout< 51、是_____ _____ 。,無限次,下面程序運行結(jié)束后,k的值為_____ _____ 。 #include void main() int i,j,k; for(i=0,j=10;i<=j;i++,j--) k=i+j; count<
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 市教育局冬季運動會安全工作預案
- 2024年秋季《思想道德與法治》大作業(yè)及答案3套試卷
- 2024年教師年度考核表個人工作總結(jié)(可編輯)
- 2024年xx村兩委涉案資金退還保證書
- 2024年憲法宣傳周活動總結(jié)+在機關(guān)“弘揚憲法精神推動發(fā)改工作高質(zhì)量發(fā)展”專題宣講報告會上的講話
- 2024年XX村合作社年報總結(jié)
- 2024-2025年秋季第一學期初中歷史上冊教研組工作總結(jié)
- 2024年小學高級教師年終工作總結(jié)匯報
- 2024-2025年秋季第一學期初中物理上冊教研組工作總結(jié)
- 2024年xx鎮(zhèn)交通年度總結(jié)
- 2024-2025年秋季第一學期小學語文教師工作總結(jié)
- 2024年XX村陳規(guī)陋習整治報告
- 2025年學校元旦迎新盛典活動策劃方案
- 2024年學校周邊安全隱患自查報告
- 2024年XX鎮(zhèn)農(nóng)村規(guī)劃管控述職報告