版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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验证条件若a³+b³+c³==n则输出结果,900个候选数全部逐一检验,计算机瞬间完成全部运算a³+b³+c³=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二下数学全册教学课件
- 2026北师大二下全册动画完整课件
- 2026中国叶黄素酯技术发展趋势与创新应用前景分析报告
- 2026中国智能电网技术行业市场现状供需分析及投资评估规划分析研究报告
- 2026中国印刷包装行业市场现状供需分析及投资评估规划策略分析研究报告
- 2026中国智能电网设备生产行业市场现状供需分析及投资评估规划分析研究报告
- 2026中国涡流泵市场投资风险与回报率评估研究报告
- 2026能源转换行业市场现状供需分析及未来投资评估规划报告
- 2026商业银行数字化转型战略实施与竞争优势规划分析报告
- 2026中国玩具行业市场现状分析投资评估供需发展研究报告
- 2026江苏徐州市市级机关印刷厂有限公司招聘工作人员2人笔试题库附答案详解(基础题)
- 2026年特种设备P4液化石油气瓶充装模拟考试题库试卷及答案
- 2026年宁夏中考(数学)真题含答案
- 消防文员会计试题及答案2026年
- 医院手术室净化装修工程技术交底报告
- 乔木支撑专项施工方案(3篇)
- 数字化解决方案设计师职业资格认定考试复习题库(附答案)
- 2026年贵州遵钛集团有限责任公司校园招聘考试模拟试题及答案解析
- 企业邮箱使用规范及邮件格式标准
- 2025年度妇产科实习同学出科考试题及答案
- 2026年四川大学基础学科拔尖计划面试试题含答案
评论
0/150
提交评论