ETempC程序设计1第六讲-循环结构.ppt
《ETempC程序设计1第六讲-循环结构.ppt》由会员分享,可在线阅读,更多相关《ETempC程序设计1第六讲-循环结构.ppt(64页珍藏版)》请在三一办公上搜索。
1、循环结构程序设计,C 语言程序设计,主讲:刘卫红,2,程序的三种基本结构,顺序结构,选择结构,循环结构,直到型循环,当型循环,3,程序的基本结构,int a,b,sum;scanf(“%d%d”,顺序结构,int a,b,max;scanf(“%d%d”,选择结构,如何连续求和或求最大值?,4,若连续求和的次数确定,即循环次数确定的循环,int i,a,b,sum;for(i=1;i=10;i+)scanf(“%d%d”,int i,a,b,sum;i=1;while(i=10)scanf(“%d%d”,for循环,while循环,5,若循环次数不确定,int a,b,sum;while(a!
2、=0|b!=0)scanf(%d%d,错误!,int a,b,sum;scanf(%d%d,错误!,6,int a,b,sum;scanf(%d%d,若循环次数不确定(续),循环初始条件,循环控制条件,循环体(红色大括号内的部分),循环因子(a,b),只要能够找到循环的四个要素,即可写出循环。当循环次数不确定时,用while循环更直观,当然也可可用for循环,7,goto语句构成的循环,int a,b,sum;loop:scanf(%d%d,注意:goto语句是有害的,会破坏程序的结构化程度。因此应限制使用,尽量不用。,8,本节要点,while循环do-while循环for循环循环的嵌套bre
3、ak语句和continue语句,9,while循环,语句一般格式 while(表达式)语句,一般为关系表达式或逻辑表达式,也可以是C语言其他类型的合法表达式 用来控制循环体是否执行,称为内嵌语句,可以是基本语句、控制语句,也可以是复合语句是重复执行的部分,10,功能:,计算表达式的值,为非0(逻辑真)时,重复执行内嵌语句,每执行一次,就判断一次表达式的值,直到表达式的值为0 时结束循环,转去执行while后面的语句。,循环控制条件,循环体,11,求累加和,【例】编写程序,求100个自然数的和即:s=1+2+3+100,思路:寻找加数与求和的规律,1+2+3+99+100,12,求累加和(续),
4、int i,sum;i=1;while(i=100)sum=sum+i;i+;printf(sum=%dn,sum);getch();,正确吗?,循环初始条件,循环控制条件,循环体(红色大括号内的部分),循环因子(i),13,求累加和(续),int i,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(sum=%dn,sum);getch();,别忘了sum的初值!,int i,sum=0;for(i=1;i=100;i+)sum=sum+i;printf(sum=%dn,sum);getch();,for循环更简洁!,14,for循环,语句一般格式 for(
5、表达式1;表达式2;表达式3)语句,功能:计算表达式1的值,再判断表达式2,如果其值为非0(逻辑真),则执行内嵌语句(循环体),并计算表达式3;之后再去判断表达式2,一直到其值为0时结束循环,执行后续语句。,循环初始条件,循环控制条件,循环体,15,例如:求15的累加和.,main()int i,s=0;for(i=1;i=5;i+)s+=i;printf(“%d,%dn”,i,s),i=5?,s=s+i,i=i+1,是,否,结束,s=0,i=1,表达式1,表达式2,循环体,表达式3,s=0,i=1,s=1,i=2,s=3,i=3,s=6,i=4,s=10,i=5,s=15,i=6,for(循
6、环变量赋初值;循环条件;循环变量增值)语句(即循环体),更为通俗的表示:,16,说明:,所有用 while 语句实现的循环都可以用for 语句实现。,等价于:,for(表达式1;表达式2;表达式3)语句;,表达式1;while(表达式2)语句;表达式3;,17,几种for语句中表达式的省略情况,表达式1、2、3全省略,即:for(;)就等同于:while(1),会无限循环(死循环),注意:在省略某个表达式时,应在适当位置进行循环控制的必要操作,以保证循环的正确执行,省略表达式1和表达式3,即:for(;表达式2;)就等同于:while(表达式2)省略表达式2,即:for(表达式1;表达式3)就
7、等同于:表达式1;while(1)表达式3;,18,课堂练习,1+3+5+7+991-2+3-4+5+99-1001+1/2+1/3+1/4+1/1001-1/2+1/3-1/4+1/99-1/100,19,一个典型的错误,main(void)int i,sum=0;for(i=1;i=5;i+);sum=sum+i;printf(sum=%dn,sum);,main(void)int i,sum=0;i=1;while(i=5);sum=sum+i;i+;printf(sum=%dn,sum);,分号的问题!,20,求5!,Si=Si-1*i;,main()int i;long s=1;fo
8、r(i=1;i=5;i+)s=s*i;printf(“%ldn”,s);,若计算1*3*5*7*.前10项的积,怎么修改程序?,21,do-while循环,语句一般格式 do 语句 while(表达式);功能:先执行内嵌语句(循环体),之后计算表达式的值,不为0(逻辑真)时,再执行循环体并判断条件,直到表达式的值为 0 结束循环,转去执行while下面的语句。,22,While循环和do while 循环,int i,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(sum=%dn,sum);getch();,int i,sum=0;i=1;do sum=su
9、m+i;i+;while(i=100);printf(sum=%dn,sum);getch();,此时,两种循环实现的功能完全相同,如果将i的初值设为101,将出现什么情况?,23,说明:,while和do-while都能实现循环控制,while结构程序通常都可以转换成do-while结构,区别:do-while 语句先执行循环体再判断条件,循环体至少执行一次;while 语句先判断条件再执行循环体,循环体有可能一次也不执行dowhile循环也要遵守四要素,应该避免死循环。,24,经典实例,判断几位数,并逆序输出混合运算素数最小公倍数和最大公约数a+aa+aaa+aaaa+Fibonacci数
10、列输出图形输出一个乘法口诀表分解质因数,25,实例1,判断一个不多于五位的非负整数的位数,并逆序输出,如12345,输出为54321,individual=number%10 ten=number/10%10 hundred=number/100%10 thousand=number/1000%10 tenthousand=number/10000,从低位到高位分离:,若要判断任意一个任意位数的整数怎么办?,26,实例1(续),若用循环先找规律(12345):,number%10(5)number=number/10(1234)number%10(4)number=number/10(123)
11、number%10(3)number=number/10(12)number%10(2)number=number/10(1)number%10(1)number=number/10(0)退出条件,循环体:number%10 number=number/10,循环条件:number!=0,while(number!=0)printf(“%d”,number%10);number=number/10;,do printf(“%d”,number%10);number=number/10;while(number!=0);,问题在哪?为什么必须用do while?,27,实例2,(1)求1-2+3
12、-4+5-6+7+99-100(2)利用循环语句求1-1/32+1/52-1/72+.+1/(2n-1)2的值。(本题求前50项的和),28,实例2(续),(2)利用循环语句求1-1/32+1/52-1/72+.+1/(2n-1)2的值。(本题求前50项的和),若没有指定项数,而是要求最后一项的绝对值小于10-5,该如何修改程序?,29,实例2(续),(3)计算s=1+(1+2)+(1+2+3)+(1+2+3+10)(4)计算s=1+(1*2)+(1*2*3)+(1*2*3*10)(5)计算s=1*(1+2)*(1+2+3)*(1+2+3+10)(6)计算s=1*(1*2)*(1*2*3)*(
13、1*2*3*10),main()int i,s=0;for(i=1;i=10;i+)s=s+;,s1,int s1,j;,s1=0;for(j=1;j=i;j+)s1=s1+j;,main()int i,j;long s=0,s1;for(i=1;i=10;i+)s1=1;for(j=1;j=i;j+)s1=s1*j;s=s+s1;,main()int i,j;long s=1,s1;for(i=1;i=10;i+)s1=0;for(j=1;j=i;j+)s1=s1+j;s=s*s1;,请思考:可以用单循环实现吗?,30,几种循环语句的比较,while和do-while语句的表达式只有一个,f
14、or语句有三个。while 和for先判断循环条件后执行循环体,do-while语句先执行循环体后判断循环条件。,while语句多用于循环次数不定的情况do-while语句多用于至少要运行一次的情况for语句多用于循环次数固定的情况,31,实例3,判断一个数是否是素数,for(i=2;i=n-1;i+)if(n%i=0)break;if(i=n)printf(“Yesn”);else printf(“Non”);,解题思路:首先按照定义进行枚举:,解题思路:然后看是否能优化?,for(i=2;isqrt(n)printf(“Yesn”);else printf(“Non”);,32,实例3(续
15、),将100-200之间的素数按5个一行输出,解题思路:按照给定的范围逐个进行判断:,for(n=100;n=200;n+),if(n是素数),输出该素数,并统计个数,if(如果个数是5的倍数)换行,33,实例4,判断两个正整数的最小公倍数和最大公约数,for(i=大数;i+)if(i%m=0i即为最大公约数,解题思路:首先按照定义进行枚举:,是否还有更好的方法?,m,n的最大公约数=n,m%n的最大公约数(m是大数),如:M(12,8)=M(8,4)=M(4,0)=4m,n的最小公倍数=m*n/最大公约数,34,实例4(续),while(n!=0)m=n;n=m%n;,辗转相除法:,m,n的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ETempC 程序设计 第六 循环 结构

链接地址:https://www.31ppt.com/p-6505194.html