c语言 循环结构 ppt,C语言中 循环结构.ppt

《C语言中 循环结构.ppt》由会员分享,可在线阅读,更多相关《C语言中 循环结构.ppt(42页珍藏版)》请在皮匠网上搜索。

1、第五章循环控制结构,1,本章知识点:,while语句的一般形式及应用for语句的一般形式及应用do.while语句的一般形式及应用多重循环结构的使用break语句和continue语句,2,5.1while语句,语句的一般形式如下:while(表达式)循环体语句说明:while语句属于“当型”循环。,图5.1while语句流程图,说明:(1)while是关键字。while后圆括号内的表达式一般是关系表达式或逻辑表达式,但也可以是C语言中任意合法的表达式。(2)循环体语句可以是一条语句,也可以是多条语句,如果循环体语句包含多条语句,则需要用一对花括号“”把循环体语句括起来,采用复合语句的形式。,。

2、while(表达式)循环体语句,【例5.1】求前100个自然数的和。,#includeintmain()intn,sum;n=1;sum=0;/*变量赋初值*/while(n=A,9,5.2for语句,for语句的一般形式如下:for(表达式1;表达式2;表达式3)循环体语句说明:for语句属于“计数”型循环。,11,for语句流程图,For语句最常用、最简单的形式,for(循环变量赋初值;循环条件;循环变量增值),12,【例5.1】求前100个自然数的和。,#includeintmain()intn,sum=0;for(n=1;n=100;n+)sum=sum+n;printf(sum=%d。

3、n,sum);return0;,【例5.4】设n=30,编写程序,计算并输出S(n)的值。S(n)=(1*2)/(3*4)-(3*4)/(5*6)+(5*6)/(7*8)+(-1)(n-1)*(2n-1)*2n/(2n+1)*(2n+2)+,#include#includeintmain()intn;floats=0;for(n=1;n=30;n+)s=s+pow(-1),(n-1)*(2*n-1)*2*n)/(2*n+1)*(2*n+2);printf(s(n)=%f,s);return0;,13,关于for语句的几点说明:(1)循环体语句可以是简单语句也可以是使用一对花括号括起来的复合语句。

4、。如果是一个语句,也可以和for写在一行上,这样使程序看起来更加简洁;如果循环体包含多条语句,最好是另起一行,采用一对花括号括起来的复合语句形式,增加程序的可读性。(2)表达式的省略。for语句中的三个表达式均可以省略,但是两个分号不能省略。,for(循环变量赋初值;循环条件;循环变量增值),for(表达式1;表达式2;表达式3)循环体语句,【例5.5】编写程序,输出所有的水仙花数。水仙花数是指一个3位数,其各位数字的立方和等于该数本身。例如:153=13+53+33=153,所以153就是水仙花数。,intmain()inta,b,c,i;for(i=100;i=1.0e-6);pi=4.0。

5、*pi;printf(pi=%10.7lfn,pi);,23,三种循环的比较:(1)while和dowhile语句一般实现标志式循环,即无法预知循环的次数,循环只是在一定条件下进行;而for语句大多实现计数式循环。(2)一般来说,while和dowhile语句的循环变量赋初值在循环语句之前,循环结束条件是while后面圆括号内的表达式,循环体中包含循环变量修改语句;一般for循环则是循环三要素集于一行。因此,for循环语句功能更强大,形式更简洁,使用更灵活。(3)while和for是先测试循环条件,后执行循环体语句,循环体可能一次也不执行。而dowhile语句是先执行循环体语句,后测试循环条件。

6、,所以循环体至少被执行一次。,5.4多重循环结构,嵌套循环,并列循环,交叉循环(错误),循环的嵌套是指一个循环语句的循环体内完整的包含另一个完整的循环结构。前述三种循环结构(while循环、for循环、do-while循环)可以任意组合嵌套。循环的嵌套有双重循环嵌套和多重循环嵌套。但一般使用两重或三重的比较多,若嵌套层数太多,就降低了程序的可读性和执行效率。如果是多重循环,外循环和内循环应选用不同的循环控制变量。,26,双重循环嵌套:嵌套层次数为2层的循环嵌套执行过程是:首先进行外层循环的条件判断,当外层循环条件成立时顺序执行外层循环体语句,遇到内层循环,则进行内层循环条件判断,并在内层循环条。

