《C语言程序设计》课件-5.循环结构程序设计_第1页
《C语言程序设计》课件-5.循环结构程序设计_第2页
《C语言程序设计》课件-5.循环结构程序设计_第3页
《C语言程序设计》课件-5.循环结构程序设计_第4页
《C语言程序设计》课件-5.循环结构程序设计_第5页
已阅读5页,还剩90页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

求阶乘——for循环——目录CONTENTS01for循环语法与流程02实战:求10的阶乘求阶乘课程目标1语法结构掌握for循环三个表达式的作用。2执行流程理解每一步先做什么、后做什么。3实战编程用for循环计算10的阶乘。4避坑要点累乘初值1,累加初值0。01for循环语法与流程求阶乘for循环的语法结构for(表达式1;表达式2;表达式3){循环体}表达式1:初始化给循环变量赋初值,如i=1。表达式2:条件决定循环是否继续,如i<=10。表达式3:迭代更新循环变量,如i++。三个表达式必须用分号隔开,缺一不可;大括号内是重复执行的循环体。求阶乘for循环的执行流程①初始化②判断条件③执行循环体④更新变量1表达式1只执行1次,完成变量初始化。2表达式2为真就执行循环体,为假直接跳出。3执行表达式3更新变量,再回到第二步判断。口诀:初始化→判断→执行→更新→再判断,顺序不能乱。02实战:求10的阶乘求阶乘情景描述:10的阶乘10!=1×2×3×…×10顺序结构要写9次乘法,代码又长又容易出错。循环思路有规律的重复累乘,正好适合用循环解决。求阶乘代码实现思路乘积变量t初始值必须是1(乘法单位元),若为0结果永远是0。循环变量i控制乘到几,范围从1到10。for循环三要素与循环体初始化i=1,t=1条件i<=10迭代i++循环体t=t*i循环体核心:t=t*i,不断累乘。求阶乘完整代码:求10!循环体内只做累乘#include<stdio.h>intmain(){

inti,t=1;

for(i=1;i<=10;i++)t=t*i;printf("10!=%d\n",t);

return

0;}重点:t初始化为1是关键;for三要素完整;循环体内只做累乘。求阶乘代码逐行解析#include调用printf输出必须加的头文件。main()程序入口,所有代码从这里开始。inti,t=1;定义变量,t初始值1是关键。for(i=1;i<=10;i++)控制循环执行10次。t=t*i;核心累乘逻辑。printf(...)输出最终结果。求阶乘循环过程模拟(前3次)i=1t=1×1=1,i变成2i=2t=1×2=2,i变成3i=3t=2×3=6,i变成4直到i=10累乘完,i变成11,条件11<=10不成立,循环结束。10!=3628800求阶乘常见错误与注意事项循环变量未初始化值随机,循环次数错乱。循环条件写错i<10会少算一次,变成9!。迭代语句位置错i++写到外面,会死循环。累乘变量初值错t=0,结果永远是0。口诀:累乘初值1,累加初值0。求阶乘课程总结1三要素初始化、条件、迭代,缺一不可。2执行流程初始化→判断→循环体→迭代。3适用场景循环次数已知:累加、累乘、求阶乘。4避坑要点控制边界,变量要正确初始化。谢谢大家π的近似值计算——while循环——主讲人:冯淑婷目录CONTENTS01while循环语法与流程02实战:求π的近似值π的近似值计算课程目标1语法结构掌握while循环的写法与用法。2执行流程搞清楚先做什么、后做什么。3实战案例用莱布尼茨公式计算π近似值。4避坑要点循环体内更新条件,避免死循环。01while循环语法与流程π的近似值计算while循环的语法结构while(表达式){语句序列;}循环条件表达式决定循环走向,为真就执行,为假就停止。循环体大括号内是重复执行的内容,一条语句时可省略大括号。避免死循环循环体内必须改变条件的值,否则永远为真,程序卡死。重中之重:循环体内必须有更新条件的操作,否则陷入死循环。π的近似值计算while循环的执行流程①判断条件②为真执行③回到判断④为假跳出1先计算表达式的值,判断结果为真或假。2为真执行循环体,执行完自动跳回再判断。3为假跳出循环,执行循环后面的代码。核心特点:先判断,后执行;首判为假,循环体一次都不执行。02实战:求π的近似值π的近似值计算情景描述:π怎么算?π/4≈1-1/3+1/5-1/7+…精度要求无限级数,项数越多越精确;算到末项绝对值小于1e-8为止。为何用while循环次数未知,for不适用;while可按精度条件动态终止。π的近似值计算代码实现思路pi(double)存储累加结果,初始值为0。i(double)分母初值1,每次加2,保证分母都是奇数。t(int)控制加减号交替,初值1,每次循环取反。while循环三步走初始化pi=0,i=1,t=1条件1.0/i>=1e-8循环体累加→取反→更新循环体顺序:先累加当前项,再翻转符号,最后更新分母。π的近似值计算完整代码:求π近似值三变量协同,最后乘4输出π#include<stdio.h>intmain(){

