版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第五章 循環(huán)結(jié)構(gòu)程序設(shè)計山西財經(jīng)大學(xué)華商學(xué)院C語言程序設(shè)計while語句do-while語句for語句舉例 break語句和continue語句 循環(huán)的嵌套 在C語言中可以用以下語句來實(shí)現(xiàn)循環(huán):1.用while語句;2.用do-while語句;3.用for語句;4. 用goto語句和if語句構(gòu)成循環(huán)。循環(huán):就是在給定的條件成立時反復(fù)執(zhí)行某一程序段,被反復(fù)執(zhí)行的程序段稱為循環(huán)體。S=1+2+3+1000S12100S+1SS+2SS+100S作100次加法S+iS累加器計數(shù)器5.1 while語句1、while 語句的形式: while (表達(dá)式) 循環(huán)體; 2 、 while 語句 常稱為“當(dāng)
2、型”循環(huán)語句。真(非零)表達(dá)式 循環(huán)體假(零)while (表達(dá)式)后面沒有分號3、說明:先判斷表達(dá)式,后執(zhí)行語句。表達(dá)式同if語句后的表達(dá)式一樣,可以是任何類型的表達(dá)式。 循環(huán)體多于一句時,用一對 括起。while循環(huán)結(jié)構(gòu)常用于循環(huán)次數(shù)不固定,根據(jù)是否滿足某個條件決定循環(huán)與否的情況。 i=1; s =0; while (i0) printf( + ); else printf( - ); 判斷正負(fù)號 scanf( %f ,&x); 避免死循環(huán)!#include stdio.h void main()char ch;int num=0;ch=getchar();【例5-2】 統(tǒng)計從鍵盤輸入的一
3、行字符的個數(shù)(以回車鍵作為輸入結(jié)束標(biāo)記)。while(ch!=n) 判斷是否輸入結(jié)束 num+; printf(num=%dn,num); num+;ch=getchar();5.2 do-while語句1、 do-while的形式: do 循環(huán)體; while (表達(dá)式)2、 do-while語句 常稱為“直到型”循環(huán)語句。真(非零)表達(dá)式 循環(huán)體假(零);先執(zhí)行語句,后判斷表達(dá)式。注意在if、while語句中,表達(dá)式后面都沒有分號,而在do-while語句的表達(dá)式后面則必須加分號。do-while和while語句相互替換時,要注意修改循環(huán)控制條件 。第一次條件為真時,while,do-wh
4、ile等價;第一次條件為假時,二者不同main()int sum=0,i;scanf(“%d”,&i); while (i=10) sum=sum+i; i+; printf(“sum=%dn”,sum); main()int sum=0,i;scanf(“%d”,&i); do sum=sum+i; i+; while (i=10) :printf(“sum=%dn”,sum); sum=0 sum=11i=11 有以下程序段 int n=0,p; doscanf(%d,&p);n+; while(p!=12345 &n3); 此處dowhile循環(huán)的結(jié)束條件是( ) A) P的值不等于12
5、345并且n的值小于3 B) P的值等于12345并且n的值大于等于3 C) P的值不等于12345或者n的值小于3 D) P的值等于12345或者n的值大于等于3main() int s=0,a=1,n; scanf(%d,&n); do s+=1; a=a-2; while(a!=n); printf(%dn,s); 若要使程序的輸出值為2,則應(yīng)從鍵盤給n輸入的值是 A) -1B) -3C) -5D) 0【例5-3】 用do-while語句編寫程序統(tǒng)計從鍵盤輸入的一行非空字符的個數(shù)(以回車鍵作為輸入結(jié)束標(biāo)記)。 #include stdio.hvoid main()char ch; int
6、 num=0; ch=getchar(); do num+; ch= getchar(); while(ch!=n); printf(num=%dn,num); 5.3 for語句1、for的形式:for (初始表達(dá)式1;條件表達(dá)式2;循環(huán)表達(dá)式3) 循環(huán)體 ; 表達(dá)式1:循環(huán)開始前為循環(huán)變量設(shè)置初始值。表達(dá)式2:控制循環(huán)執(zhí)行的條件,決定循環(huán)次數(shù)。表達(dá)式3:循環(huán)控制變量修改表達(dá)式。循環(huán)體語句: 被重復(fù)執(zhí)行的語句。表達(dá)式3計算表達(dá)式1循環(huán)體判斷表達(dá)式2零非零for的下一條語句2、執(zhí)行過程 for(i=1;i=100;i+) sum=sum+i; 例如:它相當(dāng)于以下語句: i=1; while (
7、i=100) sum=sum+i; i+; 表達(dá)式1;while(表達(dá)式2)表達(dá)式3;3、 說明三個表達(dá)式都可以是逗號表達(dá)式。 三個表達(dá)式都是任選項,都可以省略,但要注意省略表達(dá)式后,分號間隔符不能省略。 4. for語句中表達(dá)式省略的形式(1)for語句一般形式中的“表達(dá)式1”可以省略; 如: sum=0;i=1; for ( ; i100) break; sum=sum+i; (3)表達(dá)式3也可以省略,但此時保證循環(huán)能正常結(jié)束如: for(sum=0,i=1;i=100;) sum=sum+i; i+; (4) 可以省略表達(dá)式1和表達(dá)式3,只有表達(dá)式2,如: i=1; sum=0; for
8、 (;i=100;) sum=sum+i; i+; i=1;sum=0;while (i100) break; sum=sum+i; i+; 相當(dāng)于(6)循環(huán)體為空語句對for語句,循環(huán)體為空語句的一般形式為: for (表達(dá)式1;表達(dá)式2;表達(dá)式3) ; 如:for(sum=0,i=1;i=100;sum+=i, i+) ;(1)在進(jìn)入累加前先給累加器賦初值(一般為0); (2)用循環(huán)語句實(shí)現(xiàn)累加;for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量改變規(guī)律) (3)循環(huán)體語句的設(shè)計。 累加器當(dāng)前值=累加器原值+循環(huán)變量當(dāng)前值 ;典型例題分析【例5-4】 求累加和1+2+3+1000基本方法:屬于“累
9、加器”類型問題。 累加器賦初值求偶數(shù)和2+4+6+100參考程序:void main() long int k,s; s=0;for(k=1;k=1000;k+) s=s+k;printf( s=%ld ,s);累加思考(1)給累乘器賦初值,一般為1;(2)用循環(huán)語句實(shí)現(xiàn)累乘;for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量改變規(guī)律)(3)循環(huán)體設(shè)計。 累乘器當(dāng)前值=累乘器原值*循環(huán)變量當(dāng)前值; 例5-5: 求累乘積。 如:123.100基本方法:屬于“累乘器”類型問題。 累乘器賦初值參考程序:void main() int s=1; int k;for(k=1;k=100;k+) s=s*k;pr
10、intf( s=%d ,s);累乘例5-6 判斷一個數(shù)是否為素數(shù)?一個數(shù)x在2,sqrt(x)范圍內(nèi)沒有因子,我們就稱其為素數(shù)(質(zhì)數(shù))主要編程方法:循環(huán)變量終值法、標(biāo)記變量法#include math.h void main()int x,k;scanf( %d ,&x);排除法:如果有因子,不再往下判斷是否是素數(shù)循環(huán)變量終值法for(k=2;ksqrt(x) printf( %d is a prime ,x);else printf( %d is not a prime ,x);#include math.h void main()int x,k,f=1;scanf( %d ,&x);排除法
11、:如果有因子,不再往下判斷是否是素數(shù)for(k=2;k=sqrt(x);k+)if(x%k=0) f=0;break; if(f=1) printf( %d is a prime ,x);else printf( %d is not a prime ,x);標(biāo)記變量法例5-7 用0-9這十個數(shù)字可以組成多少無重復(fù)的三位數(shù)? 編程方法: “枚舉法”按問題本身的性質(zhì),一一列舉出該問題所有可能的解,并在逐一列舉的過程中,檢驗每個可能解是否是問題的真正解,若是,我們采納這個解,否則拋棄它。對于所列舉的值,既不能遺漏也不能重復(fù)。#include stdio.hvoid main() /*a,b,c代表百
12、位、十位、個位*/int x,a,b,c,num=0; /*num存放滿足條件的數(shù)的個數(shù),注意num要賦初值*/ for(x=100;x=999;x+) a=x/100;b=x/10%10;c=x%10; if(a!=b&a!=c&b!=c) num+; printf(%5d,x); printf(nnumber=%d,num); 編程方法: “遞推法” 例5-8 裴波那契數(shù)列的第1、2項分別為1、1,以后各項的值均是其前兩項之和。求前30項菲波那契數(shù)。所謂遞推法就是從初值出發(fā),歸納出新值與舊值間的關(guān)系,直到求出所需值為止。新值的求出依賴于舊值,不知道舊值,無法推導(dǎo)出新值。數(shù)學(xué)上遞推公式正是這
13、一類問題。 f1-第一個數(shù) f2-第二個數(shù) f3-第三個數(shù) f1=1; f2=1; f3=f1+f2; 以后只要改變f1,f2的值,即可求出下一個數(shù). f1=f2;f2=f3; f3=f1+f2;遞推void main()long f1=1, f2=1, f3; int k;參考程序:printf( %ldt%ldt , f1,f2);for(k=3;k=30;k+) f3=f1+f2; printf( %ldt ,f3); f1=f2; f2=f3; 注意f1、f2、f3、k 的類型遞推1.break語句(1) 語句形式: break;(2)作用: 結(jié)束break所在的 switch語句。
14、結(jié)束當(dāng)前循環(huán),跳出break所在的循 環(huán)結(jié)構(gòu)。 5.4 break語句和continue語句(1)語句形式: continue;(2)語句作用: 結(jié)束本次循環(huán)。2、continue 語句(3)語句執(zhí)行流程: continue語句可以結(jié)束本次循環(huán),即不再執(zhí)行循環(huán)體中continue 語句之后的語句,轉(zhuǎn)入下一次循環(huán)條件的判斷與執(zhí)行。 break和continue語句break語句跳出本層循環(huán) while(i100) break; . continue語句結(jié)束本次循環(huán) while(i100) continue; . 【例5-9】 求300以內(nèi)能被17整除的最大的數(shù)。#include stdio.hv
15、oid main()int x,k;for(x=300;x=1;x-)if(x%17=0) break; printf(x=%dn,x); 找到滿足條件的最大數(shù),結(jié)束循環(huán)【例5-10】 求300以內(nèi)能被17整除的所有整數(shù)。 #include stdio.hvoid main()int x;for(x=1;x=300;x+)if(x%17!=0) continue; printf(%dt,x); 在循環(huán)體語句中又包含有另一個完整的循環(huán)結(jié)構(gòu)的形式,稱為循環(huán)的嵌套。5.5 循環(huán)的嵌套嵌套在循環(huán)體內(nèi)的循環(huán)體稱為內(nèi)循環(huán),外面的循環(huán)稱為外循環(huán)。while 、do-while、for三種循環(huán)都可以互相嵌套。
16、循環(huán)語句之間的關(guān)系for(.).for(.).內(nèi)循環(huán)外循環(huán)for(.).for(.). 并列循環(huán)嵌套循環(huán)交叉循環(huán)for(.).for(.). 錯誤例5-11:輸出圖形: * * * *控制行數(shù):共4行, 行號用k表示。每一行輸出內(nèi)容: 1)光標(biāo)定位3)每輸完一行光標(biāo)換行(n)2)每一行有2*k-1個*號(k 為行數(shù))雙重循環(huán)5.6 循環(huán)結(jié)構(gòu)程序設(shè)計舉例 #include stdio.h void main() int k1,k2; for(k1=1;k1=4;k1+) putchar(t); for(k2=1;k2=k1;k2+) putchar(b);for(k2=1;k2=k1*2-1;k
17、2+) putchar(*);putchar(n); 定位(還可以用空格的方法)輸出【例5-12】 求 #include stdio.hvoid main()float s=0,f1=2,f2=1,f=1,t,n; /*累加器賦初值*/ for(n=1;n=10;n+) s=s+f*f1/f2; /*累加器當(dāng)前值=累加器原來的值+新的要加的數(shù)據(jù)*/ f=f*(-1);t=f2;f2=f1;f1=f1+t; /*為求下一個要加的數(shù)據(jù)做準(zhǔn)備*/ printf(s=%fn,s);【例5-13】輸入任意一個整數(shù),將其逆序輸出,例如輸入1234,輸出4321。include stdio.hvoid main()long y,n; scanf(%ld,&y) while(y!=0) n=y%10; printf(%ld,n); y=y/10; 本 章 小 結(jié)1.掌握while ,for及多重循環(huán)注意!2.掌握典型例題及方法 (1)累加、連乘、 判斷素數(shù)、裴波那契數(shù)列等 (2)枚舉、遞推方法 #in
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 西京學(xué)院《景觀小品設(shè)計》2021-2022學(xué)年第一學(xué)期期末試卷
- 西京學(xué)院《電力電子技術(shù)》2022-2023學(xué)年期末試卷
- 西華師范大學(xué)《篆刻技法》2021-2022學(xué)年第一學(xué)期期末試卷
- 西華師范大學(xué)《影視敘事藝術(shù)研究》2021-2022學(xué)年第一學(xué)期期末試卷
- 西華師范大學(xué)《西方行政學(xué)說史》2021-2022學(xué)年第一學(xué)期期末試卷
- 西華師范大學(xué)《區(qū)域分析方法》2023-2024學(xué)年第一學(xué)期期末試卷
- 西華師范大學(xué)《教師書寫與板書設(shè)計》2021-2022學(xué)年第一學(xué)期期末試卷
- 版油氣開發(fā)專業(yè)危害因素辨識與風(fēng)險防控?專項測試題及答案
- 交通運(yùn)輸綜合執(zhí)法(單多選)復(fù)習(xí)試題及答案
- 2024年專用設(shè)備行業(yè)政策分析:專用設(shè)備行業(yè)標(biāo)準(zhǔn)保障行業(yè)穩(wěn)定發(fā)展
- 2024年采礦權(quán)轉(zhuǎn)讓合同范本
- 雙手向前投擲實(shí)心球 課件
- 醫(yī)務(wù)人員職業(yè)暴露預(yù)防及處理課件(完整版)
- 期中考試模擬試卷 2024-2025學(xué)年人教版數(shù)學(xué)九年級上冊
- 朝鮮半島局勢演變
- 第5課 推動高質(zhì)量發(fā)展
- 中外政治思想史-形成性測試二-國開(HB)-參考資料
- 陜西2016-2020五年中考英語分題型考點(diǎn)統(tǒng)計
- 紫羅蘭永恒花園
- 23秋國家開放大學(xué)《EXCEL在財務(wù)中的應(yīng)用》形考作業(yè)1-4參考答案
- 數(shù)字經(jīng)濟(jì)與智慧物流發(fā)展趨勢課件
評論
0/150
提交評論