版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、第5章 循環(huán)結(jié)構(gòu),問題的提出:對于這樣的一類問題: 問題1. 從鍵盤輸入10個學生的成績,求總成績。 問題2. 求100以內(nèi)的素數(shù) 問題3. 求20!,用前面所學知識來解決這些問題是非常麻煩的 對問題1的一種辦法:設一個變量,每次輸入一個學生成績,累加后再輸入下一個學生成績,如下: scanf(“%f”, . 這樣重復10次,然后輸出s的值。,循環(huán)結(jié)構(gòu) 特點: 在給定條件(循環(huán)條件)成立時,反復執(zhí)行某程序段(又稱循環(huán)體),直到條件不成立為止。,5.1 循環(huán)結(jié)構(gòu) 概述 C語言可實現(xiàn)循環(huán)的語句: while 語句 do while 語句 for 語句,標號:語句; . goto 語句標號;,5.1
2、 while循環(huán)結(jié)構(gòu) 一般形式:,while(表達式) 循環(huán)體語句;,執(zhí)行流程:,特點:先判斷表達式,后執(zhí)行循環(huán)體 說明: 循環(huán)體有可能一次也不執(zhí)行 循環(huán)體可為任意類型語句 下列情況,退出while循環(huán) 條件表達式不成立(為零) 循環(huán)體內(nèi)遇break,return,goto 無限循環(huán): while(1) 循環(huán)體;,例 用while循環(huán)求,/*ch5_2.c*/ #include main() int i,sum=0; i=1; while(i=100) sum=sum+i; i+; printf(%d,sum); ,應注意: 1、計數(shù)器和累加器的初值; 2、一次循環(huán)后,循環(huán)控制變量的變化情況。
3、 3、跳出循環(huán)時循環(huán)控制變量的值應為多少?,例 顯示110的平方,#include main() int i=1; while(i=10) printf(%d*%d=%dn,i,i,i*i); i+; ,運行結(jié)果: 1*1=1 2*2=4 3*3=9 4*4=16 5*5=25 6*6=36 7*7=49 8*8=64 9*9=81 10*10=100,注意:循環(huán)控制變量值在循環(huán)體內(nèi)必須有所改變。,例如:請問下例中循環(huán)結(jié)束時i值為多少? i=1; while (i=100) putchar(*); i+;,這個循環(huán)永遠不會結(jié)束,因為循環(huán)控制變量i沒有在循環(huán)體內(nèi)被改變,i+; 不屬于循環(huán)語句。,
4、i+應該在循環(huán)體內(nèi)改變:, ,do 循環(huán)體語句; while(表達式);,執(zhí)行流程:,5.2 dowhile循環(huán)結(jié)構(gòu) 一般形式:,特點:先執(zhí)行循環(huán)體,后判斷表達式 說明: 至少執(zhí)行一次循環(huán)體 dowhile可轉(zhuǎn)化成while結(jié)構(gòu),例 用dowhile循環(huán)求,#include main() int i,sum=0; i=1; do sum+=i; i+; while(i=100); printf(%d,sum); ,例 while和dowhile比較,/*ch5_4.c*/ #include main() int i=1, grade,sum=0; do printf(“input grade:
5、”); scanf(%d, ,#include main() int i=1,sum=0,grade; while(i=10) printf(“input grade:”); scanf(%d, ,輸入10個成績,求總成績,一般形式:,for(循環(huán)變量賦初值;終止條件;循環(huán)變量增(減)值) 循環(huán)體語句; ,for (表達式1;表達式2;表達式3) 循環(huán)體語句; ,5.3 for循環(huán)結(jié)構(gòu),執(zhí)行流程:,說明: for語句中expr1, expr2 ,expr3 類型任意,都可省略,但分號;不可省 無限循環(huán): for(;) for語句可以轉(zhuǎn)換成while結(jié)構(gòu),expr1; while(expr2)
6、循環(huán)體語句; expr3; ,例:#include main( ) int i; for(i=0;i10;i+) putchar(a+i); ,輸出結(jié)果:abcdefghij,例:#include main( ) int i=0; for(;i10;i+) putchar(a+i); ,例:#include main( ) int i=0; for(;i10;) putchar(a+(i+); ,例:#include main( ) int i=0; for(;i10;putchar(a+i),i+) ; ,逗號表達式,逗號運算符的主要應用就在for語句中。 for語句中的表達式1和表達式3可
7、以是逗號表達式,特別是有兩個循環(huán)變量參與對循環(huán)的控制時。表達式1和表達式3為逗號表達式,將使程序顯得非常清晰。,main() int i,j,k=0; for(i=1,j=100;ij;i+,j-) k=k+i+j; printf(%dn,k); ,例 雙循環(huán)變量求,5.5 循環(huán)結(jié)構(gòu)的嵌套,外循環(huán): 內(nèi)循環(huán):,循環(huán)的嵌套 三種循環(huán)可互相嵌套,層數(shù)不限 外層循環(huán)可包含兩個以上內(nèi)循環(huán),但不能相互交叉 嵌套循環(huán)的執(zhí)行流程,(1) while() while() . ,(2) do do while( ); . while( );,(3) while() do while( ); . ,(4) for
8、( ; ;) do while(); while() . ,嵌套循環(huán)的跳轉(zhuǎn) 禁止: 從外層跳入內(nèi)層 跳入同層的另一循環(huán) 向上跳轉(zhuǎn),編寫程序輸出如下圖形。* * * * * * * * * * * *,#include main() int i, j; for(i=1; i=5; i+) for(j=1; j=i; j+) printf(*); printf(n); ,例 判斷m是否素數(shù),#include #include main() int m,i,k; scanf(%d, ,例 求300360之間素數(shù)的個數(shù),#include #include main() int m,n,i,j,k; n
9、=0; for(m=301;m360;m+) k=(int)sqrt(m); i=2; while(m%i!=0 ,5.5 輔助控制語句 break語句 功能:在循環(huán)語句和switch語句中,常和if語句一起使用,當滿足條件時終止程序并跳出循環(huán)體或開關體 說明: break只能終止并跳出最近一層的結(jié)構(gòu) break不能用于循環(huán)語句和switch語句之外的任何其它語句之中,例 break舉例:輸出之間的數(shù), 當數(shù)為時停止輸出,main() int n; for(n=1;n=10;n+) if(n=6) break; printf(%4d,n); ,例 小寫字母轉(zhuǎn)換成大寫字母,直至輸入非字母字符,#
10、include main() char c; while(1) c=getchar(); if(c=a ,continue語句 功能:跳過循環(huán)體中尚未執(zhí)行的語句,結(jié)束本次循環(huán),進行下一次循環(huán)體。 僅用于循環(huán)語句中,舉例:輸出之間的數(shù),當數(shù)為時不輸出,main() int n; for(n=1;n=10;n+) if(n=6) continue; printf(%4d,n); ,例 判斷m是否素數(shù),#include #include main() int m,i,k; scanf(%d, ,例 求300360之間素數(shù)的個數(shù),#include #include main() int m,n,i,j
11、,k; n=0; for(m=301;m360;m+) k=(int)sqrt(m); i=2; while(m%i!=0 ,例 求300360,600-680之間素數(shù)的個數(shù),#include #include main() int m,n,i,k; n=0; for(m=301;m360 ,例 求輸入的十個整數(shù)中正數(shù)的個數(shù)及其平均值,#include main() int i,num=0,a; float sum=0; for(i=0;i10;i+) scanf(%d, ,5.6 第5章實例解析,4 輸入三個實數(shù),判斷是否能構(gòu)成三角形,如能,說明是何種三角形,等邊,等腰,直角,#includ
12、e main() double d,x,y,z ; scanf(%lf,%lf,%lf, if(x+y=z|z+y=x|x+z=y|x=0|y=0|z=0) printf(“不能構(gòu)成三角形”); else if(x=y scanf(%f%f%f, ,輸入:a=1,b=3,c=2 輸出:x1=-1.00 x2=-2.00,每次循環(huán)后,重要變量的變化情況,【例】計算1!+ 3!+ 5!+ + 99!。 分析:該題實質(zhì)上是一個累加求和的問題,而且已知其循環(huán)的次數(shù)因此可以用for語句來實現(xiàn);對于累加應有選擇地進行,即只對奇數(shù)項求和,可以用if語句和continue語句組合來進行選擇性地累加。,#inc
13、lude main() int n; long t=1,sum=0;/注意累乘器及累加器的初值 for(n=1;n100;n+) t=t*n; if(n%2=0) continue; sum=sum+t; printf(sum=%ldn,sum); ,#include main( ) long sum=0,x,y,r,t=1; printf(input the x:); scanf(%ld, ,例.輸入一個二進制數(shù),輸出其對應的十進制數(shù),main( ) int i=1,n; float t,x=1,y=2,m,sum=0; while(i=30) m=y/x; sum=sum+m; t=y;
14、y=y+x; x=t; i+; printf(“n%ld”,sum); ,例.P82 2/1,3/2,5/3,8/5,/21/13.求該數(shù)列的前30項之和,例 (f0r)梯形法求數(shù)值積分,0,y,x,a,a+h,a+ih,a+(i+1)h,b,f(x),#include #include main() float a=0,b=3.14159,s,h,f=0; int i,n; scanf(%d, ,#include #define pi 3.14 main() float a=0,b=pi,s,h; int n,i; printf(Input n:); scanf(%d, ,循環(huán)舉例:1.顯示
15、輸入的字符, 如果按的是Esc鍵, 則退出循環(huán); 如果按的是Enter鍵, 則不做任何處理,繼續(xù)輸入下一個字符。,#include “conio.h” main( ) char ch; for (; ;) ch=getch(); /*不帶回顯的字符輸入函數(shù) */ if (ch=27) /* Esc鍵的ACSII碼為27*/ break; /*退出循環(huán)*/ if (ch=13) continue; /*按的是Enter:鍵,跳過字符輸出語句*/ putch(ch); /*顯示輸入的字符*/ ,例 求Fibonacci數(shù)列:1,1,2,3,5,8 ,的前40個數(shù)保存在一維數(shù)組中,main( ) l
16、ong int f1, f2 ; int i ; f1=1 ; f2=1 ; for( i=1; i20 ; i+ ) printf(“%12ld%12ld” ,f1, f2 ) ; if( i%2=0) printf( “n” ) ; f1 = f1 + f2 ; f2 = f2 + f1 ; ,循環(huán)嵌套舉例,循環(huán)嵌套舉例,問題:輸出圖形 * * * *,分析: 一共4行, 每行的 *數(shù)目與行號相同 算法: 行用 i 表示 , 當 i =4 do 輸出 i 個 * 換行 ,Main() int i,j; for ( i=1; i5; i+) printf(n); for (j=1; j=i;
17、 j+ ) putchar(*); ,例.求1000以內(nèi)最大的完數(shù)。完數(shù)就是其真因子的和等于其本身的數(shù)。 分析:用變量a從1000到1循環(huán),如果a等于其真因子的和,則循環(huán)結(jié)束。判斷a是否等于其真因子的和:用變量s求a的真因子的和,s初值為0,用變量I從1到a-1循環(huán),如果a%I=0,則s=s+i。得出s值后,若a=s,則a為所求。,main( ) int a,i,s; for(a=1000;a=1;a-) s=0; for(i=1;ia;i+) if(a%i=0) s=s+i; if(a=s) break; printf(“n%d”,a); ,打印3至1000之間的全部素數(shù),并求所有素數(shù)的個數(shù)。,5.7 本章小結(jié),本章重點介紹了C語言的三種循環(huán)結(jié)構(gòu):while、do-while、for循環(huán)結(jié)構(gòu)。在處理同一問題時,一般情況下三者可以互相替換。三種循環(huán)結(jié)構(gòu)還可以互相嵌套,即構(gòu)成多層循環(huán)。對于while和do-while循環(huán)結(jié)構(gòu),循環(huán)控制變量初始化的操作應在while和do-while語句之前完成,只在while后面指定循環(huán)條件,切記在循環(huán)體內(nèi)要包含使循環(huán)趨于結(jié)束的語句;for循環(huán)結(jié)構(gòu)可以在表達式1中初始化循環(huán)控制變量,表達式2指定循環(huán)條件,表達式3中包含使循環(huán)趨于結(jié)束的
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年四川現(xiàn)代職業(yè)學院單招職業(yè)技能考試備考試題帶答案解析
- 2026年山東工程職業(yè)技術大學單招職業(yè)技能筆試模擬試題帶答案解析
- 未來五年GF系列分散機企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略分析研究報告
- 未來五年木材和竹材采運企業(yè)縣域市場拓展與下沉戰(zhàn)略分析研究報告
- 未來五年青蛙養(yǎng)殖企業(yè)縣域市場拓展與下沉戰(zhàn)略分析研究報告
- 未來五年淡水捕撈蟹企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略分析研究報告
- 未來五年采礦專用設備修理企業(yè)縣域市場拓展與下沉戰(zhàn)略分析研究報告
- 2026年江門職業(yè)技術學院單招職業(yè)技能筆試模擬試題帶答案解析
- 養(yǎng)老院老人健康飲食營養(yǎng)師培訓制度
- 2025-2030農(nóng)業(yè)市場供需現(xiàn)狀分析及投資價值規(guī)劃分析報告
- 全球隱球菌病指南(2024版):診斷與管理課件
- 市場營銷策劃實踐實習報告范例
- 2026年中央廣播電視總臺招聘124人備考筆試題庫及答案解析
- 擔保取消協(xié)議書
- 2025國家統(tǒng)計局濱海新區(qū)調(diào)查隊輔助調(diào)查員招聘3人備考筆試試題及答案解析
- 星羅棋布的港口課件
- 2025天津市機電工藝技師學院招聘派遣制社會化21人(第二批)考試題庫附答案
- 統(tǒng)一頂新食品成品倉庫管理的手冊
- 2025年洛陽市公安機關招聘輔警501名考試題庫附答案
- 金剛網(wǎng)窗合同范本
- 2025年云南昆明巫家壩建設發(fā)展有限責任公司及下屬公司第四季度社會招聘31人筆試參考題庫附帶答案詳解(3卷)
評論
0/150
提交評論