intt=1;

doublepi=0,i=1;

while(1.0/i>=1e-8){pi+=1.0/i*t;t=-t;i+=2;}printf("pi=%f\n",pi*4);

return

0;}while条件满足就执行,不断累加逼近π。π的近似值计算代码逐行解析intt=1;符号变量,初始为加。doublepi=0,i=1;双精度浮点型保证计算精度。while(1.0/i>=1e-8)精度控制核心,判断当前项是否达标。pi+=1.0/i*t;t=-t;累加当前项并取反,实现加减交替。i+=2;printf(pi*4)更新分母防死循环;乘4得π。π的近似值计算循环过程模拟(前3次)i=1条件为真:pi=1.0,t变-1,i变3。i=3条件为真:pi≈0.6666667,t变1,i变5。i=5条件为真:pi≈0.8666667,t变-1,i变7。规律:i变大、1.0/i变小,小于1e-8时终止。pi=3.1415926π的近似值计算输出结果1.0/i小于1e-8时跳出循环,输出pi=3.1415926。结果验证与真实值3.1415926535…相比非常接近,验证了算法有效性。程序运行结果与验证pi=3.1415926π的近似值计算while循环与for循环对比for循环三要素集中一行,结构紧凑;适合次数已知:求和、阶乘。while循环只有循环条件,结构灵活;适合次数未知:输入、逼近。一句话:次数已知用for,次数未知用while。π的近似值计算课程总结1语法结构while(条件){循环体},循环体内必须更新条件。2执行流程先判断后执行,首判为假一次都不执行。3应用场景专门解决循环次数不确定的问题。4与for区别while是条件驱动,for是次数驱动。谢谢大家数字位数统计——do-while循环——主讲人:冯淑婷目录CONTENTS01do-while语法与流程02实战:数字位数统计数字位数统计课程目标1语法结构掌握do-while写法与规范。2执行流程清楚它的运行特点与顺序。3实战案例独立完成数字位数统计程序。4核心区别理清do-while与while差异。01do-while语法与流程数字位数统计do-while循环的语法结构do{语句序列;}while(表达式);do部分循环开始标志,大括号包裹循环体,保证循环体至少执行一次。while部分条件放在循环体之后,为真回到do,为假就结束整个循环。注意:while(表达式)后面的分号绝对不能省略,这是初学者最易犯的错。循环体内必须有改变条件的操作,否则会陷入死循环。数字位数统计do-while循环的执行流程①执行循环体②判断条件③为真跳回④为假跳出1程序先跑一次do后大括号里的循环体代码。2执行完循环体,再判断while后的条件表达式。3为真跳回第一步再执行,为假跳出执行后续代码。核心特点:先执行,后判断,循环体至少执行一次。02实战:数字位数统计数字位数统计情景描述:统计整数位数输入12345→输出5输入9→输出1基本思路把整数反复除以10,每除一次计数加1,直到商变成0为止。为何do-while除法与计数必须至少执行一次,do-while先执行后判断完美匹配。数字位数统计代码实现思路(三步)①循环前准备定义x接收输入的整数,num=0用来统计位数。②循环体donum++位数加1,x=x/10去掉最后一位。③条件whilex不等于0就继续循环,等于0停止循环。不管输入是几位数,哪怕是个位数,循环体都能先执行一次,保证计数准确。整个逻辑紧扣do-while的特点:先执行,后判断。数字位数统计完整代码:数字位数统计至少执行一次,个位数也能算对#include<stdio.h>intmain(){

intx,num=0;printf("请输入一个整数:");scanf("%d",&x);

do{num++;x=x/10;}while(x!=0);printf("位数是%d\n",num);

return

