版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言第5章循环结构程序设计掌握while、do-while、for三大循环语句,构建高效程序逻辑Contents本章知识导航C语言第5章·循环结构程序设计01循环的本质与三要素02while循环语句03do-while循环语句04for循环语句05循环嵌套与控制语句06综合应用案例CHAPTER01循环的本质与三要素从重复执行的需求出发,理解循环结构的核心思想与基本组成Chapter05·LoopStructure问题引入:为什么需要循环?循环的本质是让相同代码不必重复书写,通过循环结构实现自动重复执行,从而大幅提高程序编写效率并减少源代码存储空间。01无循环写法:打印10行星号需写10条printf语句,代码冗长且难以维护,修改行数需逐条增删。10条语句02有循环写法:for(inti=1;i<=10;i++)printf("************\n"),仅用一行循环即可等价完成。3行代码03循环的核心价值:将重复性操作交由计算机自动执行,程序员只需关注逻辑本身而非机械重复。自动执行04现实场景类比:批量处理学生成绩、遍历数组元素、文件逐行读取等都需要循环来驱动。批量驱动CHAPTER05·LOOPSTRUCTURE循环结构三要素所有循环结构都围绕三个核心要素构建:循环变量初值决定从哪里开始,循环控制条件表达式决定何时继续,循环体决定每次重复做什么。无论while、do-while还是for语句,本质都是三要素的不同语法表达形式。循环变量初值循环从何时开始执行,如i=1设定计数器起始位置,是整个循环的起点。i=1循环控制条件满足什么条件时继续循环,如i<=10判断计数器是否越界,为假时退出。i<=10循环体每次循环反复执行的语句块,如printf和i++,是循环真正要完成的工作。printf·i++三要素缺一不可缺少初值则无法启动,缺少条件则死循环,缺少循环体则循环毫无意义。3/3CHAPTER02while循环语句先判断后执行的当型循环,掌握其语法结构与执行流程CHAPTER05·LOOPCONTROLwhile语句的语法与执行流程while循环是典型的"当型循环",先判断表达式真伪再决定是否执行循环体,条件为真则执行、为假则退出。01语法形式:while(表达式){循环体},表达式为循环控制条件,非0时为真继续执行,0时为假退出循环02执行流程:先判断表达式→为真执行循环体→再次判断→为真再执行→直到表达式为假才退出循环03当型特征:若初始条件即为假(如i=5时判断i<5),循环体一次也不会执行,程序直接跳过while块04关键注意:while(表达式)后不能加分号,否则等同于空循环体,可能导致死循环或逻辑错误EXECUTIONFLOW程序执行到while判断表达式TRUE≠0执行循环体↑回到判断FALSE=0退出循环CASESTUDY·WHILELOOP案例:while循环求1到100的累加和通过初始化变量、条件判断和累加操作,演示while循环的经典应用场景Python代码示例#初始化变量total=0i=1#while循环累加while
i<=100:total+=ii+=1print("1到100的累加和为:",total)执行结果1到100的累加和为:5050核心要点total=0i=1初始化:设置累加器total=0和计数器i=1i<=100条件判断:循环继续的条件是i<=100循环体:每次迭代执行累加和计数器自增i终止条件:当i变为101时循环结束执行流程图开始total=0,i=1i<=100?NYtotal+=i;i++返回条件判断输出total=5050结束数学验证S=n(n+1)/2=100×101/2=50501初始化变量2条件判断3执行累加4输出结果COMMONPITFALLSwhile循环的注意事项与常见错误while循环最常见的三类错误包括:多语句循环体缺少花括号导致只控制一条语句、缺少使循环趋于结束的语句造成死循环、以及while(表达式)后误加分号形成空循环体。花括号陷阱循环体含多条语句时必须用{}括起,否则while仅控制第一条语句,后续语句变成循环外的独立代码,造成逻辑错误且难以排查。{}REQUIRED死循环根源循环体内必须包含使条件趋于为假的语句(如i++),若遗漏则条件永远为真,程序陷入无限循环,导致系统资源耗尽或程序崩溃。i++MISSING分号误用while(i<=100);末尾分号等同于空循环体,后续花括号代码块与while无关,导致逻辑混乱,程序行为与预期完全不符。EMPTYBODY调试建议遇到程序无响应时优先检查循环条件是否正确更新,可用printf在循环体内输出变量值进行跟踪,快速定位问题所在。PRINTFTRACKCHAPTER03do-while循环语句先执行后判断的直到型循环,至少执行一次循环体的特殊结构SYNTAX&FLOWdo-while语句的语法与执行流程do-while循环属于"直到型循环",先无条件执行一次循环体再判断条件,为真则继续、为假则退出。与while最大的区别在于:do-while保证循环体至少执行一次,即使首次判断条件就为假也不会跳过,这一特性在输入验证等场景中非常实用。01语法形式do{循环体}while(表达式);—注意while后的分号是语句结束标志,不可省略02执行流程先执行循环体→判断表达式→为真则回到循环体→为假则退出,至少执行一次循环体03与while的核心差异while先判断后执行(可能0次),do-while先执行后判断(至少1次)04典型应用场景用户输入验证、菜单选择等"至少需要执行一次,再根据反馈决定是否重复"的交互场景CHAPTER05·LOOPSTRUCTURE案例:do-while统计学生成绩利用do-while循环录入10名学生成绩并计算总分和平均分,核心逻辑是在循环体内完成scanf读取和sum累加,通过i++控制录入次数。01初始化设置i=1作为录入计数器,sum=0作为总分累加器,ave用于存储最终的平均分结果i=1,sum=002循环体逻辑scanf读取单个学生成绩score,执行sum=sum+score累加,i++推进计数器至下一位学生sum+=score03条件控制while(i<=10)确保恰好录入10名学生成绩,第10次录入后i=11,条件为假退出循环i<=1004结果计算ave=sum/10.0(用10.0而非10,确保浮点除法避免整数截断),输出总分和平均分sum/10.0Chapter5·LoopStructureswhile与do-while对比分析while和do-while在逻辑上可以互相改写,但执行顺序与最少执行次数存在本质差异。选择哪种取决于业务需求。while(当型循环)执行逻辑先判断表达式真伪,为真才执行循环体,初始条件为假时循环体一次也不执行语法while(表达式){循环体},while后无分号,循环体多条语句需花括号适用场景已知初始状态可能不满足条件的累加、遍历、搜索等确定性任务满足条件才做·可能0次do-while(直到型循环)执行逻辑先无条件执行一次循环体,再判断表达式,为真继续、为假退出,至少执行一次语法do{循环体}while(表达式);注意末尾分号不可省略,这是语句结束标志适用场景用户输入验证、菜单交互、密码确认等"至少执行一次再根据结果决定"的交互任务至少做一次再决定·至少1次Chapter04for循环语句三要素浓缩于一行的万能循环,C语言中使用频率最高的循环结构Syntax&Executionfor语句的语法结构与执行流程for循环将三要素浓缩为三个表达式写在同一行:表达式1设定初值(仅执行一次),表达式2作为控制条件(每次循环前判断),表达式3更新循环变量(每次循环体执行后执行)。这种紧凑结构使循环逻辑一目了然,是C语言中最常用、最灵活的循环形式。01语法总览for(表达式1;表达式2;表达式3){循环体},三个表达式用分号分隔,缺一不可。这是C语言中结构最紧凑的循环语句,将初始化、条件判断和变量更新整合在一行代码中。语法模板for(;;)02初值如i=1,仅在循环开始前执行一次,后续不再重复执行。通常用于声明循环变量并赋初始值,为整个循环过程奠定计数基础,是循环的起点设置。示例代码i=103条件如i<=10,每次进入循环体前先判断,为真执行、为假退出。这是循环的守门员,决定循环是否继续执行,条件表达式结果为0时循环终止。判断条件i<=1004更新如i++,每次循环体执行完毕后执行,推动循环变量向终止条件靠近。更新操作确保循环能够渐进收敛,避免陷入无限循环,是循环进度的推进器。自增运算i++Chapter5·LoopStructurefor循环的省略写法与灵活用法for循环的三个表达式均可省略,但分号必须保留。省略初值则需提前初始化,省略条件则变为无限循环(需break退出),省略更新则需在循环体内手动递增。这种灵活性使for能适配几乎所有循环场景,从简单计数到复杂多变量控制都能胜任。省略表达式1:初值循环变量已在for外部初始化时使用,如for(;i<=10;i++),分号不可省略INITOMITTED省略表达式2:条件条件永远为真,等价于while(1)无限循环,必须在循环体内用break语句主动退出INFINITELOOP省略表达式3:更新循环变量更新移至循环体内部完成,如for(i=1;i<=10;){s+=i;i++;}UPDATEMOVED逗号表达式技巧可在一个for语句中同时控制多个循环变量,如for(i=1,j=10;i<j;i++,j--)MULTI-VARChapter05·LoopStructures案例:for循环计算n的阶乘利用for循环实现n!=1×2×3×...×n的阶乘计算,核心是用变量fac作为累乘器(初值为1),在for(i=1;i<=n;i++)循环体内执行fac=fac*i逐步累乘。01累乘器初始化fac初始化为1(非0),这是阶乘计算的关键:若fac=0则任何乘法结果都是0fac=102循环控制for(i=1;i<=n;i++)控制循环次数,i从1递增到n,恰好执行n次累乘操作i→n03逐步累乘循环体fac=fac*i逐步累乘:i=1时fac=1,i=2时fac=2,i=3时fac=6,i=4时fac=24...fac*=i04溢出注意阶乘增长极快,13!超出int范围(约21亿),大数阶乘需使用double或longlong类型13!Chapter5·LoopComparison三种循环语句横向对比while、do-while和for三种循环在逻辑上可以互相转换,但在语法结构、执行特征和适用场景上各有优势。for循环因三要素集中、代码紧凑而成为使用频率最高的选择。三种循环语句核心特征对比对比维度whiledo-whilefor循环类型当型循环直到型循环当型循环执行顺序先判断后执行先执行后判断先判断后执行最少执行次数0次1次0次三要素位置分散在循环内外分散在循环内外集中在for()内最佳适用场景循环次数不确定至少执行一次的交互循环次数已知三种循环逻辑等价但各有适用场景,for因代码紧凑成为最常用选择CHAPTER05循环嵌套与控制语句多层循环的嵌套逻辑,以及break和continue对循环流程的精细控制NESTEDLOOP循环嵌套的概念与执行原理循环嵌套是指在一个循环的循环体内包含另一个完整的循环结构。执行规律为:外循环每执行一次,内循环必须完整地执行一遍。总执行次数等于外循环次数乘以内循环次数。嵌套结构外循环的循环体内包含内循环,内循环作为外循环的一条语句被反复完整执行。外层控制整体流程,内层处理细节逻辑。内外层执行规律外循环变量每变化一次,内循环变量要从初值到终值完整遍历一遍。内循环始终优先于外循环的下一轮迭代。完整遍历总执行次数内循环体实际执行次数=外循环次数×内循环次数。例如外层循环4次、内层循环5次,则内循环体共执行20次。4×5=20自由组合while、do-while、for三种循环可以任意互相嵌套,嵌套层数理论上没有限制。可根据算法需求灵活选择循环类型。∞层NESTEDLOOP案例:嵌套循环打印九九乘法表利用for循环嵌套实现九九乘法表:外循环控制行号,内循环条件j≤i确保形成下三角形状,是嵌套循环中条件设计的精妙之处。外循环控制行for(i=1;i<=9;i++)i从1到9共9行,每次外循环结束前换行,控制整体输出结构9行内循环控制列for(j=1;j<=i;j++)第i行打印i个等式,j≤i是形成下三角的关键条件设计j≤i格式化输出printf("%d*%d=%-3d",i,j,i*j)%-3d左对齐保证列间距整齐美观,每个等式固定宽度输出%-3d执行效率Σ(i=1to9)i=45总计45次内循环体,而非9×9=81次,条件设计精妙提升效率45次LOOPCONTROL·BREAKbreak语句:提前终止循环break语句用于立即终止当前所在的最内层循环,无条件跳出循环体执行后续代码,在搜索与验证场景中可显著减少不必要的计算开销。01语法形式在循环体内写入break;即可立即终止当前循环,跳到循环体之后的下一条语句执行。break;02素数判断遍历2至m−1,若m%i==0则break跳出;循环后i<m说明存在因子,非素数。i<m→非素数03只跳一层break只能终止包含它的最内层循环,无法一次跳出多层嵌套,需配合标志变量。INNERMOSTONLY04与switch区分在switch中终止case分支,在循环中终止循环体,功能相似但作用域不同。SCOPELoopControlcontinue语句:跳过本次循环continue语句用于跳过当前这一轮循环中剩余的语句,直接进入下一次循环的条件判断。与break的"终止整个循环"不同,continue只是"跳过这一轮",循环本身仍在继续。核心机制在循环体内写入continue;立即跳过本次循环剩余语句,回到循环条件判断处for循环:continue跳过后仍会执行表达式3(如i++),再判断表达式2是否继续while/do-while:直接跳回条件判断,若更新语句在continue之后则可能被跳过01根本差异break终止整个循环,跳出后不再执行后续轮次;continue仅跳过当前轮次,后续轮次正常执行02案例对比1→10循环1到10,遇到3时break输出1,2;遇到3时continue输出1,2,4,5,6,7,8,9,1003选择依据需要"找到就停"用break(如搜索),需要"跳过不满足的"用continue(如过滤)CHAPTER06综合应用案例融合循环嵌套、break与continue的实战编程练习CASESTUDY案例:判断素数(for+break综合)判断整数m是否为素数:用for循环从2到m-1逐个试除,若m%i==0则break提前退出表明不是素数;若循环正常结束(i==m)则为素数。算法思路从i=2开始逐个试除到i=m-1,若存在m%i==0则m不是素数,break跳出循环m%i==0循环后判断若i<m说明break提前退出(非素数),若i==m说明循环正常结束(是素数)i==m性能优化试除范围可缩小到i≤sqrt(m),因为大于sqrt(m)的因数必有对应小于sqrt(m)的因数O(√m)扩展应用外层嵌套for(m=2;m≤100;m++)可输出100以内所有素数,形成双层循环+break方案2–100CASESTUDY·循环结构案例:找出所有三位水仙花数水仙花数是指各位数字立方和等于自身的三位数(如153=1³+5³+3³)。用for循环遍历100到999,对每个数拆分百位、十位、个位,计算立方和并判断。三位水仙花数共4个:153、370、371、407。循环遍历for(n=100;n<=999;n++)遍历所有三位数,确保不遗漏任何一个候选数字,覆盖完整的搜索空间100–999数位拆分百位a=n/100(整除),十位b=n/10%10(先整除再取余),个位c=n%10,分别提取三个数位a·b·c立方和验证计算a³+b³+c³,若结果等于n则n是水仙花数,用printf输出符合条件的数字a³+b³+c³=n验证结果三位水仙花数共4个——153(1+125+27)、370、371、407(64+0+343),全部找出4个CASESTUDY案例:嵌套循环打印等腰三角形打印n行等腰三角形需要一层外循环控制行号、两层内循环分别控制空格和星号:第i行打印n-i个空格后打印2i-1个星号。01外循环控制行数:for(i=1;i<=n;i++)从1到n共打印n行,每行结束printf('\n')换行n行02空格循环:for(j=1;j<=n-i;j++)第i行打印n-i个空格,保证星号居中对齐形成左侧斜边n−i03星号循环:for(k=1;k<=2*i-1;k++)第i行打印2i-1个星号,1,3,5,7…递增形成三角形主体2i−104图案变化:修改星号循环条件可打印菱形、沙漏等变体图案,核心都是找出行号与字符数的数学关系变体SOURCECODEfor(i=1;i<=n;i++){//打印n-i个空格for(j=1;j<=n-i;j++)printf("");//打印2i-1个星号for(k=1;k<=2*i-1;k++)printf("*");printf("\n");}等腰三角形·n=5时输出1,3,5,7,9颗星号CaseStudy·递推逻辑案例:斐波那契数列(递推逻辑)斐波那契数列从第3项起每项等于前两项之和(1,1,2,3,5,8,13...)。用for循环实现时,维护f1和f2两个变量分别保存前两项,每次循环计算f3=f1+f2后滚动更新f1=f2、f2=f3。此案例训练了递推思维和变量滚动更新的编程技巧。数列规律F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2),从第3项起每项为前两项之和。该递推关系是斐波那契数列的核心特征,体现了简单的递归结构。F(n)=F(n-1)+F(n-2)变量滚动更新循环体内执行f3=f1+f2后,立即f1=f2;f2=f3;为下一次迭代做好准备。这种三变量轮换技巧避免了数组存储,空间复杂度优化至O(1)。f1→f2→f3格式化输出用计数器count记录已输出个数,每5个printf('\n')换行,%-10d保证对齐。规范的输出格式提升可读性,便于观察数列增长趋势。%-10d扩展思考斐波那契数列增长率趋近黄金比例1.618,在算法分析和自然界中都有广泛应用。相邻两项比值F(n)/F(n-1)随n增大收敛于φ。φ≈1.618CASESTUDY案例:猜数字游戏(do-while交互)猜数字游戏是do-while循环的典型交互应用:程序生成1-100随机数,用户反复猜测并根据'大了/小了'提示缩小范围,直到猜对为止。do-while保证至少猜一次,while(guess!=answer)控制重复,综合运用了随机数生成、条件分支和循环控制。随机数生成srand(time(0))设置随机种子,answer=rand()%100+1生成1到100的随机整数。随机种子基于当前时间,确保每次运行产生不同答案。1–100do-while循环scanf读取猜测→if判断大小给出提示→count++,while(guess!=answer)控制循环继续。do-while结构保证至少执行一次猜测,适合需要先输入后判断的场景。≥1次条件分支提示guess>answer输出"太大了",guess<answer输出"太小了",引导用户逐步逼近正确答案。条件分支提供即时反馈,形成人机交互闭环。IF/ELSE结果展示循环结束后输出"恭喜猜对!共猜了count次",可进一步评价猜测效率。二分查找策略可将猜测次数控制在7次以内,体现算法优化的重要性。COUNTCASESTUDY·ALGORITHM案例:辗转相除法求最大公约数欧几里得辗转相除法通过反复取余求最大公约数:a÷b取余r,再令a=b、b=r,直到余数为0时a即为结果。用while(b!=0)循环实现,每次迭代执行r=a%b;a=b;b=r三步操作。此算法简洁高效,是while循环在经典数学算法中的代表应用。算法原理gcd(a,b)=gcd(b,a%b),反复用较小数和余数替换原两数,直到余数为0gcd(a,b)=gc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- KPI指标的建立和分解
- DEVLON戴维龙产品资料
- GRB的突发伽玛射线暴来自共振逆康普顿散射机制
- CAD图形标注方法简介
- ECNIS多焦点人工晶体ZMA
- 吸痰法操作常见并发症
- 2026年汽车设计师《汽车规划》真题试卷
- 心理病房环境安全检查
- 2026年财管《战略分析》模拟卷
- 健康险理赔案例
- 2026年教育系统公开选拔学校年轻后备干部考试参考试题(含答案)
- 2026广东广永国资招聘1人笔试题库【必考】附答案详解
- 2026年全新中医主治医师考试题库及答案
- 2026年湘教版八年级下册数学期末名校测评卷(含答案可下载)
- 20265G毫米波通信技术商业化进程与终端设备发展研究报告
- SGLT2抑制剂临床应用专家共识
- 2026年山东档案职称题库试题(各地真题)附答案详解
- 福建省干部保健工作制度
- 2025江西抚州市城市建设集团有限公司拟聘用人员(人才引培)笔试历年难易错考点试卷带答案解析
- GB/T 17880.6-1999铆螺母技术条件
- GB/T 39813-2021输送带贮存和搬运指南
评论
0/150
提交评论