教學PPT基本控制結(jié)構(gòu)1.ppt_第1頁
教學PPT基本控制結(jié)構(gòu)1.ppt_第2頁
教學PPT基本控制結(jié)構(gòu)1.ppt_第3頁
教學PPT基本控制結(jié)構(gòu)1.ppt_第4頁
教學PPT基本控制結(jié)構(gòu)1.ppt_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三章 基本控制結(jié)構(gòu),if語句 switch語句 while語句 do-while語句 for語句 循環(huán)不變式,3.1 程序的基本控制結(jié)構(gòu) 3.1.1 c+語言的簡單語句,單語句:以分號“;”結(jié)束 int a; 變量定義語句 a=3*2; 表達式語句 function(“example”); 函數(shù)調(diào)用語句 空語句:只有一個分號“;” 復(fù)合語句(塊語句) 用花括號 括起來的若干條語句(可以是單語句、空語句、其他塊語句) 塊語句在語法上等價于一個單語句,所以在單語句可用的地方我們也可以使用塊語句。 塊語句中每一個語句都以分號“;”結(jié)束,塊語句本身則以右花括號“”結(jié)束,if(ab) int t=a; a=b; b=t; ,3.1.1 c+語言的簡單語句,3.1.2單入口單出口控制結(jié)構(gòu),實現(xiàn)單入口單出口程序只需三種基本的控制結(jié)構(gòu) 順序結(jié)構(gòu) 選擇結(jié)構(gòu) 當條件p(條件表達式)成立,則執(zhí)行一個分支,否則執(zhí)行另一個分支 多路分支 循環(huán)結(jié)構(gòu) 實現(xiàn)反復(fù)執(zhí)行某一部分的操作 循環(huán)結(jié)構(gòu)三要素: 循環(huán)條件p 循環(huán)體a 循環(huán)變量:在每次循環(huán)中都必須有語句修改此變量的值,以使循環(huán)條件表達式的值可能改變,從而跳出循環(huán),3.1.3 結(jié)構(gòu)化程序設(shè)計工具,程序框圖 結(jié)構(gòu)化程序設(shè)計圖形工具 n_s圖 pad圖 jackson結(jié)構(gòu)圖 warnier圖 pdl(program design language),3.2 選擇結(jié)構(gòu),3.2.1 if 語句 if (條件表達式) 子語句; if語句的有效范圍是單個語句,如果子語句有多個語句,則必須用括起來,成為一個復(fù)合語句 if (條件表達式) 子語句1; else 子語句2;,例3.2.1 輸入24小時制的時間,轉(zhuǎn)換并輸出12小時制的時間并注明是上午還是下午(上午用a.m表示,下午用p.m表示),#include main() int hour; char noon = a; cout hour; if (hour 12) hour = hour - 12; noon = p; cout “the hour is “ hour noon “.m.n“; ,*如果去掉花括號 if (hour 12) hour = hour - 12; noon = p; “noon = p;”不是if的子語句,而是主流程if語句的下一個順序語句,程序2: 程序3:,#include void main() float x; coutx; if (x12) cout “ p.m: “; x=x-12; else cout “ a.m: “; coutxn; ,(改進) #include void main() float x; coutx; if(x=12) cout “ a.m: “; else cout “ p.m: “; x=x-12; coutxn; /注意書寫層次結(jié)構(gòu),例3.2.2 一個具有輸入合法性檢測的程序,要求用戶輸入的工齡在047之間,如果超出此范圍則提示輸入錯誤,否則才接受用戶輸入。用戶輸入錯誤時,程序用轉(zhuǎn)義字符輸出一聲響鈴,main() int standing; / 用戶輸入的工齡 float standing_salary;/ 根據(jù)用戶輸入工齡計算出來的工齡工資 cout standing; if (standing = 0) ,嵌套if語句,if (表達式1) if (表達式2) 子語句1; else 子語句2; else 子語句3; if (表達式1) 子語句1; else if (表達式2) 子語句2; else if (表達式n) 子語句n; else 子語句n1;,例3.2.3 從鍵盤上輸入3個數(shù)a,b,c,求出三數(shù)中最大者并輸出。,#include void main() int a,b,c,max; coutabc; max = a; if (bmax) max = b; / 求出a、b中的較 /大值,記錄在max中,然后再比較c與max if (cmax) max = c; cout “ max(a,b,c): “ maxn; ,采用嵌套if語句來實現(xiàn),if (a b) if (a c) cout c) cout“maximum is “ b ; else cout“maximum is “ c; ,垂懸else問題,if (p1) if (p2) a=1; else a=2; 這樣的語句會引起二義性,else子句不知道應(yīng)該與哪個if語句配對。 c+語言中是就近配對: if (p1) 注意if與else的配 if (p2) a=1; 對關(guān)系,else總是 else a=2; 與它上面的最近的 if配對,注意問題,if語句中的表達式,一般為邏輯表達式或關(guān)系表達式 else子句不能單獨使用,必須與if配套使用 if以及else語句后面都只含一個內(nèi)嵌的操作語句,有效范圍都只有一個語句,若需含多個操作,則須用 括起來。 例: if (a+bc) coutc”; c = a+b; else cout“a+b=c”;,程序3.2.4,/程序:average.cpp /功能:求數(shù)、理、化三科平均成績的總評,演示if語句嵌套的縮進格式 #include void main() int math,phys,chem; int average; float scholarship; coutmathphyschem; average=(math+phys+chem)/3.0+0,5; /why? if(average=90) cout=80) cout“ good.n“; scholarship=85.00;,程序3.2.4, else if (average=70) cout=60) cout“ pass.n“; scholarship=45.50; else cout“ fail.n“; scholarship=0.00; cout“your scholarship is scholarship“.n“; ,條件表達式短路求值,if(members!=0)&(income/members800.00) = if(members!=0) if (income/members800.00) expression1& expression2 / expression1為0, expression2不做 expression1| expression2 / expression1非0, expression2不做,3.2.2 switch語句,多分支選擇語句 switch語句的一般形式如下: switch (表達式) case 常量表達式1: 語句序列1; break; case 常量表達式2: 語句序列2; break; case 常量表達式n: 語句序列n; break; default: 語句序列n + 1; break; ,說明,表達式可為任何類型。switch在入口時判斷表達式與哪個常量表達式匹配。若表達式的值與某個case后面的常量相等,則執(zhí)行與該case后面相應(yīng)的語句;若與所有列出的常量都不相等,則執(zhí)行default后面的語句。 case后只能是常量表達式,不能是變量表達式,其值只能是整型、字符型、枚舉型,不能是其他類型。每個常量表達式的值都不相同。 case部分與default部分出現(xiàn)次序不影響執(zhí)行結(jié)果。每部分不限單個語句,可寫多個語句,不用加 。 break;語句用于執(zhí)行完一個分支后跳出此switch語句,例3.2.6,#include main() int choice; / 用戶輸入的選擇 cout choice; / 用戶輸入選擇 switch (choice) / 對用戶的選擇分別作處理 case 1: cout “your choice is apple.n“; case 2: cout “your choice is pear.n“; case 3: cout “your choice is banana.n“; case 4: cout “your choice is orange.n“; default: cout “you did not make a choice.n“; ,break; break; break; break; break;,例3.2.7,/程序:orders.cpp /功能:旅行社訂票折扣率計算 #include void main() int orders, fragment; float discount; coutorders; fragment=orders/10; switch(fragment) case 0: discount=0.10; break; case 1: discount=0.15; break; case 2: discount=0.30; break; default: discount =0.45; break; cout“the discount is “discount*100“%.n“; ,3.3 循環(huán)結(jié)構(gòu) 3.3.1 while語句,while (循環(huán)條件表達式) 循環(huán)體語句; 當表達式的值為t(非零)時,循環(huán)條件成立,執(zhí)行循環(huán)體語句。 while語句的作用范圍只到while后第一個分號(單語句)。若循環(huán)體有多個語句則需用 括起來。 在循環(huán)體中應(yīng)有使循環(huán)趨向于結(jié)束的語句 循環(huán)變量初始化需在while語句前完成,例3.3.1:給定一個正整數(shù)n,求出平方值不超過n的最大正整數(shù)并輸出。,程序流程圖如右:,源程序:,#include main() int n; / 用戶給定的正整數(shù) int max; / 所求的最大整數(shù) cout n; / 判斷用戶輸入是否合法 if (n = 0) cout “input error!n“; else / 利用循環(huán)求出平方大于n的最小整數(shù) max = 1; while (max * max = n) max = max + 1; / 輸出結(jié)果 cout “the maximum integer is: “ max - 1 “n“; ,例3.3.2,#include void main() int choice=1; / 用戶輸入的選擇 while(choice!=0) cout choice; / 用戶輸入選擇 switch (choice) / 對用戶的選擇分別作處理 case 0: break; case 1: cout “your choice is apple.n“; break; case 2: cout “your choice is pear.n“; break; case 3: cout “your choice is banana.n“; break; case 4: cout “your choice is orange.n“; break; default: cout “your choice is invalid.n“; break; cout“ thank you for your choice.n“; ,3.3.2 do-while語句,do 循環(huán)體語句; while (循環(huán)條件表達式p); 先執(zhí)行一次循環(huán)體語句,然后判別表達式,當為t時,返回執(zhí)行循環(huán)體語句,直到表達式為f,結(jié)束循環(huán) while語句和do-while語句基本等價,只有當表達式一開始就為假時,兩種語句結(jié)果不一樣 i=20; sum=0; i=20; sum=0; while (i=10) do sum += i ; sum += i ; i+; i+; while (i=10); 結(jié)果 sum=0 結(jié)果 sum=20,3.3.2 do-while語句,/程序:sqrt.cpp /功能:利用牛頓法求一個正數(shù)的平方根 #include void main() const float eps=1e-5; float num, root, pre; coutnum; if(numeps)|(root-preeps); cout“ the rootof “num“ is “rootendl; ,3.3.3 for語句,for (表達式1; 表達式2; 表達式3) 循環(huán)體語句; 執(zhí)行過程: 求解表達式1 求解表達式2, 若其值為t,執(zhí)行循環(huán)體語句,跳到第3)步; 若為f,結(jié)束循環(huán),跳到第4)步 求解表達式3,然后跳到第2)步 循環(huán)結(jié)束,執(zhí)行for語句的下一條語句 適用于循環(huán)次數(shù)已知的循環(huán) 表達式1:循環(huán)變量賦初值 表達式2:循環(huán)條件 表達式3:循環(huán)變量增量(計數(shù)表達式),for語句中的三個表達式中任一個或全部均可省略,但分號必須保留,sum=0; for (i=1; i100) break; sum += i; sum=0; for (i=1; i=100; ) sum += i; i+; ,sum=0; i=1; for (; i100) break; sum += i; i+; for (sum=0,i=1; i=100 ; i+) sum += i;, while (i=100), while (1),程序3.3.4,/程序:alphabet.cpp /功能:正反向打印字母表。 #include void main() char ch; for(ch=a; ch=a; ch-) coutch; coutendl; ,程序3.3.5,/程序: temptab.cpp /功能:打印攝氏溫度與華氏溫度對照表 #include void main() const int max=10; const int min=-5; int cel; float fah; / 輸出對照表欄目 cout=min;cel-) fah=cel*1.8+32; coutcel“x09“fahendl; ,3.3.4 循環(huán)的嵌套,三種循環(huán)可以相互替代 一個循環(huán)體內(nèi)又包含另一個完整的循環(huán)結(jié)構(gòu)循環(huán)的嵌套 各種循環(huán)可以相互嵌套,3.3.4 循環(huán)的嵌套,/程序: multitab.cpp /功能:打印乘法口訣表 #include void main() int i,j; for(i=1; i=9; i+) for(j=1; j=i; j+) couti*j=i*j ; coutendl; ,程序3.3.6 公雞5元1只,母雞3元1只,小雞1元3只,花了100元錢買100只雞,問公雞、母雞、小雞各多少只?,cock公雞的個數(shù);hen母雞的個數(shù);chicken小雞的個數(shù);得方程: cock+hen+chicken = 100 5*cock + 3*hen + chicken/3 =100 #include void main() int cock, hen, chicken ; for (cock=0; cock=100/5; cock+) for (hen=0; hen=100/3; hen+) chicken = 100 - cock - hen ; if (chicken%3=0) ,運行結(jié)果: cock=0 hen=25 chicken=75 cock=4 hen=18 chicken=78 cock=8 hen=11 chicken=81 cock=12 hen=4 chicken=84,20,33,3.3.5 設(shè)計正確的循環(huán),循環(huán)不變式 一個或者多個表達式 用于保證循環(huán)的正確性 在循環(huán)前成立 在每次執(zhí)行循環(huán)體后仍成立 在循環(huán)結(jié)束后也成立,3.4 轉(zhuǎn)向語句,例3.4.1(break的用法) 鍵盤輸入m和n(10mn32000),求出mn間所有素數(shù)且按每行8個數(shù)形式輸出,#include #include #include void main() int m,n,x,k,i,j; j=0; /j計算輸出個數(shù) do coutmn; while(m=n)|(n=32000) ; cout“n*n“;,for(x=m; x=k+1) /不是用break跳出的,找到一個素數(shù) if (j%8=0) coutendl;/每行8個數(shù) coutsetw(8)x; j=j+1; /以每行8個數(shù)的形式輸出,每個數(shù)占8個字符的位置 cout“n*n“; ,例3.4.2(continue的用法) 在鍵盤上輸入若干個正數(shù),累加求和,最后輸出累加和以及平均值。,問題分析: 事先不知道要輸入多少個數(shù),但知道輸入數(shù)是正數(shù),我們可邊輸入邊統(tǒng)計其個數(shù),若發(fā)現(xiàn)輸入的是0或負數(shù)時,輸入結(jié)束。當輸入數(shù)是大于0時則累加并累計數(shù)的個數(shù)。,源程序如下: #include void main() double sum,num;int n; sum=0

溫馨提示

  • 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

提交評論