7、件成立的情况下反复执行内层循环体语句,当内层循环因循环条件不成立而退出后重新返回到外层循环并顺序执行外层循环体的其它语句,外层循环体执行一次后,重新进行下一次的外层循环条件判断,若条件依然成立,则重复上述过程,直到外层循环条件不成立时,退出双重循环嵌套,执行后面其它语句。,【例5.8】编写程序,输出1000以内所有的完数。如果一个整数的因子之和等于这个数本身,这个数就被称为完数。例如:1、2、3是6的因子,并且6=1+2+3,所以6是完数。,程序分析:此题应该分成两步来做。第一步:判断一个数n是否为完数。可以定义一个变量s作为“累加器”,此问题仍然需要用前面讲过的“穷举法”,从1n-1逐一去除。

8、n,如果能除尽,就说明是n的因子,把它累加到s上。可以选用for循环。第二步:外层循环对1000以内的所有正整数一一进行判断,利用第一步的方法,逐个判断n的因子之和s是否等于n。若相等,则显示输出。同样选用for循环。,28,#includeintmain()inti,n,s;for(n=2;n=1000;n+)/*外循环*/s=0;for(i=1;in;i+)/*内循环求出n的所有因子之和*/if(n%i=0)s+=i;if(n=s)/*判断a是否等于所有因子之和*/printf(%dn,n);return0;,【例5.9】打印九九乘法口诀表。程序分析:乘法口诀表的形式如下:1*1=11*2。

9、=22*2=41*3=32*3=63*3=91*4=42*4=83*4=124*4=161*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81,#includeintmain()inti,j;for(i=1;i=9;i+)/*外循环控制输出行*/for(j=1;j=i;j+)/*输出该行的内容*/printf(%2d*%d=%2d,j,i,i*j);printf(n);/*每行结束后输出换行*/return0;,5.5break语句和continue语句,5.5.1break语句break语句可以使流程跳出switch结构,它也可以用在whi。

10、le语句、for语句和dowhile语句中。可使程序跳出本层循环结构,接着执行循环体下面的语句。其一般形式如下:break;,33,例子:intr;floatarea,pi=3.14159;for(r=1;r100)break;printf(r=%d,area=%fn,r,area);,说明:(1)break语句只能用于while、for和dowhile循环语句以及switch语句中,不能用于其他语句。(2)如果break语句用在多重循环结构体中,使用break语句只能使程序退出break语句所在的最内层循环。,5.5.2continue语句continue语句的作用是结束本次循环,即跳过循环。

11、体中下面尚未执行的语句,接着进行下一次是否执行循环体的判断。其一般形式如下:continue;continue语句只能用于循环结构中。,inti,n,score;floatsum=0,aver;printf(请输入学生的个数:);scanf(%d,35,【例5.10】输入若干学生的成绩,求平均值。,5.5break语句和continue语句,continue语句的作用是结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环体的判断。其一般形式如下:continue;注意:continue语句只能用于循环结构中。,对于while和dowhile语句,continue语句使程序。

12、结束本次循环,跳转到循环条件的判断部分,根据条件判断是否进行下一次循环;对于for语句,continue语句使程序不再执行循环体中下面尚未执行的语句,直接跳转去执行“表达式3”,然后再对循环条件“表达式2进行判断”,根据条件判断是否进行下一次循环。,5.6应用程序举例,37,【例5.12】从键盘输入两个正整数m和n,求它们的最大公约数和最小公倍数。,方法一:根据最大公约数的数学定义,使用for循环查找即能整除m又能整除n的最大的数就是m、n的最大公约数。intm,n,k,max,x,y,z;printf(inputmandn:n);scanf(%d,方法二:辗转相除法。首先定义一个变量r,用来。

13、存储m除以n的余数。Step1:将两个数中的大者放在m中,小者放在n中。Step2:求m除以n的余数r,即r=m%n。Step3:若r不等于0,转Step4;若r等于0,则此时的n就是最大公约数,转Step5Step4:把n的值赋给m,把r的值赋给n,即mn,nr,然后转Step2。Step5:跳出循环结构,执行循环结构的下一个语句。intm,n,r,x,y,z,k;scanf(%d,intf1,f2,f3,i;f1=1;f2=1;printf(%10d%10d,f1,f2);for(i=3;i=30;i+)/*从第三项开始计算*/f3=f1+f2;printf(%10d,f3);if(i%5。

14、=0)printf(n);/*每输出5个后换行*/f1=f2;f2=f3;,【例5.13】求Fibonacci数列前30项,每行输出5个数。11235813.,40,【例5.15】编写程序,输出如下所示图形。,图形的每行可视为由行前导空格和行中字母构成,且把每行的字母视为一个整体。其规律是行号与每行不同字符个数有确定的对应关系:前导空格:第i行对应的空格数为i-1每行字母:第i行对应的字母个数为9-2*i,inti,j;for(i=1;i=4;i+)for(j=1;j10+i;j+)printf();for(j=1;j=9-2*i;j+)printf(%c,69-i);printf(n);,作业本章课后习题:5.45.11,。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值