《控制結(jié)構(gòu)(循環(huán)結(jié)構(gòu)).ppt》由會員分享,可在線閱讀,更多相關(guān)《控制結(jié)構(gòu)(循環(huán)結(jié)構(gòu)).ppt(31頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、第4章 控制結(jié)構(gòu)(循環(huán)結(jié)構(gòu)),教學(xué)內(nèi)容 掌握三條語句兩種循環(huán)的實現(xiàn)形式 理解循環(huán)三要素 熟悉循環(huán)結(jié)構(gòu)程序設(shè)計思路 教學(xué)重點 兩種循環(huán)的實現(xiàn)形式 教學(xué)難點 循環(huán)嵌套 循環(huán)結(jié)構(gòu)程序設(shè)計,循環(huán)概述,用途 解決一些需要重復(fù)多次才能完成的問題 每一次在做相同操作或與上一次有聯(lián)系的相似操作 分類,,,,,,入口,出口,,入口,,出口,while語句,功能:實現(xiàn)當(dāng)型循環(huán) 形式:while(表達式)循環(huán)體語句 執(zhí)行:先判斷,后執(zhí)行,例4-11 求n! P101,源程序,main() int n,i; float t; printf(“please input n(n=0):”); scanf(“%d”, ,,
2、循環(huán)條件,i為循環(huán)變量,,循環(huán)變量初始化,,改變循環(huán)變量的值,while語句應(yīng)用舉例,例4-12:求的近似值P101 程序流程 輸入數(shù)據(jù):無 處理數(shù)據(jù):/41-1/3+1/5-1/7+ 輸出結(jié)果: 算法分析 問題實質(zhì):累加求和 解決方案:循環(huán) 循環(huán)條件 循環(huán)變量初始化 改變循環(huán)變量的值,累加項t的絕對值大于等于10-6,循環(huán)變量t=第1項的值,循環(huán)變量t=下一項的值,流程圖,,,找規(guī)律,項:1、-1/3、1/5、-1/7,找遞推公式,找本項與下一項之間的關(guān)系,每一項都是一個分式,分子都是1,分母是n+2,n代表前一項分母,下一項與本項符號相反,n=n+2 sign=-sign t=sign/n
3、,,n=1 sign=1,源程序,#include main() float pi,t,n; int sign=1; pi=0.0;n=1.0;t=1.0; while(fabs(t)=1e-6) pi=pi+t; n=n+2; sign=-sign; t=sign/n; pi=pi*4; printf(“pi=%fn”,pi); ,,,,循環(huán)條件,t為循環(huán)變量,循環(huán)變量初始化,改變循環(huán)變量的值,do-while語句,功能:實現(xiàn)直到型循環(huán) 形式 do 循環(huán)體語句 while(表達式); 執(zhí)行:先執(zhí)行,后判斷,當(dāng)型循環(huán)可能一次也不執(zhí)行,直到型循環(huán)至少執(zhí)行一次,do-while語句應(yīng)用舉例,例4
4、-13:計算sin(x)P102 定義變量 輸入數(shù)據(jù) 處理數(shù)據(jù) 輸出結(jié)果,x,sin(x)=x-x3/3!+x5/5!-x7/7!+,sin(x),,,,累加問題,,循環(huán)實現(xiàn),,,當(dāng)型循環(huán),直到型循環(huán),直到最后一項的絕對值小于1e-7,,循環(huán)條件,循環(huán)變量初始化,循環(huán)體 (改變循環(huán)變量),fabs(t)=1e-7,s=s+t,t=x,t=-t*x*x/ (n-1)/n,,找規(guī)律,通項公式:an與n之間的關(guān)系,遞推公式:an與an-1之間的關(guān)系,,源程序,#include main() double s,t,x;int n; printf(“please input x:”); scanf(“%
5、lf”,,如果將s=x;改為s=0;程序應(yīng)如何修改?,for語句,功能 最靈活,既可實現(xiàn)當(dāng)型循環(huán),也可實現(xiàn)直到型循環(huán) 多用于循環(huán)次數(shù)已知的循環(huán),也可用于循環(huán)次數(shù)未知的循環(huán) 形式 for(表達式1;表達式2;表達式3) 語句 執(zhí)行 流程圖,for語句執(zhí)行流程圖,如何轉(zhuǎn)換成等價的while循環(huán)? 表達式1; while(表達式2) 語句 表達式3; ,表達式1只在進入循環(huán)前求解一次,for語句的典型應(yīng)用,for (循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值) 語句 main() int i,sum; sum=0; for(i=1;i<=100;i++)sum=sum+i; printf(“%d”,su
6、m); ,for語句的靈活性,for(sum=0,i=1;i<=100;i++)sum=sum+i; sum=0,i=1; for(;i<=100;i++)sum=sum+i; for(sum=0,i=1;i<=100;)sum=sum+i; i++; sum=0,i=1; for(;i<=100;) sum=sum+i; i++; for(sum=0,i=1;;i++) if(i<=100)break; sum=sum+i; sum=0,i=1; for(;;) if(i<=100)break; sum=sum+i; i++;,循環(huán)嵌套,一個循環(huán)體內(nèi)又包含另一個完整的循環(huán)結(jié)構(gòu) 三種循環(huán)語句可
7、以相互嵌套P107 一般情況下各層循環(huán)變量互不相同 例4-16:打印金字塔圖案P107,1 222 33333 4444444 555555555 66666666666 7777777777777 888888888888888 99999999999999999,編程思想:抽象的學(xué)問 抽象方法:找規(guī)律 用變量來描述變化的規(guī)律 用流程圖來描述算法 編程實現(xiàn)算法,流程圖,一行一行輸出,重復(fù)操作,循環(huán),循環(huán)變量除用來控制循環(huán)的開始與結(jié)束外,往往還參與循環(huán)體內(nèi)的操作。,,一個字符一個字符輸出,每行輸出若干個空格和若干個數(shù)字,源程序,main() int i,j; for(i=1;i<=4;
8、i++) for(k=1;k<=10-i;k++) printf(%c, ); for(j=1;j<=2*i-1;j++) printf(%c,48+i); printf(n); ,,是否可改為0+i?,,是否可將k改為j?,,是否可去掉?,幾種循環(huán)的比較,循環(huán)三要素 循環(huán)條件、循環(huán)變量初始化、改變循環(huán)變量的值,循環(huán)中應(yīng)避免的問題,不循環(huán) 發(fā)生場合:當(dāng)型循環(huán) 原因:循環(huán)變量初值不合適,循環(huán)初始條件為假 死循環(huán) 發(fā)生場合:當(dāng)型循環(huán)、直到型循環(huán) 原因:循環(huán)變量改變量不合適,循環(huán)條件始終為假,反面案例,n=10; while (n<10) n=n+1; printf(“n=%d”,n); for
9、(n=10;n<10;n++); printf(“n=%d”,n);,n=10; do n=n+1; while(n10); printf(“n=%d”,n); for(n=10;n<10;n--); printf(“n=%d”,n);,循環(huán)的入口與出口,循環(huán)入口 滿足循環(huán)條件即可進入循環(huán) 循環(huán)出口 正常出口:不滿足循環(huán)條件,正常退出 緊急出口:當(dāng)出現(xiàn)某種情況時,不管當(dāng)前是否滿足循環(huán)條件,立即退出,循環(huán)的緊急出口,break語句:結(jié)束整個循環(huán) continue語句:結(jié)束本次循環(huán) 一般出現(xiàn)在一條if語句中 if(n%3==0) break; 例4-20:判斷素數(shù)P111 算法描述:如果m不能夠被
10、2sqrt(m)之間任一整數(shù)整除,則m為素數(shù)。 流程圖 源程序,流程圖,,正常出口,緊急出口,,,,如何判斷退出方式?,正常退出,緊急退出,源程序,#include main() int m,i,k; printf(“Enter m=n”); scanf(%d, ,循環(huán)結(jié)構(gòu)程序設(shè)計應(yīng)用舉例,例4-22:換零錢問題P113 窮舉法(枚舉法):一一列舉各種可能情況,并判斷哪一種可能是符合要求的解 一種笨方法,源程序,void main() int x,y,z; printf(“5yun 1yun 0.5yunn”); n=0; for(x=1;x<=100;x++) for(y=1;y<=100;
11、y++) for(z=1;z<=100;z++) if(x+y+z==100 ,void main() int x,y,z; printf(“5yun 1yun 0.5yunn”); n=0; for(x=1;x<=100;x++) for(y=1;y<=100;y++) z=100-x-y; if(5*x+y+0.5*z==100) printf(“ %d %d %dn”, x,y,z); n++; printf(“Total %d”,n); ,循環(huán)結(jié)構(gòu)程序設(shè)計應(yīng)用舉例-2,例4-23:求平方根P115 程序流程 輸入數(shù)據(jù):欲求平方根的數(shù)據(jù) 處理數(shù)據(jù):求平方根 輸出結(jié)果:平方根 算法分析 迭代法P115 要求解X,可由給定的一個初值X0,通過迭代公式求得一個新值X1,這個新值X1比初值X0更接近要求的X,再以新值X1作為初值,即X1X0,重新按原來方法求X1,重復(fù)此過程直到|X1-X0|= 循環(huán)變量初始化:X0、X1 改變循環(huán)變量的值:迭代公式、 X1X0,流程圖,,,源程序,#include void main() float a,x0,x1,t; scanf(“%f”, ,試與P115程序進行比較,實驗四,實驗指導(dǎo)書實驗五:4,7,作業(yè),教材P119:三 教材P120:四,