版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
C語言程序設計第4章循環結構程序設計Contents本章目錄C語言程序設計·第4章循環結構01循環結構基本概念02while循環語句03do-while循環語句04for循環語句05多重循環與嵌套應用06綜合案例與實戰演練CHAPTER01循環結構基本概念理解循環的本質——讓計算機自動完成重復性工作Chapter4·ControlStructures程序設計的三大基本結構C語言程序由順序、選擇、循環三大基本控制結構組成。循環結構是唯一能實現代碼重復執行的結構,它使程序能夠高效處理批量數據和迭代計算任務,是編寫實用程序不可或缺的核心能力。Sequential順序結構代碼按書寫順序從上到下依次執行,每條語句只執行一次。這是程序最基礎的執行方式,適用于簡單的線性處理流程,如變量賦值、數據輸入輸出等操作。線性執行語句A→語句B→語句C,依次推進Selection選擇結構根據條件表達式的真假決定執行哪個分支,包括if-else語句和switch-case語句。適用于需要判斷的場景,讓程序具備決策能力,根據不同情況采取不同行動。條件分支條件判斷→真分支/假分支,二選一Iteration循環結構在滿足條件時反復執行某段代碼,直到條件不滿足才退出。包括for、while、do-while三種形式,是處理批量數據和迭代計算的核心手段,大幅提升代碼效率。迭代計算條件滿足→循環體執行→再次判斷Chapter04·循環結構為什么需要循環?當程序需要重復執行相同或相似的操作時,逐條編寫會導致代碼冗長且難以維護。循環結構通過條件控制實現代碼復用,將成千上萬次重復操作濃縮為幾行代碼,極大提升編程效率和程序可維護性。計算求和計算1+2+3+...+100的和:不用循環需寫100個加法表達式,用循環僅需4行代碼即可完成。4行代碼格式化報表打印1000行格式化報表:逐行編寫不現實,循環可配合變量自動遞增行號和內容。1000行遍歷查找遍歷數組查找目標元素:數據量可達數萬條,循環讓逐一檢查變得簡潔高效。數萬條輸入驗證用戶輸入驗證:需反復提示直到輸入合法為止,do-while循環天然適配這類交互場景。do-whileChapter4·LoopStructure循環結構的四大核心要素任何循環結構都由循環變量、循環條件、循環體和變量更新四個要素組成。缺少任何一個都可能導致邏輯錯誤或死循環,理解這四要素是掌握所有循環語句的通用鑰匙。循環變量記錄當前循環狀態,如i從初始值開始變化,是控制循環進程的基準。i=0循環條件決定循環是否繼續執行——結果為真(非0)時進入循環體,為假(0)時跳出循環。i≤100循環體反復執行的代碼塊,可包含任意合法的C語句,包括其他循環和條件判斷。{...}變量更新每次循環后必須更新循環變量,否則條件永遠為真將導致無限循環(死循環)。i++Chapter04·LoopStructureC語言的三種循環語句C語言提供while、do-while、for三種循環語句,核心區別在于條件判斷的時機和語法結構的緊湊程度。三者可以互相替代,但在不同場景下各有最佳適用性,選擇合適的循環能讓代碼更清晰、更高效。WHILE先判斷條件后執行循環體,適合循環次數不確定、需要根據運行時狀態決定是否繼續的場景DO-WHILE先執行一次循環體再判斷條件,保證循環體至少執行一次,適合用戶輸入驗證等交互場景FOR初始化、條件判斷、變量更新集中在一行,結構最清晰緊湊,是已知循環次數時的首選方案NESTING三種循環可以互相嵌套使用,也可以與if-else等選擇結構組合,構建復雜的程序邏輯大學生編程學習課堂實景CHAPTER02while循環語句最基礎的循環形式——先判斷條件,后執行循環體C語言程序設計·第4章循環結構while循環的語法與執行流程while循環采用"先判斷后執行"的機制,條件表達式為真時執行循環體,為假時跳出循環。這種設計意味著循環體可能一次都不執行,適用于循環次數不確定且可能無需執行的場景。語法格式基本格式while(條件表達式){循環體語句;},條件可以是關系、邏輯或數值表達式while(expr)語法格式真假判定非0值為真,執行循環體;結果為0視為假,跳出循環執行后續代碼非0=真語法格式大括號規則單條語句可省略{},多條語句必須用大括號包裹,否則僅首條在循環內{...}執行流程三步流程①計算條件→②為真則執行循環體并返回①→③為假則跳出循環Judge→Execute→Loop執行流程核心特點先判斷后執行,初始條件不滿足時可能一次都不執行,與do-while有本質區別先判斷后執行Chapter4·WhileLoop案例:用while循環計算1到100的和通過累加求和案例展示while循環的完整編程流程:定義循環變量和累加器→設置循環條件→在循環體中累加并更新變量→輸出結果。這是循環編程的基礎模板,后續復雜問題都基于此模式擴展。01定義循環變量i=1和累加器sum=0,while條件為i<=100,循環體執行sum+=i和i++兩個操作i=1,sum=0初始化02第1輪:i=1滿足條件,sum=0+1=1,i變為2。第2輪:sum=1+2=3,i變為3。如此反復直到i=101×100循環次數03當i=101時條件i<=100為假,循環結束,此時sum=5050。共執行了100次循環體5050最終結果04關鍵易錯點:忘記寫i++會導致死循環;sum初始值不為0會導致結果偏大;條件寫錯會多算或少算i++·sum=0·條件邊界Chapter4·LoopStructurewhile循環常見錯誤與注意事項while循環編程中最常見的三類錯誤是死循環、循環體范圍錯誤和條件表達式邏輯錯誤。這些錯誤編譯器無法檢測,需要程序員養成良好的編碼習慣。致命錯誤·死循環循環變量更新遺漏循環體中遺漏循環變量更新(如忘記i++),條件永遠為真導致程序無限運行,只能強制終止。i++致命錯誤·死循環條件表達式邏輯錯誤條件表達式邏輯錯誤(如i<=100寫成i>=100但i初始為1),也可能造成意外死循環或一次不執行。i<=100編碼規范建議始終使用大括號即使循環體只有一條語句也建議使用大括號{},防止后續添加語句時忘記擴展循環范圍。{}編碼規范建議變量初始化規范循環變量應在循環前明確初始化,避免使用未賦值的變量作為條件判斷依據。inti=0CHAPTER04·LOOP進階案例:不確定次數的while循環while循環的核心優勢在于處理循環次數不確定的場景。通過"哨兵值"機制(如輸入0結束),可以讓程序在運行時動態決定何時終止循環,這是for循環難以優雅實現的典型應用場景。01連續求和場景連續讀取用戶輸入的整數并求和,輸入0時結束。循環次數取決于用戶行為,編寫時無法預知具體迭代次數。02實現方式先用scanf讀取第一個數,while條件為num!=0,循環體內累加并讀取下一個數。結構清晰,邏輯緊湊。03哨兵值模式用特殊值(如0、-1、EOF)作為循環終止信號,廣泛用于輸入處理和文件讀取,是控制循環終止的經典設計模式。04與for循環對比此場景若用for循環需將初始化和更新分散在多處,代碼可讀性明顯不如while循環集中表達的優勢。CHAPTER03do-while循環語句先執行后判斷——保證循環體至少執行一次的循環結構SYNTAX&EXECUTIONFLOWdo-while循環的語法與執行流程do-while循環采用"先執行后判斷"的機制,循環體至少執行一次,然后再評估條件決定是否繼續。語法上需注意while后的分號不可省略,這是與while循環在書寫上的重要區別。語法格式do{循環體語句;}while(條件表達式);01do{}while();基本格式為do{}while();,注意末尾分號是語法必需,遺漏將導致編譯錯誤02循環體結構與其他循環一致,單條語句可省略大括號但建議保留,多條語句必須用大括號包裹執行流程①無條件執行循環體→②計算條件表達式→③真→返回①/假→跳出01第一步:無條件執行循環體。第二步:計算條件表達式。第三步:若為真返回第一步,若為假則跳出循環02核心特點是先執行后判斷,無論條件最初是否滿足,循環體保證至少執行一次,這是與while的本質區別CHAPTER04·LOOPSTRUCTUREwhile與do-while的關鍵對比while和do-while的核心差異在于條件判斷的時機:while先判斷后執行(可能0次),do-while先執行后判斷(至少1次)。while與do-while對比分析對比維度while循環do-while循環判斷時機先判斷條件,后執行循環體先執行循環體,后判斷條件最少執行次數0次(初始條件為假時不執行)1次(保證至少執行一次)末尾分號不需要(while(){}無分號)必須有(while();末尾加分號)典型場景不確定次數、可能無需執行輸入驗證、菜單顯示等至少一次while適合可能不執行的場景,do-while適合保證至少執行一次的交互場景CASESTUDY案例:用do-while實現輸入驗證用戶輸入驗證是do-while循環的最佳應用場景。程序必須先接收一次輸入再判斷是否合法,天然符合'先執行后判斷'的邏輯,代碼比while實現更簡潔、無重復代碼。場景要求用戶輸入1-100之間的成績,輸入不合法時反復提示重新輸入,直到輸入正確為止實現do塊內用printf提示+scanf讀取,while條件為score<1||score>100,不合法則繼續循環do-while優勢無需在循環前額外寫一次scanf,代碼無重復;while實現需在循環前和循環體內各寫一次讀取擴展應用同樣的模式可用于菜單系統、密碼驗證、數據格式校驗等交互場景CODEEXAMPLEdo{printf("請輸入成績(1-100):");scanf("%d",&score);}while(score<1||score>100);printf("有效成績:%d\n",score);do-while先執行一次輸入,再判斷合法性,天然適配驗證場景CHAPTER04for循環語句最緊湊、最常用的循環——初始化、判斷、更新一行搞定CHAPTER04·LOOPSTRUCTUREfor循環的語法結構與三個表達式for循環將初始化、條件判斷和變量更新三個控制要素集中在for語句的一行內,結構緊湊且邏輯清晰。三個表達式各司其職、分工明確,使循環的起始、終止和步長一目了然,是最適合已知循環次數的循環語句。表達式1·初始化如inti=0,僅在循環開始時執行一次,用于設置循環變量初值。可省略但分號不可省。init—執行1次條件表達式·判斷如i<100,每次循環前評估,為真繼續、為假跳出。省略則視為恒真,需break退出。cond—每輪評估表達式2·更新如i++或i+=2,每次循環體執行后自動執行,用于改變循環變量使循環趨向終止。update—每輪更新執行流程五步循環流程①執行表達式1→②判斷條件→③若為真執行循環體→④執行表達式2→⑤返回步驟②繼續判斷與while等價關系for(e1;cond;e2){body}等價于e1;while(cond){body;e2;},但for結構更緊湊直觀。CHAPTER04·LOOP案例:用for循環計算1到100的和同一個累加求和問題,for循環版本比while版本更簡潔:循環控制邏輯集中在一行for語句中,循環體內只保留核心業務邏輯,代碼可讀性和可維護性顯著提升。CORECODEfor(i=1;i<=100;i++)sum+=i;一行for語句完成初始化、條件判斷、步長更新與循環控制,循環體僅保留核心累加操作。01一行完成全部控制—for(i=1;i<=100;i++)sum+=i;將初始化、條件判斷、變量更新和累加集中于一行,代碼極其精簡。1行02對比while版本—while需在循環前初始化i=1、循環體內寫i++,控制邏輯分散三處;for集中一處管理。3→103可讀性優勢—看到for(i=1;i<=100;i++)即可知循環從1到100共100次,無需翻閱其他代碼段。100次04靈活變體—求偶數和改為for(i=2;i<=100;i+=2),僅調整步長即可完成需求變更,體現for循環靈活性。i+=2Chapter04·循環結構for循環的靈活用法與表達式省略for循環的三個表達式均可省略(分號不可省),提供了極大的編程靈活性。但省略會降低代碼可讀性,應在確實需要時才使用,初學者建議保持完整的三表達式寫法以養成良好習慣。表達式省略技巧三個表達式均可獨立省略,分號必須保留01省略表達式1—變量在循環外初始化,如inti=1;for(;i<=100;i++),分號必須保留02省略表達式2—更新在循環體內完成,如for(i=1;i<=100;){sum+=i;i++;}03省略條件表達式—構成無限循環for(;;),必須在循環體內用break退出,等價于while(1)高級用法多變量控制與遞減遍歷01逗號表達式控制多變量—for(i=1,j=100;i<j;i++,j--),同時操作兩個循環變量向中間收斂02循環變量遞減—for(i=100;i>=1;i--),從大到小遍歷,適用于倒序輸出或遞減計數場景ClassicCasesfor循環經典案例:階乘與字符遍歷for循環不僅適用于數值累加,還可用于階乘計算(累乘模式)和字符遍歷(利用ASCII碼遞增)。掌握不同數據類型的循環操作,能大幅擴展for循環的應用范圍。階乘計算n!=1×2×3×…×n,用for(i=1;i<=n;i++)result*=i實現,注意result初始值必須為1而非0??累乘模式與累加不同,初始值設為1才能保證乘法結果正確階乘增長極快,13!已超出int范圍,實際編程中需使用longlong或浮點類型避免整數溢出??階乘結果呈指數級增長,選擇合適的數據類型至關重要字符遍歷利用字符的ASCII碼特性,for(ch='A';ch<='Z';ch++)可依次打印所有大寫字母,ch++自動跳到下一個字符??字符在內存中以ASCII碼存儲,支持自增運算實現連續遍歷擴展應用:統計字符串中各類字符數量、大小寫轉換、凱撒密碼加密等,均可通過對字符做for循環實現??字符遍歷是文本處理的基礎,廣泛應用于加密解密與格式轉換Chapter04·LoopStructures三種循環語句全面對比while、do-while、for三種循環功能等價但各有側重:for適合已知次數、while適合未知次數、do-while適合至少執行一次。選擇循環類型的核心原則是讓代碼邏輯最自然、可讀性最高。三種循環語句對比總覽對比維度whiledo-whilefor判斷時機先判斷后執行先執行后判斷先判斷后執行最少執行0次1次0次初始化位置循環外部循環外部表達式1(循環內)更新位置循環體內部循環體內部表達式2(自動)最佳場景不確定次數至少執行一次已知次數三種循環功能等價,選擇依據是業務邏輯的自然表達和代碼可讀性CHAPTER05多重循環與嵌套應用循環套循環——解決多層重復執行問題的利器Chapter04·Loop多重循環的概念與執行機制多重循環通過在外層循環體內嵌套內層循環實現多層重復執行。外層每執行一輪,內層完整執行一遍,總執行次數為各層循環次數的乘積。理解這一機制是分析程序性能和避免性能陷阱的基礎。層級控制外層循環控制"行"或"大循環",內層循環控制"列"或"小循環",兩者通過獨立的循環變量分別管理。行×列乘法原理外層m次×內層n次=循環體總執行m×n次,如10×10的雙重循環共執行100次。10×10=100三層嵌套外層每輪→中層完整一遍→內層完整一遍,總次數為三層之積,需謹慎使用。m×n×p性能警示三重循環各100次即執行100萬次,嵌套層數過多會導致程序運行極慢,應盡量優化算法減少嵌套。100萬Chapter4·LoopStructure案例:用雙重循環打印直角三角形打印圖形是雙重循環的經典應用:外層循環控制行數,內層循環控制每行的字符數量。掌握"外層管行、內層管列"的原則后,可以通過調整內層循環的起止條件和打印字符來輸出各種幾何圖形。基礎雙重循環外層for(i=1;i<=5;i++)控制5行,內層for(j=1;j<=i;j++)控制每行打印i個星號,體現行列聯動關系。i→row,j→col逐行執行解析第1行i=1,內層循環1次打印1個*;第3行i=3,循環3次打印3個*。每行結束后printf輸出換行符。*→**→***變體——倒三角外層for(i=5;i>=1;i--),內層for(j=1;j<=i;j++)。行數遞減則每行星號遞減,輸出倒置直角三角形。i--遞減變體——右對齊星號前先打印(5-i)個空格,再打印i個星號,需要兩個并列的內層循環分別控制空格與字符。空格+星號案例·雙重循環案例:用雙重循環打印九九乘法表九九乘法表是雙重循環的經典實戰案例,外層控制被乘數(行),內層控制乘數(列),內層條件j<=i確保輸出下三角形式。multiplication_table.c1for(i=1;i<=9;i++){2for(j=1;j<=i;j++)3printf("%d×%d=%-4d",4j,i,i*j);5printf("\n");6}OUTPUT1×1=11×2=22×2=41×3=32×3=63×3=9?1×9=92×9=18?9×9=8101雙層循環結構i=1→9j=1→i外層i=1→9控制行數,內層j=1→i控制每行算式數量,輸出下三角形式02格式化輸出%-4d%-4d左對齊占4位,保證各列算式結果對齊整齊美觀03換行與邊界\nj<=i每行結束打印\n,條件j<=i確保第i行只輸出i個算式04完整輸出1×1=19×9=81從1×1=1到9×9=81,共輸出45個算式45個算式LoopControlFlow循環控制語句:break與continuebreak和continue是循環體內的兩個流程控制語句:break立即終止整個循環,continue跳過當前輪次進入下一輪。它們讓循環的執行流程更加靈活,但過度使用會降低代碼可讀性,應適度使用。break語句01立即終止所在層循環,跳出循環體執行后續代碼。常用于搜索找到目標后提前退出,避免無意義的繼續遍歷,提升程序執行效率。02在嵌套循環中,break只能跳出它所在的那一層循環,不能一次跳出多層,需配合標志變量或多層break實現完全退出。終止循環continue語句01跳過當前輪次循環體中剩余的語句,直接進入下一輪循環的條件判斷(for循環會先執行表達式2再判斷),保持循環繼續執行。02典型應用:過濾特定數據,如遍歷數組時遇到負數用continue跳過,只處理非負數,保持主邏輯清晰簡潔。跳過本輪CaseStudy·LoopControl案例對比:break與continue的實際效果通過兩個對比案例直觀展示break和continue的區別:break在找到目標后立即終止整個循環(提前退出),continue僅跳過當前輪次繼續后續循環(部分跳過)。兩者適用場景截然不同。break案例:查找第一個7的倍數for(i=1;i<=10;i++){if(i%7==0)break;printf("%d",i);}判斷i%7==0時執行break,輸出7后循環立即終止,8、9、10不再檢查若不使用break,循環會遍歷完所有10個數,浪費計算資源,在大規模數據搜索中性能差異更顯著Output7(僅1個數)continue案例:跳過3的倍數for(i=1;i<=10;i++){if(i%3==0)continue;printf("%d",i);}判斷i%3==0時執行continue,跳過printf,輸出12457810共7個數循環仍完整執行10輪,只是3、6、9這三輪跳過了打印操作,與break的"徹底終止"形成鮮明對比Output12457810(共7個數)Chapter06綜合案例與實戰演練融會貫通——用循環結構解決真實編程問題Chapter4·LoopStructures綜合案例:判斷素數判斷素數是循環與選擇結構綜合應用的經典案例。核心算法是用for循環逐一測試可能的因子,配合break提前退出。通過優化循環范圍(從2到根號n),可將時間復雜度從O(n)降至O(√n)。基本算法for(i=2;i<n;i++)逐一測試n%i==0,若整除則break標記非素數,循環結束后根據標記輸出結果。這是最基礎的素數判斷實現方式,邏輯清晰易于理解。for+break循環優化循環范圍縮小到i≤√n,因為若n有大于√n的因子必有小于√n的配對因子,減少約90%計算量。這是算法優化的關鍵技巧。O(√n)綜合知識點for循環控制遍歷范圍、if判斷整除條件、break提前退出、標志變量記錄判斷結果。四大核心概念在此案例中完整融合。4Concepts循環嵌套擴展外層循環遍歷2到100,內層用素數判斷邏輯,可輸出100以內所有素數,體現循環嵌套的實際價值。這是從單數判斷到批量處理的典型擴展。2–100CASESTUDY綜合案例:Fibonacci數列Fibonacci數列(1,1,2,3,5,8...)是遞推計算的典型案例,每一項等于前兩項之和。用循環實現遞推是編程中的基礎模式,通過兩個變量滾動更新實現鏈式依賴計算,廣泛應用于算法和數學建模。算法實現初始化a=1,b=1表示前兩項,for循環從第3項開始,每次計算c=a+b后更新a=b,b=c實現滾動遞推。這種雙變量交替更新的技巧避免了數組存儲,空間復雜度僅為O(1)。輸出前20項:11235813213455891442333776109871597258441816765拓展思考兔子繁殖問題:一對兔子每月生一對新兔,新兔兩個月后開始生育,第n月的兔子對數恰好是Fibonacci第n項。這一經典問題最早由意大利數學家Fibonacci在《算盤書》中提出,生動展示了數列的自然起源。性能對比:遞歸實現Fibonacci有大量重復計算(指數級),循環實現只需O(n)線性時間,效率差距巨大。對于第50項,遞歸需要約10^10次運算,而循環僅需50次迭代。CHAPTER4·EXHAUSTIVESEARCH綜合案例:水仙花數(窮舉搜索)水仙花數(各位數字立方和等于自身的三位數)是窮舉搜索的經典案例。通過for循環遍歷所有可能值,配合數學運算拆解各位數字并驗證條件,展示了計算機在大量重復計算中的優勢。01窮舉策略for(n=100;n<=999;n++)遍歷所有三位數,對每個n拆解:百位a=n/100、十位b=n/10%10、個位c=n%10100→99902驗證條件若a3+b3+c3==n則輸出結果,900個候選數全部逐一檢驗,計算機瞬間完成全部運算a3+b3+c3=n03搜索結果100–999范圍內僅有4個水仙花數,驗證了窮舉法能找到所有解且不遺漏任何一個153·370·371·40704思維延伸窮舉法效率非最高,但在解空間有限時最簡單可靠,是編程解決問題的基本策略之一基本
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 外傷傷口清創、換藥規范化護理
- 精算師考試精算師考試基礎鞏固題(完整版)
- 2026導游證地方導基模擬測試卷
- 精算師考試計算題專項訓練(帶評分標準)
- 淹溺性心臟停搏心肺復蘇專家共識
- 保險AI系統安全加固方案研究
- 2026 年大學秋季新生開學“腳踏實地奔赴心中山海”
- 人工智能在財務合規中的應用
- 2027年忻州職業技術學院單招職業技能考試題庫【真題匯編】附答案詳解
- 2027年福建省龍巖市高職單招職業技能考試題庫【輕巧奪冠】附答案詳解
- 2026江蘇徐州市市級機關印刷廠有限公司招聘工作人員2人筆試題庫附答案詳解(基礎題)
- 2026年特種設備P4液化石油氣瓶充裝模擬考試題庫試卷及答案
- 2026年寧夏中考(數學)真題含答案
- 消防文員會計試題及答案2026年
- 醫院手術室凈化裝修工程技術交底報告
- 喬木支撐專項施工方案(3篇)
- 數字化解決方案設計師職業資格認定考試復習題庫(附答案)
- 2026中國電子簽名法律效力與行業發展報告
- 2026年貴州遵鈦集團有限責任公司校園招聘考試模擬試題及答案解析
- 企業郵箱使用規范及郵件格式標準
- 2025年度婦產科實習同學出科考試題及答案
評論
0/150
提交評論