下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第三章 流程控制,描述算法的最基本成分 基本操作 基本控制結(jié)構(gòu) 本節(jié)介紹,如何用C來表示- 帶控制結(jié)構(gòu)的程序 怎樣控制流程,3.1 順序結(jié)構(gòu) 結(jié)構(gòu)化程序設計中的順序控制結(jié)構(gòu)表示: 算法的某部分若執(zhí)行, 則順序的一個接一個語句,全部被執(zhí)行; 若不執(zhí)行,則全部語句一個也不被執(zhí)行。,順序控制結(jié)構(gòu)編程舉例,例1:任意從鍵盤輸入一個三位整數(shù),要求正確分離它的個位十位和百位數(shù)字,并在屏幕上輸出。 例2:換零錢問題。小明拿1美元買了若干糖果,請輸入買糖果花費錢數(shù),求出并輸出找回零錢數(shù),比如50cents多少枚,25cents多少枚,10cents多少枚,和1cents多少枚。,流程圖說明:,順序結(jié)構(gòu)課堂練習
2、: 輸入兩個整數(shù),將它們的數(shù)值交換并輸出。 輸入一個圓柱體的半徑,求出其表面積和體積,并輸出。,3.2 分支結(jié)構(gòu) ,按不同情況對數(shù)據(jù)進行不同處理或加工的情況。 例,3.2.1 邏輯值控制,if 語句:為描述邏輯控制的分支程序而設計的。 分為單分支 if 語句和雙分支 if 語句。 語法 if語句 if ( 表達式 ) 語句 if ( 表達式 ) 語句 else 語句,(1) 單分支 IF 語句,其形式是 if ( B ) S 其中: B 是一個布爾表達式; S 是一個語句。 語義: 計算 B 的值, 若 B為 true 則執(zhí)行語句 S , 否則什么也不執(zhí)行。,S,N,Y,(2) 雙分支if語句
3、,其形式是: if ( B ) S1 else S2 其中: B是布爾表達式; S1 、S2 都是語句。,S1,N,S2,Y,【例3.1】求 A 、B 極大值問題,可以描述成 if ( ab ) max=a ; else max=b ;,N,Y,S2,S1,if( x0) sign=1 ; else if (x=0) sign=0 ; else sign= -1 ;,【例3.2】數(shù)學中的符號函數(shù),例如: if (ab) if (bc) x=0; else x=1; 如何理解?,兩種解釋: else 屬于第一個 if : if (ab) if ( bc ) x = 0 ; else x = 1;
4、 else 屬于第二個 if : if ( ab ) if (bc) x = 0 ; else x = 1 ;,兩義性!,執(zhí)行 若 ab 且 b=c 執(zhí)行什么?,C標準規(guī)定: “否則”部分與前面最鄰近的一個沒有配對的 if 配對 解決方案:使用 ,【例3.3】求一元二次方程 a*x*x + b*x + c = 0 的根。,解:偽代碼,(1)當a=0時,執(zhí)行(2),否則執(zhí)行(6),(2)當b=0時,執(zhí)行(4),否則執(zhí)行(3),(4)如果c=0,則打印“0=0”,轉(zhuǎn)向(11)否則執(zhí)行(5),(5)打印出錯信息“c=0”,轉(zhuǎn)向(11),(6)計算值,(7)當=0時,執(zhí)行(8),否則執(zhí)行(10),(3
5、)打印一個實根 ,轉(zhuǎn)向(11),(11)結(jié)束,流程圖,F,T,T,輸出一個 實根x=-c/ b,delta=0,F,T,delta=0,輸出一對 虛根,T,F,T,F,/* PROGRAM quadratic equation*/ #include #include void main() int a,b,c,delta; printf(“輸入方程式的三個系數(shù): ); scanf(%f%f%f,else / 處理a!=0的情況 delta=b*b-4*a*c; if(delta0) printf(x1=%f ,x2=%fn, (-b+sqrt(delta)/(2*a),(-b- sqrt(de
6、lta)/(2*a); else if(delta=0) printf(x1=x2=%fn,-b/(2*a); else printf(x1=%f+%fi , x2=%f-%fin, -b/(2*a),sqrt(-delta)/(2*a), -b/(2*a),sqrt(-delta)/(2*a) ); ,【例3.4】輸入成績,給出其成績等級要求:60分以下,打印“不及格”;60-69,打印“及格”;70-79,打印“中”;80-89,打印“良”;90-100,打印“優(yōu)”;其他成績,打印“數(shù)據(jù)無效”。,# include void main() int mark ; scanf( “%d n”,
7、 ,隨堂練習,根據(jù)式子畫流程圖、寫程序。 y=,3.2.2算數(shù)值控制的多分支語句 每種形式中的default 部分都可以省略。,第一種:設有 switch 語句: switch ( e ) case c1 : S1 break ; case c2 : S2; break ; case c3 : S3; break ; case c4 : S4; break ; case c5 : S5; break ; default : S6 ,int a,b=4; scanf(%d,第二種:設有switch 語句: switch ( e ) case c1 : S1 case c2 : S2; case
8、c3 : S3; case c4 : S4; case c5 : S5; default : S6 ,特點:無break語句。,exercise: how many days are there in every month of a year?,. switch (month) case 1:case 3:case 5:case 7:case 8:case10:case 12:days=31;break; case 4:case 6:case 8:case 9:case 11:days=31;break; case 2:if (Isleapyear=1) days=29; else days
9、=28; ,分支(條件)小結(jié),Ifelse switchcase 允許嵌套 的適當使用,分支結(jié)構(gòu)隨堂練,輸入某年某月,請打印出這個月會有多少天。 輸入某年某月某日,請輸出這是本年的第幾天。,作業(yè)1.以switch.case結(jié)構(gòu)改寫該程序片段,if (a30)m=1; else if (a40) m=2; else if (a50) m=3; else if(a60) m=4; else m=5;,3.3 循環(huán)結(jié)構(gòu),什么是“循環(huán)”? 思考:生活中的“循環(huán)”有哪些? (1)魯濱遜刻痕記日; (2)時鐘的分針跑多 少圈是一天?,問題實質(zhì):分針一圈一圈地跑,共跑了24圈。 結(jié)論 計算機對相同的操作可以
10、用“循環(huán)”結(jié)構(gòu)來完成。 循環(huán)(重復):在一定的條件下,不斷重復執(zhí)行 同一段程序。,3.3.1 思考以下題目: 屏幕輸出整數(shù)2從1次到20次的冪數(shù),如何做? 算法1: int t=2; printf(“%d”,t); printf(“%d”,t*t); printf(“%d”,t*t*t); printf(“%d”,t*t*t*t);,20句 !,算法2:,S1:P=2,打印P; S2:P=P*2,打印P; S3:P=P*2,打印P; . S20:P=P*2,打印P.,S0:1-P,2-t,1-i;/循環(huán)初值 S1: P*t-p , 打印P, i+1-i;/循環(huán)體 S2: i=20?/循環(huán)控制條
11、件 S3: 結(jié)束 說明:若S2成立,則返回S1; 否則算法結(jié)束,算法3:,使用循環(huán)語句必須清楚: (1)初始條件是什么? (2)重復執(zhí)行部分( “循環(huán)體”)是什么? (3)循環(huán)控制條件是什么?,例題流程圖:,循環(huán)結(jié)構(gòu)包括: (1)初始條件 (2)結(jié)束條件(循環(huán)控制) (3)循環(huán)體,P=P*t ;,P=1; t =2; i=1;,3.3.2 三種循環(huán)語句,while 語句 dowhile 語句 for 語句,while語句(先判斷) 語句形式 while ( e ) S )計算 e 值; )若 e 值為真則轉(zhuǎn)向3) ,否則轉(zhuǎn)向5) ; )執(zhí)行語句 S ; )轉(zhuǎn)向 1) ; )while 語句執(zhí)行
12、結(jié)束,接著向下執(zhí)行其后繼 語句。 循環(huán)體 S 有可能一次也執(zhí)行不到!,2的冪次方程序源代碼:,#include void main() int t,P,i; t=2,P=1,i=1; while (i=20) P=P*t; printf(i=%d P=%dn,i,P); i+; ,P=1; t =2; i=1;,P=P*t ;,i = i+1 ;,N,Y,打印i、P值,2的冪次方程序運行屏幕截圖,dowhile語句(后判斷),語句形式為 do S while ( e );,注意:循環(huán)體 S 起碼被執(zhí)行一次。,比較:while與dowhile語句,while程序片段 while(i=20) P=
13、P*t; printf(“%dn”,P); i+;,do.while程序片段 do P=P*t; printf(“%dn”,P); i+; while(i=20);,for 語句 語法形式 for ( e1 ;e2 ;e3 ) S 其中: e1初值表達式 e2終值(控制)表達式 e3增量(修正)表達式,for循環(huán)特點:初值、控制、修正部分全部集中,優(yōu)點:程序緊湊、好讀、易于理解。,for語句 main() int t=2,P=1; for (i=1;i=20;i+) P=P*t; printf(“%dn”,P); ,while語句 main() int t=2,i=1,P=1; while(i
14、=20) P=P*t; printf(“%dn”,P); i+; ,比較:while與for語句,for (;)是否合法?相當于什么語句? 若省略e1,可否? 若省略e2,可否? 若省略e3,可否? 若省略了e1和e3,可否? e1可以是其他與循環(huán)無關(guān)的表達式? e1和e3可以是逗號表達式? e2一般是關(guān)系表達式或邏輯表達式,但可以是數(shù)值表達式 或字符表達式?,1)省略了e1和e3,即只給出循環(huán)控制條件 for(;i=100;)相當于while(i=100) 2)e1也可以是其他與循環(huán)無關(guān)的表達式 for(sum=0;i=100;i+)sum=sum+i; 3)e1和e3也可以是逗號表達式。
15、for(i=0,j=100;i=100;i+,j-) 4)e2一般是關(guān)系表達式或邏輯表達式,但也可是數(shù)值表達式或字符表達式,只要其值非零,就執(zhí)行循環(huán)體。 for(i=0;(c=getchar()!=n;i+=c),注意“漏掉1”的問題!,循環(huán)結(jié)構(gòu)隨堂練習題:編程,(1)判斷從10到1000共有多少個能被13整除的數(shù),并打印輸出。 要求:用while、dowhile、for三種循環(huán)分別寫出程序片段。,(2)分別用while/do while/for求(從1到100的整數(shù) 之和),(1)break語句,a. 語句形式: break;,b.作用: a. 結(jié)束break所在的 switch語句; b.
16、結(jié)束當前循環(huán),跳出break所在的循 環(huán)結(jié)構(gòu)。,3.3.4 break語句和continue語句,為了使循環(huán)控制更加靈活,語言提供了break語句和continue語句。,求300以內(nèi)能被17整除的最大的數(shù)。,#include void main() int x; for(x=300;x=1;x-) if(x%17=0) break; printf(x=%dn,x); ,找到滿足條件的最大數(shù),結(jié)束循環(huán),break語句舉例,a.語句形式: continue;,b.語句作用: 結(jié)束本次循環(huán)。,(2) continue 語句,c.語句執(zhí)行流程: continue語句可以結(jié)束本次循環(huán),即不再執(zhí)行循環(huán)體
17、中continue 語句之后的語句,轉(zhuǎn)入下一次循環(huán)條件的判斷與執(zhí)行。,求300以內(nèi)能被17整除的所有整數(shù)。,#include void main() int x; for(x=1;x=300;x+) if(x%17!=0) continue; printf(%dt,x); ,continue 語句舉例,Tips: continue中斷本次循環(huán)之后,程序跳到x=x+1執(zhí)行。,若用while改寫該段程序,應該將x+置于 continue之前,并將x初值和終值適當改寫。,break和continue比較,(1)while (表達式1) 2)while (表達式1) if(表達式2)break;if(
18、表達式2)continue; ,#include void main() int a, b; for(a=1,b=1; a=10) break; if(b%3=1) b+=3; continue; printf(%dn,a);,分析以下程序的運行結(jié)果。,程序運行結(jié)果: 4,continue 語句練習,3.3.4 goto語句,(1)語句形式 goto 標號; (2)作用 無條件轉(zhuǎn)向語句goto語句舉例,main() int i=1,s=0; LOOP; s=s+1; i+; if(i10) goto PRT; goto LOOP; PRT:printf(“%d”,t);,補充內(nèi)容幾種常用編程算
19、法的 簡單介紹,一 、打擂法 定義:找出當前最大一項作為擂主,若有新 值大于它,則替換之。 打擂法例子:從鍵盤輸入十個數(shù),找出其中 最大值,并輸出。,二、迭代法(iterative),定義:利用計算機運算速度快、適合做重復性操作的特點,讓計算機對一組指令(或一定步驟)進行重復執(zhí)行,在每次執(zhí)行這組指令(或這些步驟)時,都從變量的原值推出它的一個新值。 步驟: 第一:確定迭代變量 第二:建立迭代關(guān)系式使用遞推或倒推 第三:對迭代過程進行控制迭代次數(shù)固定或不 固定,迭代法舉例1:阿米巴分裂,阿米巴用簡單分裂的方式繁殖,它每分裂一次要用 3 分鐘。將若干個阿米巴放在一個盛滿營養(yǎng)參液的容器內(nèi), 45 分
20、鐘后容器內(nèi)充滿了阿米巴。已知容器最多可以裝阿米巴 220220 個。試問,開始的時候往容器內(nèi)放了多少個阿米巴?,迭代法舉例2:Fibonacci序列 第1個月有1對小兔子 第2個月變成大兔子并懷孕 第3個月生下1對小兔子 第4個月2對兔子各生下1對小兔子 即從第1個月起,兔子數(shù)目為 1,1,2,3,5,8,13. 求20個月后,兔子總數(shù)為多少? 設f1為前1個月的兔子總數(shù),f2為當前月的兔子總 數(shù),f3為后一個月的兔子總數(shù)。,練習題,猴子摘桃一個猴子摘了一堆桃子,第一天吃了一半零一個,第二天吃了剩余桃子的一半零一個,如此下去,第九天吃完后只剩一個桃子。編寫程序,求最初摘了多少個桃子? 假設用d
21、ay表示天數(shù),d1表示當天的桃子數(shù),d2表示當天剩下的桃子數(shù)。,多重循環(huán)(或循環(huán)嵌套) 定義:一個循環(huán)的循環(huán)體中包含另外一個循環(huán) 二重循環(huán) 三重循環(huán) 多重循環(huán) Notice: 復合語句的適當使用 內(nèi)外層循環(huán)控制變量不要重名 嵌套循環(huán)采用右縮進格式書寫 循環(huán)嵌套不允許交叉,多重循環(huán)例題:有1、2、3、4個數(shù)字,能組成多少個互不相同且無重復數(shù)字的三位數(shù)?都是多少?(每行打印5個數(shù))上機例子程序分析:可填在百位、十位、個位的數(shù)字都是1、2、3、4。組 成所有的排列后再去掉不滿足條件的排列。,#include void main() int i,j,k,h=0; printf(n); for(i=1;
22、i5;i+)/*以下為三重循環(huán)*/ for(j=1;j5;j+) for(k=1;k5;k+) if(i!=k ,作業(yè)2.編程,(1)輸入一個正整數(shù),判斷其是否為素數(shù)(質(zhì)數(shù)) (2)選做:判斷從1到1000共有多少個素數(shù),并打印輸出。 要求:流程圖、源代碼。 以下為其他常見問題舉例,#include main()int i,j,k,n;printf(“水仙花數(shù)是:);,例題【1】:打印出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個三位數(shù),其各位數(shù)字立方和等于該 數(shù)本身。例如:153是一個“水仙花數(shù)”,因為153=1的三次方5的三次方3的三次方。,程序分析:利用for循環(huán)控制100-99個數(shù),每
23、個數(shù)分解出個位,十位,百位。,for(n=100;n1000;n+) ,i=n/100;/*分解出百位*/,j=n/10%10;/*分解出十位*/,k=n%10;/*分解出個位*/,if (i*100+j*10+k=i*i*i+j*j*j+k*k*k)printf(%-5d,n); ,例題【2】二重循環(huán)例子編程序,打印99表。,1 1 2 2 4 3 3 6 9 4 4 8 12 16 5 5 10 15 20 25 6 6 12 18 24 30 36 7 7 14 21 28 35 42 49 8 8 16 24 32 40 48 56 64 9 9 18 27 36 45 54 63 7
24、2 81 * 1 2 3 4 5 6 7 8 9,流程圖,1-i,1-j,打印i*j,j+1-j,j=i,Y,N,i+1-i,i=9,Y,N,1,1,打印*,打印i,1-i,i=9,N,結(jié)束,Y,程序: /*九九表 */ #include void main() int i,j; for(i=1;i10;i+) printf(%4d,i); for(j=1;j=i;j+) printf(%4d,i*j); printf(n); printf(%4c,*); for(i=1;i10;i+) printf(%4d,i); printf(n); ,例題【3】打印由數(shù)字組成的如下所示金字塔圖案。,vo
25、id main() int i,k,j; for(i=1;i=9;i+) /* 外循環(huán)控制打印行數(shù) */ for (k=1;k=10-i;k+) /* 每行起始打印位置 */ printf( ); for (j=1;j=2*i-1;j+) /* 內(nèi)循環(huán)控制打印個數(shù) */ printf(%c,48+i);/* 打印內(nèi)容 數(shù)字1的ASCII碼為49 */ printf(n); /* 換行 */ ,程序分析:打印圖案一般可由多重循環(huán)實現(xiàn),外循環(huán)用來控制打印的行數(shù),內(nèi)循環(huán)控制每行的空格數(shù)和字符個數(shù)。,#include void main() char c; int letters=0,space=0,digit=0,others=0; printf(“請輸入一些字符:n”); while(c=getchar()!=n) if(c=a ,例題【4】題目:輸入一行字符,分別統(tǒng)計出其中英文字母、空格、數(shù)字和其它字符的個數(shù)。,程序分析:利用while語句,條件為輸入的字符不為n. while(c=getchar()!=n),例題【5】求出某年某月某日是這一年的第幾天。,#include case 4: main() case 6: int year,month,day,sum=0,leap,i; case 9: printf( “請輸入年,月,日:”); case 2:sum+=28;/二月天
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025廣東云浮市消防救援支隊招聘政府專職消防員21人參考題庫附答案
- 2025年澄江市天頤建筑工程有限公司招聘項目用工人員招聘(3人)(公共基礎知識)測試題附答案
- 2025廣東惠州市市直醫(yī)療單位招聘高層次和急需緊缺人才直接業(yè)務考核備考題庫附答案
- 2025年度湖南天創(chuàng)精工科技有限公司春季招聘模擬試卷附答案
- 2025廣東中山市東鳳鎮(zhèn)人民政府所屬事業(yè)單位招聘事業(yè)單位人員12人(公共基礎知識)綜合能力測試題附答案
- 2026四川瀘州市瀘縣生態(tài)環(huán)境局招聘項目調(diào)度編外人員1人筆試模擬試題及答案解析
- 2026中國稀土集團有限公司及所屬企業(yè)招聘41人筆試備考試題及答案解析
- 2026春福建泉州市南安市北山實驗小學合同制教師招聘1人筆試模擬試題及答案解析
- 2026黑龍江哈爾濱市通河縣第一批公益性崗位招聘62人筆試模擬試題及答案解析
- 2025廣東佛山市南方醫(yī)科大學珠江醫(yī)院三水醫(yī)院招聘高層次人才4人筆試參考題庫及答案解析
- 多聯(lián)機安裝施工方案
- 神經(jīng)內(nèi)科品管圈成果匯報-提高腦卒中偏癱患者早期自我肢體功能鍛煉規(guī)范執(zhí)行率
- 缺血性腦卒中靜脈溶栓護理
- 電子電路基礎-電子科技大學中國大學mooc課后章節(jié)答案期末考試題庫2023年
- 四年級科學上冊期末試卷及答案-蘇教版
- DB51T 2875-2022彩燈(自貢)工藝燈規(guī)范
- 小學數(shù)學人教版六年級上冊全冊電子教案
- 主要負責人重大危險源安全檢查表
- 《工程經(jīng)濟學》模擬試題答案 東北財經(jīng)大學2023年春
- 2023-2024學年廣西壯族自治區(qū)來賓市小學數(shù)學五年級下冊期末自測試卷
- 2023年福海縣政務中心綜合窗口人員招聘筆試模擬試題及答案解析
評論
0/150
提交評論