0;}核心:num++计数,x/10去末位,x为0结束。数字位数统计代码逐行解析intx,num=0;x存输入数字,num从0开始统计。printf+scanf提示并读取用户输入的整数到x。do{...}循环主体,确保至少执行一次统计。num++;位数加1,个位数也能正确计数。x=x/10;整数除法去掉末位,如1234变123。while(x!=0);printfx为0结束循环,输出num即位数。数字位数统计循环过程模拟:输入12345初始x=12345,num=0,准备进入循环。第1-3次num变1、2、3;x变1234、123、12。第4-5次num变4、5;x变1、0,条件为假结束。循环体共执行5次,num=5,完美算出12345是5位数。位数是5数字位数统计while与do-while对比while循环先判断,后执行;初始为假时一次都不执行。do-while循环先执行,后判断;循环体至少执行1次。循环体必须至少执行一次的场景,首选do-while。数字位数统计换while实现会怎样?输入9while条件为真,循环正常执行,结果正确,输出1。输入0条件直接为假,一次都不执行,num还是0,结果明显错误。while需加前置判断才能修正;do-while天生适配,逻辑更简单。数字位数统计课程总结1语法规范do{循环体}while(条件);末尾分号不能忘。2执行逻辑先执行循环体后判断条件,至少执行一次。3与while区别while可能0次,do-while至少1次。4适用场景必须至少执行一次时,优先do-while。谢谢大家break语句——提前终止循环——主讲人:冯淑婷目录CONTENTS01break语法与流程02实战:数字位数统计break语句课程目标1语法结构掌握break语句的写法。2执行流程理解它如何终止整个循环。3实战案例判断学生裸眼视力有无异常。4作用范围嵌套循环中只跳出当前层。01break语法与流程break语句break语句的语法结构回顾:switch中break是switch的"紧急出口",执行到它立刻跳出switch。新功能:跳出循环可用于for、while、do-while,强制终止整个循环。语法非常简单:break;建议:break一定要和if条件配合,满足条件才触发。break语句break语句的执行流程①正常循环执行②遇到break③跳出整个循环1程序按逻辑判断条件、执行循环体操作。2遇到break语句,立刻触发"紧急终止"。3跳出循环,直接执行循环后的第一条语句。核心特点:提前终止整个循环,不管循环还剩多少次。02实战:判断学生裸眼视力情景描述:判断裸眼视力10个5分制视力:5.0及以上正常目标只判断有没有非正常视力,不用统计具体数量。关键思考发现异常何必输完10个?break让我们"中途下车"。break语句break语句代码实现思路①for框架for循环做输入框架,计划输入10个视力数据。②标志变量has_abnormal初始为0,代表没有发现异常。③if+break视力小于5.0就置1,然后break终止循环。for做框架、if做判断、break做控制,发现异常立刻结束。整体结构:初始化→循环读入→判断→异常则标记跳出→输出。break语句完整代码:vision_check.c发现异常立即标记并跳出#include<stdio.h>intmain(){

inti,has_abnormal=0;

doublevision;

for(i=1;i<=10;i++){scanf("%lf",&vision);

if(vision<5.0){has_abnormal=1;

break;}}printf(has_abnormal?"有异常\n":"正常\n");

return

