关闭

关闭

关闭

封号提示

内容

首页 5.C语言循环结构.PPT

5.C语言循环结构.PPT

5.C语言循环结构.PPT

上传者: wanroutianze 2011-08-27 评分 0 0 0 0 0 0 暂无简介 简介 举报

简介:本文档为《5.C语言循环结构ppt》,可适用于高等教育领域,主题内容包含C语言可实现循环的语句:用goto和if构成循环while语句do~while语句for语句第五章循环结构程序设计goto语句及用goto构成循环g符等。

C语言可实现循环的语句:用goto和if构成循环while语句do~while语句for语句第五章循环结构程序设计goto语句及用goto构成循环goto语句一般格式goto语句及用goto构成循环goto语句一般格式goto语句标号……标号:语句功能:无条件转移语句说明:不能用整数作标号只能出现在goto所在函数内限制使用goto语句goto语句及用goto构成循环说明:goto语句及用goto构成循环说明:不提倡使用goto语句。对结构化语句程序控制不好编译系统也比较混乱。为什么高级语言还要有goto语句。因为软件系统要向下兼容用低版本编写的程序可能有goto语句为了高版本能读懂低版本的程序因此要把goto的语法放进来。但是不提倡大家使用。#include<stdioh>main(){inti,sum=i=loop:if(i<=){sum=sumiigotoloop}printf("d",sum)}sum=sum==sum==sum=……sum==while语句一般形式:while(表达式)循环体语句执行流程:特点:先判断表达式后执行循环体功能:条件满足时执行循环体条件不满足时结束循环体转去执行下一条语句。说明:如果刚进入循环体时条件就不满足则循环体一次也不执行。它相当于一条空语句。如:while()printf(“dn”,x)循环条件一定要有不满足的时候否则将出现“死循环”。如:while()printf(“dn”,x)循环体如果包含一个语句以上应组成复合语句。如:while(a<b){t=aa=bb=t}如不加{}则while语句的范围只到while后面第一个分号处。#include<stdioh>main(){inti,sum=i=while(i<=){sum=sumii}printf("d",sum)}sum=sum==sum==sum=……sum==例显示~的平方(c)#include<stdioh>main(){inti=while(i<=){printf("d*d=dn",i,i,i*i)i}}运行结果:*=*=*=*=*=*=*=*=*=*=do~while语句一般形式:do循环体语句while(表达式)执行流程:特点:先执行循环体后判断表达式说明:至少执行一次循环体do~while可转化成while结构例用do~while循环求(c)#include<stdioh>main(){inti,sum=i=do{sum=sumii}while(i<=)printf("d",sum)}例while和do~while循环的比较main(){inti,sum=scanf("d",i)do{sum=sumii}while(i<=)printf("d",sum)}main(){inti,sum=scanf("d",i)while(i<=){sum=sumii}printf("d",sum)}运行结果:sum=再运行一次:sum=运行结果:sum=再运行一次:sum=结论:当while后面的表达式第一次值为真时两种循环得到的结果相同否则二者结果不相同(指二者具有相同的循环体的情况)。可以看到当输入i的值小于或等于时二者得到的结果相同。而当i的值大于时二者结果就不同了。这是因为此时对while循环来说一次也不执行循环体而对do…while循环语句来说则要执行一次循环体。while和do~while循环补充while语句用来实现“当型”循环。dowhile语句是先执行循环体后判断表达式的“当型”循环(因为当条件满足时才执行循环体)。但利用它可以方便的实现“直到型”循环结构。“直到型”循环结构是表达式为真时结束循环。因此用dowhile语句表示时应将条件取“反”。main(){intt=,i=do{t=t*ii}while(i<=)printf(“t=d",t)}“当i<=时继续执行循环”和“直到i>结束循环”是对同一问题的两种表述方法。用for语句实现循环用for语句实现循环C语言中的for语句使用最为灵活不仅可以用于循环次数已经确定的情况而且可以用于循环次数不确定而只给出循环结束条件的情况它完全可以代替while语句。for语句一般形式:for(表达式表达式表达式)循环体语句执行流程:for(i=i<=i)sum=sumi执行流程:循环变量赋初值循环控制条件循环体循环变量增值for(i=i<=i)sum=sumifor语句一般应用形式:for(循环变量赋初值循环条件循环变量增值){循环体语句}说明:for语句可以转换成while结构表达式while(表达式){循环体语句表达式}用for语句实现循环用for语句实现循环补充说明:()for语句的一般形式中的“表达式”可以省略此时应在for语句之前给循环变量赋初值。注意省略表达式时其后的分号不能省略。如for(i<=i)sum=sumi执行时跳过“求解表达式”这一步其他不变。补充说明:()如果表达式省略即不判断循环条件循环无终止地进行下去。也就是认为表达式始终为真。例如:for(i=i)sum=sumi表达式是一个赋值表达式表达式空缺。它相当于:i=while(){sum=sumi}用for语句实现循环用for语句实现循环补充说明:()表达式也可以省略但此时程序设计者应另外设法保证循环能正常结束。如:for(i=i<=){sum=sumii}在上面的for语句中只有表达式和表达式而没有表达式。i的操作不放在for语句的表达式的位置处而作为循环体的一部分效果是一样的都能使循环正常结束。用for语句实现循环用for语句实现循环补充说明:()可以省略表达式和表达式只有表达式即只给循环条件。如:for(i<=)while(i<=){sum=sumi相当于{sum=sumii}i}在这种情况下完全等同于while语句。可见for语句比while语句功能强除了可以给出循环条件外还可以赋初值使循环变量自动增值等。用for语句实现循环用for语句实现循环补充说明:()个表达式都可省略如:for()语句相当于while()语句即不设初值不判断条件(认为表达式为真值)循环变量不增值。无终止地执行循环体。用for语句实现循环用for语句实现循环补充说明:()表达式可以是设置循环变量初值的赋值表达式也可以是与循环变量无关的其他表达式。如:for(sum=i<=i)sum=sumi表达式也可以是与循环控制无关的任意表达式。用for语句实现循环用for语句实现循环补充说明:表达式和表达式可以是一个简单的表达式也可以是逗号表达式即包含一个以上的简单表达式中间用逗号间隔。如:for(sum=i=i<=i)sum=sumi或for(i=j=i<=jij)k=ij表达式和表达式都是逗号表达式各包含两个赋值表达式即同时设两个初值使两个变量增值用for语句实现循环用for语句实现循环补充说明:在逗号表达式内按自左至右顺序求解整个逗号表达式的值为其中最右边的表达式的值。如:for(i=i<=ii)sum=sumi相当于for(i=i<=i=i)sum=sumi用for语句实现循环用for语句实现循环补充说明:()表达式一般是关系表达式(如i<=)或逻辑表达式(如a<bx<y)但也可以是数值表达式或字符表达式只要其值为非零就执行循环体。用for语句实现循环用for语句实现循环补充说明:for(i=(c=getchar())!=′n′i=c)在表达式中先从终端接收一个字符赋给c然后判断此赋值表达式的值是否不等于′n′(换行符)如果不等于′n′就执行循环体。即不断输入字符将它们的ASC码相加直到输入一个“换行”符为止。注意:此for语句的循环体为空语句把本来要在循环体内处理的内容放在表达式中作用是一样的。可见for语句功能强可以在表达式中完成本来应在循环体内完成的操作。用for语句实现循环用for语句实现循环补充说明:for((c=getchar())!=′n′)printf(″c″c)for语句中只有表达式而无表达式和表达式。其作用是每读入一个字符后立即输出该字符直到输入一个“换行”为止。请注意从终端键盘向计算机输入时是在按Enter键以后才将一批数据一起送到内存缓冲区中去的。运行情况:Computer(输入)Computer(输出)而不是CCoommppuutteerr用for语句实现循环用for语句实现循环注意:C语言中的for语句比其他语言(如BASICPASCAL)中的FOR语句功能强得多。可以把循环体和一些与循环控制无关的操作也作为表达式或表达式出现这样程序可以短小简洁。但过分地利用这一特点会使for语句显得杂乱可读性降低最好不要把与循环控制无关的内容放到for语句中。for循环程序举例例:国王的小麦。相传古代印度国王舍罕要褒赏聪明能干的宰相达依尔(国际象棋的发明者)国王问他要什么?达依尔回答说:“国王只要在国际象棋的棋盘第个格子中放粒麦子第个格子中放粒麦子第个格子中放粒麦子以后按此比例每一格加一倍一直放到第格(国际象棋的棋盘是*=格)我感恩不尽其他什么都不要了。”国王想这有多少?还不容易?于是让人扛来一袋小麦但不到一会儿全用没了再来一袋很快又用完了。结果全印度的粮食全部用完还不够。国王纳闷怎样也算不清这笔帐。现在我们用计算机来算一下。#include<stdioh>voidmain(){doublep=,t=,vintifor(i=i<i){p=p*p是当前格子中的麦子粒数t=tpt是当前麦子总粒数}v=teprintf(“total=en”,t)printf(“volume=en”,v)}可以用for语句实现循环相当于全中国万平方公里的土地上全铺满cm厚的小麦相当于我国几百年的小麦产量。运行结果:Total=eVolnme=efor循环程序举例例:人口增长预测。据年末统计我国人口为万人如果人口的年增长率为请计算到哪一年中国总人口超过亿。解题思路:假设原来的人口为p则一年后的人口为:p=p*(r)其中r是年增长率。用此公式依次计算出每年的人口每算出一年的人口就检查一下是否达到或超过亿。如果未达到或超过亿就再计算下一年的人口直到某一年的人口达到或超过亿为止。#include<stdioh>voidmain(){doublep=e,r=intyfor(y=p<ey){p=p*(r)}printf(“year=d,p=en”,y,p)}可以用for语句实现循环运行结果:year=,p=e即到年末中国人口达到亿。辅助控制语句break语句功能:在循环语句和switch语句中,终止并跳出循环体说明:break只能终止并跳出最近一层的结构break只能用于循环语句和switch语句例break举例:输出圆面积面积大于时停止(c)#include<stdioh>#definePImain(){intrdoubleareafor(r=r<=r){area=PI*r*rif(area>)breakprintf("r=d,area=fn",r,area)}}例小写字母转换成大写字母,直至输入非字母字符(c)#include<stdioh>main(){charcwhile(){c=getchar()if(c>='a'c<='z')putchar(c'a''A')elsebreak}putchar('n')}continue语句功能:结束本次循环跳过循环体中尚未执行的语句进行下一次是否执行循环体的判断仅用于循环语句中计算以内能被或整除的所有数之和#include<stdioh>voidmain(){inti,sum=for(i=i<=i){if(i!=i!=)continuesum=i}printf(“sum=d”,sum)}运行结果:sum=在for语句的循环体中使用break和continue语句。*c*#include<stdioh>main(){intifor(i=i<=i){if(i==)continueprintf(“dn”,i)if(i==)break}}结果:循环的嵌套一个循环体内又包含另一个完整的循环结构称为循环的嵌套。三种循环可互相嵌套,层数不限外层循环可包含两个以上内循环,但不能相互交叉嵌套循环的执行流程()while(){……while(){……}…}()do{……do{……}while()…}while()()while(){……do{……}while()……}()for(){……do{……}while()……while(){……}…}for(h=h<=h)for(m=m<=m)for(s=s<=s)循环的嵌套for(h=h<=h)for(m=m<=m)for(s=s<=s)for(h=h<=h)for(m=m<=m)for(s=s<=s)循环的嵌套例循环嵌套输出九九表(c)#include<stdioh>main(){inti,jfor(i=i<=i){for(j=j<=j)printf(“d*d=d”,i,j,i*j)printf(“n”)}}几种循环的比较几种循环的比较()四种循环都可以用来处理同一问题一般情况下它们可以互相代替。但一般不提倡用goto型循环。()在while循环和dowhile循环中只在while后面的括号内指定循环条件因此为了使循环能正常结束应在循环体中包含使循环趋于结束的语句(如i或i=i等)。for循环可以在表达式中包含使循环趋于结束的操作甚至可以将循环体中的操作全部放到表达式中。因此for语句的功能更强凡用while循环能完成的用for循环都能实现。几种循环的比较几种循环的比较()用while和dowhile循环时循环变量初始化的操作应在while和dowhile语句之前完成。而for语句可以在表达式中实现循环变量的初始化。()while循环、dowhile循环和for循环可以用break语句跳出循环用continue语句结束本次循环。而对用goto语句和if语句构成的循环不能用break语句和continue语句进行控制。程序举例例求Fibonacci数列:……的前个数#include<stdioh>voidmain(){longintf,fintif=f=for(i=i<=i){printf(“ldld”,f,f)if(i==)printf(“n”)f=fff=ff}}例求Fibonacci数列:……的前个数(c)例判断m是否素数(c)#include<stdioh>#include<mathh>Voidmain(){inti,m,kprintf(“enteraintegernumber:”)scanf(“d”,m)k=(int)sqrt(m)for(i=i<=ki)if(mi==)breakif(i>k)printf(“disaprimen”,m)elseprintf(“disnotaprimen”,m)}例译密码例如Hello,world!译成密码:Lipps,asvph!#include<stdioh>voidmain(){charcwhile((c=getchar())!=‘n’){if((c>=‘a’c<=‘z’)||(c>=‘A’c<=‘Z’)){c=cif(c>’Z’c<=‘Z’||c>’z’)c=c}printf(“c”,c)}printf(“n”)}例译密码(c)练习题练习题以下程序的输出结果是()#include“stdioh”voidmain(){intnum=while(num<=){numprintf(“dn”,num)}}(B)(C)(D)C练习题练习题以下程序的输出结果为#include“stdioh”voidmain(){intx=while(x>x<){xif(x){xbreak}elsecontinue}printf(“dn”,x)}练习题练习题执行以下程序段的输出结果是()intx=do{printf(“dn”,x=)}while(!(x))(B)(C)(D)死循环假定a和b为int型变量则执行以下语句后b的值为()a=b=do{b=aa}while(b<)(B)(C)(D)CD练习题练习题以下程序的输出结果是()main(){inti,j,m=,n=for(i=i<i)for(j=j<j)if(j>=i)m=nprintf(“d”,n)}(B)(C)(D)C练习题练习题以下程序的输出结果是()main(){intx=,y=,ifor(i=x>y=i)printf(“dd”,x,y)}(B)(C)(D)D练习题练习题以下程序的输出结果是()main(){inti,j,x=for(i=i<i){xfor(j=j<j){if(j)continuex}x}printf(“x=dn”,x)}x=(B)x=(C)x=(D)x=B作业作业设每只母鸡值元每只公鸡值元每只小鸡值元。现要用元钱买只鸡设计买鸡方案。(用for循环写程序)解题思路:设买母鸡i只公鸡j只小鸡k只。首先考虑到母鸡元一只因此母鸡最多只能买只即外循环只需要从到就可以了。其次考虑到公鸡元一只因此公鸡最多只能买只又考虑到对公鸡的列举放到第二层for循环中此时已经买了i只母鸡所以公鸡最多只能买(i)只即第二层for循环只需从到i就可以了。此时买小鸡数为k=ij。#include"stdioh"main(){intijkfor(i=i<=i++)for(j=j<=-*ij++){k=-i-jif(*i+*j+*k==)printf("dddn"ijk)}}运行结果如下:设每只母鸡值元每只公鸡值元每只小鸡值元。现要用元钱买只鸡设计买鸡方案。(用for循环写程序)设买母鸡i只公鸡j只小鸡k只

用户评论(0)

0/200

精彩专题

上传我的资料

每篇奖励 +2积分

资料评价:

/64
0下载券 下载 加入VIP, 送下载券

意见
反馈

立即扫码关注

爱问共享资料微信公众号

返回
顶部