c《面向?qū)ο蟪绦蛟O(shè)計》第三章.ppt
《c《面向?qū)ο蟪绦蛟O(shè)計》第三章.ppt》由會員分享,可在線閱讀,更多相關(guān)《c《面向?qū)ο蟪绦蛟O(shè)計》第三章.ppt(100頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、2020/7/27,北京科技大學(xué)計算機系,-1-,C++大學(xué)基礎(chǔ)教程,第3章 C++控制語句 北京科技大學(xué)計算機系,2020/7/27,北京科技大學(xué)計算機系,-2-,用計算機解決實際問題,首先要分析問題,設(shè)計合適的算法,然后編程實現(xiàn)算法。,2020/7/27,北京科技大學(xué)計算機系,-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 應(yīng)用舉例 素數(shù),按位翻轉(zhuǎn),小球落地(不要求), 小牛家族,最大公約數(shù),階乘 課堂練習(xí),總結(jié)和作業(yè),2020/7/27,北京科技大學(xué)計算機系,-4-,算法,什么是算法 為解決某一應(yīng)用問題而采用的解題步驟 算法 1、計算機執(zhí)行的操作 2、這些操作的順序,,,2020/7/27,北京科技大學(xué)計算機系,-5-,算法,算法的描述方式 用自然語言描述算法 用流程圖描述算法 用N-S結(jié)構(gòu)圖描述算法,例如:輸出兩個數(shù)中的最大數(shù),,2020/7/27,北京科技大學(xué)計算機系,-6-,用自然語言描述算法,第一步:輸入x和y的值 第二步:比較x和y的值,如果x大于y,則輸出x的值,否則輸
3、出y的值。,易于理解,但冗長,不夠精確,難于描述復(fù)雜算法。,例如當(dāng)描述“輸出10個數(shù)中最大數(shù)”的算法時,會冗長、難于理解,,2020/7/27,北京科技大學(xué)計算機系,-7-,用流程圖描述算法,用流程圖描述算法,,起止框,輸入/輸出框,判斷框,處理框,流程線,,,2020/7/27,北京科技大學(xué)計算機系,-8-,3.1 算法的基本控制結(jié)構(gòu),流程圖 開始/結(jié)束 執(zhí)行 判斷 聯(lián)系,,,,,,2020/7/27,北京科技大學(xué)計算機系,-9-,用N-S結(jié)構(gòu)圖描述算法,用N-S結(jié)構(gòu)圖描述的算法,,,2020/7/27,北京科技大學(xué)計算機系,-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)證明,任何復(fù)雜的問題都可以三種基本算法結(jié)構(gòu)來描述:順序、選擇、循環(huán)。因此用計算機語句描述的程序也包含三種基本結(jié)構(gòu)。,,2020/7/27,北京科技大學(xué)計算機系,-11-,順序結(jié)構(gòu)流程圖,A,B,,,,,,,,A,B可以是一條語句,也可以是一條復(fù)合語句,,C++中默認的語句執(zhí)行次序為:順序執(zhí)行。,,2020/7/27,北京科技大學(xué)計算機系,-12-,分支結(jié)構(gòu)流程圖,,,2020/7/27,北京科技大學(xué)計算機系,-13-,循環(huán)結(jié)構(gòu)流程圖,,2020/7/27,北京科技大學(xué)計算機系,-14-,總結(jié)以上三種結(jié)構(gòu)有以下的共同特點: )只有一
5、個入口。 )只有一個出口。 )結(jié)構(gòu)內(nèi)的每一個部分都有機會被執(zhí)行到 )結(jié)構(gòu)內(nèi)不存在死循環(huán)。,,2020/7/27,北京科技大學(xué)計算機系,-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,北京科技大學(xué)計算機系,-16-,順序結(jié)構(gòu)程序是按照語句的先后順序依次執(zhí)行。一般而言,順序結(jié)構(gòu)的算法中應(yīng)包括幾個基本操作步驟。各操作步驟的邏輯順序關(guān)系如圖3-1所示。,,圖3-1 順序程序的一般算法,,,2020/7/27,北京科
6、技大學(xué)計算機系,-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,北京科技大學(xué)計算機系,-21-,,,2020/7/27,北京科技大學(xué)計算機系,-22-,例子:輸出學(xué)生的成績,#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,北京科技大學(xué)計算機系,-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,北京科技大學(xué)計算機系,-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總是與上面的、離它最近的、在同一復(fù)合語句中還沒有配對的if配對。,,,2020/7/27,北京科技大學(xué)計算機系,-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 的條件:,當(dāng) cab 時,當(dāng) a b 時,,2020/7/27,北京科技大學(xué)計算機系,-33-,一般形式 15、switch (表達式) case 常量表達式 1:語句1 case 常量表達式 2:語句2 case 常量表達式 n:語句n default : 語句n+1 ,switch 語句,,,,,執(zhí)行順序 以case中的常量表達式值為入口標(biāo)號,由此開始順序執(zhí)行。因此,每個獨立的case分支最后應(yīng)該加break語句,跳出整個switch語句。,,,2020/7/27,北京科技大學(xué)計算機系,-34-,,2020/7/27,北京科技大學(xué)計算機系,-35-,例子:輸出學(xué)生的成績,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,北京科技大學(xué)計算機系,-38-,問題1:如何根據(jù)收入,確定一個人的納稅比例及納稅額?,當(dāng)一個公司有多名員工時,如何計算每個人的納稅比例及納稅額?,提出問題:,C++語言:循環(huán)語句,?,?,問題2 :如何根據(jù)學(xué)生的分數(shù)判斷是否及格?,如何根據(jù)全班學(xué)生的分數(shù),分別判斷他們是否及格?,,,2020/7/27,北京科技大學(xué)計算機系,-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 語句 格式和順序,例子,說明 三種語句的應(yīng)用區(qū)別,,2020/7/27,北京科技大學(xué)計算機系,-43-,3.4 循環(huán)語句,while循環(huán)語句,while(表達式) 循環(huán)體語句;,,2020/7/27,北京科技大學(xué)計算機系,-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í)行 (例如當(dāng)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,北京科技大學(xué)計算機系,-47-,其他的while 語句形式,while (0) .... 由于表達式恒等于0,所以循環(huán)體永遠也不會執(zhí)行,是一個邏輯錯誤的語句,while (1) .... 由于表達式恒等于1,所以不可能通過循環(huán)控制條件來結(jié)束循環(huán)體的執(zhí)行,即死循 23、環(huán)。 為了保證循環(huán)正常運行,應(yīng)該特別注意: 循環(huán)控制條件的描述 控制條件的初始狀態(tài)(初始值) 循環(huán)體內(nèi)部對控制條件的影響,,,2020/7/27,北京科技大學(xué)計算機系,-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,北京科技大學(xué)計算機系,-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、時應(yīng)在for語句之前給循環(huán)變量賦初值。如果省略表達式2,即不判斷循環(huán)條件,循環(huán)無終止地進行下去。省略表達式3時,此時程序設(shè)計者應(yīng)另外設(shè)法保證循環(huán)能正常結(jié)束。 2,for后一對圓括號中的表達式可以是任意有效的C++語言表達式。例如: for(sum=0,i=1;i<=100;sum=sum+i,i++) ,,,2020/7/27,北京科技大學(xué)計算機系,-60-,省略for語句的表達式, 表達式1、2、3全省略,即: for ( ; ; ) 就等同于:while (1),會無限循環(huán)(死循環(huán)),注意:在省略某個表達式時,應(yīng)在適當(dāng)位置進行循環(huán)控制的必要操作,以保證循環(huán)的正確執(zhí)行, 省略表達式1 31、和表達式3,即: for(;表達式2;) 就等同于:while( 表達式2 ) 省略表達式2,即: for(表達式1; ;表達式3) 就等同于:表達式1; while(1)表達式3;,,,2020/7/27,北京科技大學(xué)計算機系,-61-,例如:, i=1; for ( ; i<=100; i++) sum+=i;, for (i=1; ; i++) if(i100) for (i=1; i100) i++; ,,,2020/7/27,北京科技大學(xué)計算機系,-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,北京科技大學(xué)計算機系,-65-,3.4.4 轉(zhuǎn)向語句break,用途: 常用在while、do-while、for和switch語句中,用來跳出循環(huán)或switch語句。,,,2020/7/27,北京科技大學(xué)計算機系,-66-,,5.5.2 循環(huán)中break的應(yīng)用,,break;,,while語句,,break;,,,,do-while語句,,break;,,,for語句,,,,,2020/7/27,北京科技大學(xué)計算機系,-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,北京科技大學(xué)計算機系,-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,北京科技大學(xué)計算機系,-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,北京科技大學(xué)計算機系,-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,北京科技大學(xué)計算機系,-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,北京科技大學(xué)計算機系,-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,北京科技大學(xué)計算機系,-77-,3.6 應(yīng)用舉例1,任意輸入一個整數(shù),判斷是否是素數(shù)? 問題:什么是素數(shù)?,,,2020/7/27,北京科技大學(xué)計算機系,-78-,#include using namespace std; void main() int n,i; 41、cinn; for (i=2;i 42、京科技大學(xué)計算機系,-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,北京科技大學(xué)計算機系,-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,北京科技大學(xué)計算機系,-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,北京科技大學(xué)計算機系,-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,北京科技大學(xué)計算機系,-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,北京科技大學(xué)計算機系,-90-,總結(jié),三種基本結(jié)構(gòu):順序、選擇和循環(huán) 流程圖和偽碼,幫助我們設(shè)計算法、完善算法,增強算法的可讀性,,2020/7/27,北京科技大學(xué)計算機系,-91-,作業(yè),P61 9,10,11,,2020/7/27,北京科技大學(xué)計算機系,-92-,課堂練習(xí),選擇題 例題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,北京科技大學(xué)計算機系,-93-,課堂練習(xí),選擇題 以下不正確的語句是( ) 。 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,北京科技大學(xué)計算機系,-96-,課堂練習(xí),下面循環(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,北京科技大學(xué)計算機系,-97-,課堂練習(xí),有以下程序段: 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)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 市教育局冬季運動會安全工作預(yù)案
- 2024年秋季《思想道德與法治》大作業(yè)及答案3套試卷
- 2024年教師年度考核表個人工作總結(jié)(可編輯)
- 2024年xx村兩委涉案資金退還保證書
- 2024年憲法宣傳周活動總結(jié)+在機關(guān)“弘揚憲法精神推動發(fā)改工作高質(zhì)量發(fā)展”專題宣講報告會上的講話
- 2024年XX村合作社年報總結(jié)
- 2024-2025年秋季第一學(xué)期初中歷史上冊教研組工作總結(jié)
- 2024年小學(xué)高級教師年終工作總結(jié)匯報
- 2024-2025年秋季第一學(xué)期初中物理上冊教研組工作總結(jié)
- 2024年xx鎮(zhèn)交通年度總結(jié)
- 2024-2025年秋季第一學(xué)期小學(xué)語文教師工作總結(jié)
- 2024年XX村陳規(guī)陋習(xí)整治報告
- 2025年學(xué)校元旦迎新盛典活動策劃方案
- 2024年學(xué)校周邊安全隱患自查報告
- 2024年XX鎮(zhèn)農(nóng)村規(guī)劃管控述職報告