




已阅读5页,还剩59页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言可实现循环的语句:用goto和if构成循环while语句dowhile语句for语句,第五章循环结构程序设计,5-1.goto语句及用goto构成循环goto语句一般格式,goto语句标号;.标号:语句;,功能:无条件转移语句说明:不能用整数作标号只能出现在goto所在函数内限制使用goto语句,goto语句及用goto构成循环说明:,不提倡使用goto语句。对结构化语句,程序控制不好,编译系统也比较混乱。为什么高级语言还要有goto语句。因为软件系统要向下兼容,用低版本编写的程序可能有goto语句,为了高版本能读懂低版本的程序,因此,要把goto的语法放进来。但是,不提倡大家使用。,例用if和goto语句构成循环,求,#includemain()inti,sum=0;i=1;loop:if(i=100)sum=sum+i;i+;gotoloop;printf(%d,sum);,sum=0+1sum=1+2=3sum=3+3=6sum=6+4sum=4950+100=5050,5-2.while语句一般形式:,while(表达式)循环体语句;,执行流程:,特点:先判断表达式,后执行循环体功能:条件满足时执行循环体,条件不满足时结束循环体转去执行下一条语句。,说明:如果刚进入循环体时条件就不满足,则循环体一次也不执行。它相当于一条空语句。如:while(0)printf(“%dn”,x);循环条件一定要有不满足的时候,否则将出现“死循环”。如:while(1)printf(“%dn”,x);,循环体如果包含一个语句以上,应组成复合语句。如:while(ab)t=a;a=b;b=t;如不加,则while语句的范围只到while后面第一个分号处。,例用while循环求(5-1.c),#includemain()inti,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%d,sum);,sum=0+1sum=1+2=3sum=3+3=6sum=6+4sum=4950+100=5050,例显示110的平方(5-2.c),#includemain()inti=1;while(i=10)printf(%d*%d=%dn,i,i,i*i);i+;,运行结果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100,5-3.dowhile语句一般形式:,do循环体语句;while(表达式);,执行流程:,特点:先执行循环体,后判断表达式说明:至少执行一次循环体dowhile可转化成while结构,例用dowhile循环求(5-3.c),#includemain()inti,sum=0;i=1;dosum=sum+i;i+;while(i=100);printf(%d,sum);,例while和dowhile循环的比较,main()inti,sum=0;scanf(%d,main()inti,sum=0;scanf(%d,运行结果:1sum=55再运行一次:11sum=0,运行结果:1sum=55再运行一次:11sum=11,结论:当while后面的表达式第一次值为真时,两种循环得到的结果相同;否则,二者结果不相同(指二者具有相同的循环体的情况)。,可以看到,当输入i的值小于或等于10时,二者得到的结果相同。而当i的值大于10时,二者结果就不同了。这是因为此时对while循环来说,一次也不执行循环体,而对dowhile循环语句来说则要执行一次循环体。,while和dowhile循环补充,while语句用来实现“当型”循环。do-while语句是先执行循环体,后判断表达式的“当型”循环(因为当条件满足时才执行循环体)。但利用它可以方便的实现“直到型”循环结构。,“直到型”循环结构是表达式为真时结束循环。因此,用do-while语句表示时,应将条件取“反”。,main()intt=1,i=2;dot=t*i;i+;while(i=5);printf(“t=%d,t);,“当i5结束循环”是对同一问题的两种表述方法。,5-4.用for语句实现循环,C语言中的for语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。,for语句一般形式:,for(表达式1;表达式2;表达式3)循环体语句;,执行流程:,for(i=1;i=10;i+)sum=sum+i;,执行流程:,循环变量赋初值,循环控制条件,循环体,循环变量增值,for(i=1;i=10;i+)sum=sum+i;,for语句一般应用形式:,for(循环变量赋初值;循环条件;循环变量增值)循环体语句;,说明:for语句可以转换成while结构,表达式1;while(表达式2)循环体语句;表达式3;,5-4.用for语句实现循环,补充说明:(1)for语句的一般形式中的“表达式1”可以省略,此时应在for语句之前给循环变量赋初值。注意省略表达式1时,其后的分号不能省略。如for(;i=100;i+)sum=sum+i;执行时,跳过“求解表达式1”这一步,其他不变。,补充说明:(2)如果表达式2省略,即不判断循环条件,循环无终止地进行下去。也就是认为表达式2始终为真。例如:for(i=1;i+)sum=sum+i;表达式1是一个赋值表达式,表达式2空缺。它相当于:i=1;while(1)sum=sum+1;i+;,5-5.用for语句实现循环,补充说明:(3)表达式3也可以省略,但此时程序设计者应另外设法保证循环能正常结束。如:for(i=1;i=100;)sum=sum+i;i+;在上面的for语句中只有表达式1和表达式2,而没有表达式3。i+的操作不放在for语句的表达式3的位置处,而作为循环体的一部分,效果是一样的,都能使循环正常结束。,5-5.用for语句实现循环,补充说明:(4)可以省略表达式1和表达式3,只有表达式2,即只给循环条件。如:for(;i=100;)while(i=100)sum=sum+i;相当于sum=sum+i;i+;i+;在这种情况下,完全等同于while语句。可见for语句比while语句功能强,除了可以给出循环条件外,还可以赋初值,使循环变量自动增值等。,5-5.用for语句实现循环,补充说明:(5)3个表达式都可省略,如:for(;)语句相当于while(1)语句即不设初值,不判断条件(认为表达式2为真值),循环变量不增值。无终止地执行循环体。,5-5.用for语句实现循环,补充说明:(6)表达式1可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式。如:for(sum=0;i=100;i+)sum=sum+i;表达式3也可以是与循环控制无关的任意表达式。,5-5.用for语句实现循环,补充说明:表达式1和表达式3可以是一个简单的表达式,也可以是逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。如:for(sum=0,i=1;i=100;i+)sum=sum+i;或for(i=0,j=100;i=j;i+,j-)k=i+j;表达式1和表达式3都是逗号表达式,各包含两个赋值表达式,即同时设两个初值,使两个变量增值.,5-5.用for语句实现循环,补充说明:在逗号表达式内按自左至右顺序求解,整个逗号表达式的值为其中最右边的表达式的值。如:for(i=1;i=100;i+,i+)sum=sum+i;相当于for(i=1;i=100;i=i+2)sum=sum+i;,5.5用for语句实现循环,补充说明:(7)表达式一般是关系表达式(如i=100)或逻辑表达式(如ab(c=getchar()!=n;i+=c);在表达式2中先从终端接收一个字符赋给c,然后判断此赋值表达式的值是否不等于n(换行符),如果不等于n,就执行循环体。即不断输入字符,将它们的ASC码相加,直到输入一个“换行”符为止。注意:此for语句的循环体为空语句,把本来要在循环体内处理的内容放在表达式3中,作用是一样的。可见for语句功能强,可以在表达式中完成本来应在循环体内完成的操作。,5.5用for语句实现循环,补充说明:for(;(c=getchar()!=n;)printf(%c,c);for语句中只有表达式2,而无表达式1和表达式3。其作用是每读入一个字符后立即输出该字符,直到输入一个“换行”为止。请注意,从终端键盘向计算机输入时,是在按Enter键以后才将一批数据一起送到内存缓冲区中去的。,运行情况:Computer(输入)Computer(输出)而不是CCoommppuutteerr,5-5.用for语句实现循环,注意:C语言中的for语句比其他语言(如BASIC,PASCAL)中的FOR语句功能强得多。可以把循环体和一些与循环控制无关的操作也作为表达式1或表达式3出现,这样程序可以短小简洁。但过分地利用这一特点会使for语句显得杂乱,可读性降低,最好不要把与循环控制无关的内容放到for语句中。,for循环程序举例,例:国王的小麦。相传古代印度国王舍罕要褒赏聪明能干的宰相达依尔(国际象棋的发明者),国王问他要什么?达依尔回答说:“国王只要在国际象棋的棋盘第1个格子中放1粒麦子,第2个格子中放2粒麦子,第3个格子中放4粒麦子,以后按此比例每一格加一倍,一直放到第64格(国际象棋的棋盘是8*8=64格),我感恩不尽,其他什么都不要了。”国王想,这有多少?还不容易?于是让人扛来一袋小麦,但不到一会儿全用没了,再来一袋很快又用完了。结果全印度的粮食全部用完还不够。国王纳闷,怎样也算不清这笔帐。现在我们用计算机来算一下。,解题思路:麦子的总粒数是:分别计算出每一格的麦子粒数,把它们加起来,就得到总粒数。据估算,1立方米小麦约有粒,可以计算出小麦的体积。,#includevoidmain()doublep=1,t=1,v;inti;for(i=1;i64;i+)p=p*2;/p是当前格子中的麦子粒数t=t+p;/t是当前麦子总粒数v=t/1.42e8;printf(“total=%en”,t);printf(“volume=%en”,v);,可以用for语句实现循环,相当于全中国960万平方公里的土地上,全铺满1.3cm厚的小麦,相当于我国几百年的小麦产量。,运行结果:Total=1.844674e+019Volnme=1.299066e+011,for循环程序举例,例:人口增长预测。据2005年末统计,我国人口为130756万人,如果人口的年增长率为1%,请计算到哪一年中国总人口超过15亿。,解题思路:假设原来的人口为p0,则一年后的人口为:p=p0*(1+r)其中r是年增长率。用此公式依次计算出每年的人口,每算出一年的人口就检查一下是否达到或超过15亿。如果未达到或超过15亿,就再计算下一年的人口,直到某一年的人口达到或超过15亿为止。,#includevoidmain()doublep=1.30756e9,r=0.01;inty;for(y=2006;p=a,continue语句功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断仅用于循环语句中,计算100以内能被7或9整除的所有数之和,#includevoidmain()inti,sum=0;for(i=1;i=100;i+)if(i%7!=0,运行结果:sum=1266,在for语句的循环体中使用break和continue语句。,/*5-6.c*/#includemain()inti;for(i=1;i=100;+i)if(i=5)continue;printf(“%dn”,i);if(i=10)break;,结果:1234678910,循环的嵌套一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。三种循环可互相嵌套,层数不限外层循环可包含两个以上内循环,但不能相互交叉嵌套循环的执行流程,(1)while()while().,(2)dodowhile();.while();,(3)while()dowhile();.,(4)for(;)dowhile();while().,for(h=0;h=23;h+)for(m=0;m=59;m+)for(s=0;s=59;s+),循环的嵌套,for(h=0;h=23;h+)for(m=0;m=59;m+)for(s=0;s=59;s+),for(h=0;h=23;h+)for(m=0;m=59;m+)for(s=0;s=59;s+),循环的嵌套,例循环嵌套,输出九九表(5-7.c),#includemain()inti,j;for(i=1;i=9;i+)for(j=1;j=9;j+)printf(“%2d*%2d=%2d”,i,j,i*j);printf(“n”);,5-7几种循环的比较,(1)四种循环都可以用来处理同一问题,一般情况下它们可以互相代替。但一般不提倡用goto型循环。(2)在while循环和do-while循环中,只在while后面的括号内指定循环条件,因此为了使循环能正常结束,应在循环体中包含使循环趋于结束的语句(如i+,或i=i+1等)。for循环可以在表达式3中包含使循环趋于结束的操作,甚至可以将循环体中的操作全部放到表达式3中。因此for语句的功能更强,凡用while循环能完成的,用for循环都能实现。,5-7几种循环的比较,(3)用while和do-while循环时,循环变量初始化的操作应在while和do-while语句之前完成。而for语句可以在表达式1中实现循环变量的初始化。(4)while循环、do-while循环和for循环,可以用break语句跳出循环,用continue语句结束本次循环。而对用goto语句和if语句构成的循环,不能用break语句和continue语句进行控制。,程序举例,例求Fibonacci数列:1,1,2,3,5,8,的前40个数,#includevoidmain()longintf1,f2;inti;f1=1;f2=1;for(i=1;i=a,例译密码(5-10.c),练习题,1.以下程序的输出结果是()#include“stdio.h”voidmain()intnum=0;while(num10,17,练习题,3.执行以下程序段的输出结果是()intx=3;doprintf(“%dn”,x-=2);while(!(-x);1(B)30(C)1-2(D)死循环4.假定a和b为int型变量,则执行以下语句后b的值为()a=1;b=10;dob-=a;a+;while(b-8;y
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 森林防灭火知识培训简讯课件
- 森林管护培训课件
- 森林消防知识培训
- 森林安全知识培训简报课件
- 2.1住宿革新乡宿品牌的打造与推广2024040376课件
- 2025年新闻媒体行业编辑岗位招聘笔试预测试题集
- 2025年PMP项目经理认证考试题库及答案
- 2025教师资格考试题库及答案
- 2025年建筑设计师招聘考试模拟题及解题技巧
- 2025年边防巡逻员招聘面试常见问题与答案
- 《分娩指导及助产技巧》课件
- 图像数据采集与处理方法-洞察分析
- 云南省昆明市官渡区2023-2024学年九年级上学期期末语文试卷(解析版)
- JTGT 3832-2018 公路工程预算定额 说明部分
- (新)旅行社部门设置及其职责
- 酒店会议服务标准流程作业指导书
- 网络攻防原理与技术 第3版 教案 -第12讲 网络防火墙
- 第一响应人应急培训
- 初中数学七年级上册思维导图
- 《认识感官》课件
- 工程伦理课程课件
评论
0/150
提交评论