《(中职)编程基础——C语言项目五循环结构程序设计教学课件().pptx》由会员分享,可在线阅读,更多相关《(中职)编程基础——C语言项目五循环结构程序设计教学课件().pptx(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、(中职)编程基础C语言项目五循环结构程序设计教学课件(工信版)项目五 循环结构程序设计任务12 求阶乘for语句任务13 求的近似值while语句任务14 计算数字位数dowhile语句任务15统计非正常视力人数转移控制语句任务16输出区间内素数循环结构的比较与嵌套任务描述:编写程序,求10!(10!=1*2*3*10)。任务分析:在本任务中,“有规律性的重复”表现为每次在上次乘积的基础上再乘以比上次大1的数,所以应该用循环结构来实现。从1到10共有10个数相乘,也就是循环变量初值、步长增量、循环次数都已确定,所以适合用for语句来实现。任务12 求阶乘for语句5.1 for语句1.for语
2、句的一般形式for(表达式1;表达式2;表达式3)语句序列;说明:(1)“表达式1”一般为赋值表达式,为循环变量赋初值。(2)“表达式2”一般为关系表达式或逻辑表达式,表示循环条件。(3)“表达式3”一般为赋值表达式,表示循环变量的更新。(4)“语句序列”是需要重复执行的循环体,可以是单条语句,也可以是用花括号括起来的复合语句。任务12 求阶乘for语句5.1 for语句1.for语句的一般形式(1)计算“表达式1”的值,即对循环变量赋初值。(2)以“表达式2”作为循环条件,若结果为真,转步骤(3);若为假,转步骤(5)。(3)执行一次循环体,即“语句序列”。(4)计算“表达式3”,即对循环变
3、量进行更新,转到步骤(2)。(5)结束循环,执行for循环之后的语句。任务12 求阶乘for语句5.1 for语句1.for语句的一般形式从以上执行流程可知,for循环先判断条件后执行循环体,因此循环次数可能为0。例:以下为计算1+2+10的程序段,试陈述程序执行过程。sum=0;for(i=1;i=10;i+)sum+=i;任务12 求阶乘for语句5.1 for语句2.for语句的变式(1)for语句中的表达式可以部分或全部省略,但两个“;”不能省略。变式1:sum=0,i=1;for(;i=10;i+)sum+=i;任务12 求阶乘for语句变式2:sum=0;for(i=1;i=10;
4、)sum+=i;i+;变式3:sum=0,i=1;for(;i=10;)sum+=i;i+;5.1 for语句(2)for语句中的表达式允许出现与循环控制无关的表达式,例如刚才的程序段可以做如下变式:for(sum=0,i=1;i=10;sum+=i,i+);任务12 求阶乘for语句#include main()int i,t=1;for(i=1;i=10;i+)t*=i;printf(10!=%d,t);任务实施:任务12 求阶乘for语句任务总结:ufor语句特别适合于给定循环变量初值、步长增量以及循环次数的循环结构。u在使用for循环实现求和、求积运算时要特别注意和积变量赋初值的问题。
5、任务拓展:输出所有的水仙花数(水仙花数是一个三位数,其各数位上的数字立方之和等于该书本身,如153=13+53+33)。任务12 求阶乘for语句任务13 求的近似值while语句任务描述:利用以下公式求解的近似值,直到最后一项的绝对值小于10-8为止。任务分析:从公式来看,它满足“有规律的重复”,要使用循环结构,但跟任务12不同的是循环次数并不确定,所以要用一种新的循环语句while语句。5.2 while语句while语句用来实现“当型”循环结构,其一般格式为:while(表达式)语句序列;(1)“表达式”一般为关系表达式或逻辑表达式,表示循环条件。(2)“语句序列”是需要重复执行的循环体
6、,可以是单条语句,也可以是用花括号括起来的复合语句。(3)循环体内一般要有能够改变表达式值的操作,最终使表达式的值变为0,如果没有改变表达式值的操作,也可以在循环体内借助break语句强行退出循环。任务13 求的近似值while语句5.2 while语句while循环的执行流程如图所示:(1)以“表达式”作为循环条件,若结果为真,转步骤(2);若为假,转步骤(4)。(2)执行一次循环体,即“语句序列”。(3)返回步骤(1),开始下一轮的循环条件测试。(4)结束循环,执行while循环之后的语句。任务13 求的近似值while语句5.2 while语句while循环的执行流程如图所示:(1)以“
7、表达式”作为循环条件,若结果为真,转步骤(2);若为假,转步骤(4)。(2)执行一次循环体,即“语句序列”。(3)返回步骤(1),开始下一轮的循环条件测试。(4)结束循环,执行while循环之后的语句。任务13 求的近似值while语句#include main()int t=1;double pi=0,i=1;while(1/i=1e-8)pi+=1/i*t;t=-t;i+=2;printf(pi=%lfn,pi*4);任务实施:任务13 求的近似值while语句任务总结:u本任务用while语句完成了循环次数不确定的求解的问题u但并不意味着while语句不能完成循环次数确定的情况。任务拓展
8、:1.编写程序,用while语句求解10!。2.编写程序,从键盘输入一行字符,统计其中英文字母、数字和其它字符的个数。任务13 求的近似值while语句任务14 计算数字位数dowhile语句任务描述:编写程序,从键盘输入一个整数,计算该整数有几位数。任务分析:本任务的基本思路是将整数反复除以10,直到商为0为止,执行除法的次数就是该数的位数。由于整数至少有一位数,也就是循环体至少要执行一次,所以选用“直到型”循环更合适,即dowhile语句。5.3 dowhile语句dowhile语句用来实现“直到型”循环结构,其一般格式为:do语句序列;while(表达式);(1)“表达式”一般为关系表达
9、式或逻辑表达式,表示循环条件,相当于for语句中的“表达式2”。需要特别注意的是“while(表达式);”中的“;”不能省略。(2)“语句序列”是需要重复执行的循环体,循环体无论是单条语句还是复合语句都建议用花括号括起来。(3)循环体内一般要有能够改变表达式值的操作,最终使表达式的值变为0;如果没有改变表达式值的操作,也可以在循环体内借助break语句强行退出循环.。任务14 计算数字位数dowhile语句5.3 dowhile语句dowhile语句执行过程如图所示:(1)执行一次循环体,即“语句序列”。(2)以“表达式”作为循环条件,若结果为真,转步骤(1);若为假,转步骤(3)。(3)结束
10、循环,执行dowhile循环之后的语句。从以上执行流程可知,dowhile循环是先执行循环后体判断条件,因此循环次数0。任务14 计算数字位数dowhile语句#include main()int x,num=0;printf(请输入一个整数:);scanf(%d,&x);donum+;x=x/10;while(x!=0);printf(有%d位数n,num);任务实施:任务14 计算数字位数dowhile语句任务总结:本任务用dowhile语句完成了循环体至少循环一次但总循环次数不确定的求解数字位数的问题,要注意条件while(x!=0);中的“;”不能遗漏。任务拓展:1.输入两个正整数,使
11、用辗转相除法求它们的最大公约数和最小公倍数。(辗转相除法又名欧几里得算法,这条算法基于一个定理:两个正整数a和b,它们的最大公约数等于较大数a除以较小数b的余数c和较小数b之间的最大公约数。)2.用dowhile语句完成任务13中求解的近似值。任务14 计算数字位数dowhile语句任务描述:现行推广使用的对数视力表采用5分记录法,六岁以上的儿童或成人有5.0及以上的视力方为正常视力。编写两个程序,完成以下功能:(1)输入十个中学生的裸眼视力,判断是否含有非正常视力。(2)输入十个中学生的裸眼视力,输出其中的非正常视力并统计非正常视力出现的次数。任务分析:在本任务中,程序有可能不是完整地执行十
12、次循环,这时需要根据情况在循环结构中加入转移控制语句:break语句或continue语句。任务15 统计非正常视力人数转移控制语句5.4 break语句在任务11中已经介绍过break语句可以使程序跳出switch结构,转而执行switch结构之后的语句。实际上break语句的作用不止如此,它还可以用于for语句、while语句以及dowhile语句构成的循环结构中,使程序跳出循环,转移到循环之后的语句。任务15 统计非正常视力人数转移控制语句5.4 break语句例如著名的爱因斯坦阶梯问题:有一个长阶梯,若每步上2阶,最后剩下1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩下4阶;若每
13、步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶也不剩,请问该阶梯至少有多少阶。程序代码如下:for(i=7;1;i=i+7)if(i%3=2&i%5=4&i%6=5)printf(%d,i);break;任务15 统计非正常视力人数转移控制语句5.4 break语句使用break语句有两点需要注意:(1)break语句在switch结构中,只退出其所在的switch结构,而不影响switch所在的任何循环或与其嵌套的switch结构。(2)break语句在嵌套的循环中只能跳出它所在的那层循环,而不能从内层循环直接跳出最外层循环(这一点将在下一任务中体现)。任务15 统计非正常视力人数转移控
14、制语句5.5 continue语句continue语句只能用在循环中,用来提前结束本轮循环,进入下一轮循环。continue语句与break语句的区别是:前者只是提前结束本轮循环进入下一轮循环,也就是不执行本轮循环continue之后的语句,并不跳出循环结构,而后者则是直接跳出循环结构。例如:for(i=1;i=30;i+)if(i%3=0)continue;printf(%5d,i);任务15 统计非正常视力人数转移控制语句(1)#include main()int i,t=0;float x;printf(请输入十个学生的视力:);for(i=1;i=10;i+)scanf(%f,&x);
15、if(x5.0)t=1;break;if(t=1)printf(有非正常视力n);else printf(没有非正常视力n);任务实施:任务15 统计非正常视力人数转移控制语句(2)#include main()int i,t=0;float x;printf(请输入十个学生的视力:);for(i=1;i=5.0)continue;printf(%5.1f,x);t+;printf(n非正常视力出现%d次n,t);任务实施:任务15 统计非正常视力人数转移控制语句任务总结:u程序(1)中一旦遇到非正常视力便启动break语句直接退出循环;u程序(2)中遇到正常视力就执行continue语句结束
16、本次循环进入下一次循环。任务拓展:编写程序,输入一个整数,判断是否为素数(素数又叫质数,是指除了1和它本身外,不能被其他自然数整除的大于1的自然数)。任务15 统计非正常视力人数转移控制语句任务描述:请在上个任务拓展中素数判断的基础上,继续完善程序,输出100以内所有的素数,8个一行。任务分析:完成单个素数判断就已经使用了循环结构,在此基础上输出区间内所有素数就需要循环结构的嵌套了。嵌套之前,先来比较一下所有的循环结构,以便选择合适的循环嵌套。任务16 输出区间内素数循环结构的比较与嵌套5.6 循环结构的比较前面的任务分别介绍了for语句、while语句以及dowhile语句构成的三种循环结构
17、,通常状况下这三种结构是通用的,但在使用上各有特色。u如果在执行循环体之前能够确定循环次数,或者能够确定循环变量的初值、终值和步长,一般选用for循环;u如果循环次数由循环体执行情况确定,并且循环体有可能一次也不执行,一般选用while循环;u如果循环次数由循环体执行情况确定,并且循环体至少执行一次,则选用dowhile循环。任务16 输出区间内素数循环结构的比较与嵌套5.6 循环结构的比较用while语句和dowhile语句处理同一问题时,若循环体部分是一样的,它们的执行结果会有两种情况:如果while语句第一次判断条件为真,则两者执行结果相同;否则两者结果不同。当输入不同的k值时,试比较执
18、行完两个程序段后k值的不同。程序段1:scanf(“%d”,&k);while(k10)+k;任务16 输出区间内素数循环结构的比较与嵌套程序段2:scanf(“%d”,&k);do+k;while(k10);5.7 循环结构的比较u循环嵌套是指在一个循环结构的循环体内部又包含一个完整的循环结构。处于循环体内部的循环结构称为内层循环,处于循环较外部的循环结构称为外层循环。如果内层循环中再包含其它循环结构,则称为多重循环。u根据解决问题的需要及语句的使用特色,for语句、while语句和dowhile语句可以自身嵌套,也可以互相嵌套。为了使层次分明,嵌套循环的书写最好采用缩进形式。任务16 输出
19、区间内素数循环结构的比较与嵌套5.7 循环结构的比较例如,以下是打印加法口诀表的程序:#include main()int i,j;for(i=1;i=9;i+)for(j=1;j=i;j+)printf(%3d+%d=%-3d,j,i,i+j);printf(n);/*属于外层循环*/任务16 输出区间内素数循环结构的比较与嵌套#include#include main()int n,j,t,m,cnt=0;for(n=2;n100;n+)t=1;m=sqrt(n);for(j=2;j=m;j+)if(n%j=0)t=0;break;if(t=1)printf(%5d,n);cnt+;if(
20、cnt%8=0)printf(n);任务实施:任务16 输出区间内素数循环结构的比较与嵌套任务总结:u本任务使用了for循环嵌套,其中内层循环使用了break语句大大提高了程序运行效率程序u要注意外循环的循环体内不仅有内循环,还有其它语句:如标志变量t赋初值以及输出、换行等操作。u程序较为复杂,一定要注意每对大括号的配对情况。任务拓展:我国古代数学家张丘建在算经一书中曾提出过著名的“百钱买百鸡”问题,该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?请编写程序,输出所有的解。任务16 输出区间内素数循环结构的比较与嵌套(1)三种循环语句分别是for语句、while语句以及dowhile语句,通常状况下这三种结构是通用的,但在使用上各有特色。(2)一般情况下,用某种循环语句编写的程序也能用其它的循环语句实现,不管哪一种语句,一般都包含循环变量赋初值、循环条件判断以及循环变量更新等要素。(3)循环嵌套是指在一个循环结构的循环体的内部又包含一个完整的循环结构。三种循环结构可以自身嵌套,也可以互相嵌套,循环层次可以有多重循环。(4)两种转移控制语句分别是break语句和continue语句,它们的区别在于break语句跳出当前循环结构,而continue语句只是提前结束本轮循环进入下一轮循环,并不跳出循环结构。项目总结