0;}break语句代码逐行解析inti,has_abnormal=0;i计数,标志位0代表无异常。for(i=1;i<=10;i++)循环执行10次,依次读入视力。if(vision<5.0)判断视力是否低于5.0。abnormal=1;break;置标志位并立刻跳出整个循环。printf(结果)根据标志位输出是否有异常。break语句循环过程模拟:第3个为4.8第1次输入5.2,正常,循环继续。第2次输入5.0,正常,循环继续。第3次输入4.8低于5.0,执行break终止。循环只执行了3次,剩下7个数据不用处理,效率大幅提升。检测到非正常视力!以为内层break能跳出外层循环,结果程序逻辑出错。break语句嵌套循环中的作用范围核心规则只能把你从当前楼层送到一楼,不能直接跨层跳出。电梯比喻内层break只跳出内层,外层循环还会继续执行,很多同学在这里出错。正确做法用标志变量控制外层循环条件,这是最安全的做法。常见误区break只能跳出当前所在这一层,不能跳出外层循环。j==1时break只跳出j循环,外层i循环还会继续跑。break语句常见错误与正确做法break语句课程总结1核心功能跳出switch,也能跳出三种循环。2循环作用提前终止整个循环,跳到循环后执行。3嵌套规则就近原则,只跳当前层不跨层。4适用场景条件性提前结束,优化程序效率。谢谢大家continue语句——跳过本轮循环——主讲人:冯淑婷目录CONTENTS01continue语法与流程02实战:统计非正常视力人数continue语句课程目标1语法结构知道continue怎么写、用在哪。2执行流程清楚程序遇到它会怎么走。3实战案例统计非正常视力的学生人数。4核心区别分清continue与break差异。01continue语法与流程continue语句continue的核心功能核心功能:提前结束本轮循环适用范围只能用在for、while、do-while,不能用在选择语句等地方。执行逻辑跳过continue后面的所有代码,直接跳转到循环条件判断处。continue语句语法格式与使用说明语法格式:continue;使用说明通常和if配合使用,满足条件才执行,实现条件性跳过;分号不能少。本质区别:break终止整个循环,continue只跳过本轮,循环还会继续。continue语句continue语句的执行流程①正常循环②遇到continue③跳回条件判断④继续下一轮1先判断循环条件,条件满足就执行循环体。2遇到continue,本轮后续代码一律不执行。3for会先执行i++等更新语句,再判断条件。核心特点:跳过当前循环,继续下一轮。02实战:统计非正常视力人数continue语句情景描述:统计非正常视力10个5分制视力:低于5.0为非正常目标列出所有非正常视力数据,还要统计总人数。核心痛点正常数据应直接跳过;break会终止整个循环,所以要用continue。continue语句代码实现思路①for循环for循环固定执行10次,刚好输入10个视力数据。②计数器定义count=0,统计非正常视力人数。③if+continue≥5.0就continue跳过,否则输出且count加1。for固定次数、if判断达标、continue过滤,提升程序效率。程序结构:循环输入→条件判断→正常跳过、异常计数→输出总数。continue语句完整代码:统计非正常视力正常就跳过,异常才输出计数#include<stdio.h>intmain(){

inti,count=0;

doublevision;

for(i=1;i<=10;i++){scanf("%lf",&vision);

if(vision>=5.0)

continue;printf("%.1f\n",vision);count++;}printf("非正常人数:%d\n",count);

return

0;}continue语句核心逻辑解析inti,count=0;循环变量i,计数器从0开始。for(i=1;i<=10;i++)循环10次,输入后立即判断。if(>=5.0)continue;达标就跳过输出计数,进下一轮。printf(count)循环结束,输出非正常视力人数。continue语句循环过程模拟(前4次)第1-2次输入4.8、4.9,输出并计数,count=2。第3-4次输入5.0、5.1,continue跳过输出计数。结果:输出4.8、4.9,count=2,所有正常数据都被成功过滤。非正常视力人数:2continue语句与break对比:通俗理解continue"这一次不算,我们重来一次。"break"游戏结束,不玩了。"一句话:continue只跳本轮,break终止全部。continue语句与break对比:核心差异核心功能continue跳过当前轮次;break终止整个循环。执行流程continue跳回条件判断;break跳到循环之后。使用场景continue过滤数据;break找到目标即停。break适合存在性判断;continue适合总数统计。continue语句课程总结1功能定义循环内的跳过机制,只能用于循环。2执行流程中断本轮,直达循环条件判断处。3核心区别continue跳过一次;break终止全部。4典型场景数据过滤筛选,只处理符合条件内容。谢谢大家求区间内素数——循环嵌套——主讲人:冯淑婷目录CONTENTS01循环嵌套02实战:求区间内素数求区间内素数课程目标1嵌套概念理解循环里套循环的结构。2执行流程外层取一值,内层完整跑一遍。3实战案例求2到100区间内的素数。4优化技巧缩范围加提前终止双优化。01循环嵌套求区间内素数什么是循环嵌套?循环体内包含另一个完整的循环外层循环内层循环(完整循环)外部的叫外层循环,内部的叫内层循环。求区间内素数循环嵌套的执行流程1外层循环控制次数,内层循环完成单次任务。2外层变量每取一个值,内层都要完整执行一遍。3重复这个过程,直到外层循环条件不满足。钟表类比外层是时针走得慢,内层是分针走得快;时针走一格,分针就要走一圈。记住这个类比,执行顺序就不会乱。求区间内素数情景描述:什么是素数?素数:2、3、5、7、11、13…素数定义大于1的自然数,除了1和本身,不能被其他任何自然数整除。编程目标遍历2到100的所有整数,筛选出素数并输出。两步走:逐个遍历+试除判断,正好用循环嵌套。求区间内素数素数判断的优化技巧技巧一:缩小范围原始要试除2到n-1,效率低;优化后只试除到√n。技巧二:提前终止找到因数后继续循环是白费功;发现整除立刻break跳出。原理:n若有大于√n的因数,一定有对应小于√n的因数。求区间内素数完整代码

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论