版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、循环语句概述,问题:求1100的累计和。 根据已有的知识,可以用“1+2+100”来求解,但显然很繁琐。现在换个思路来考虑: 首先设置一个累计器sum,其初值为0,利用sum =sum+ i 来计算(i依次取1、2、100),只要解决以下3个问题即可: (1)将i的初值置为1; (2)每执行1次“sum = sum+ i”后,i增 1; (3)当n增到101时,停止计算。此时,sum的值就是1100的累计和。,根据已有的知识,单独实现每一步都不难。但是,由于需要经常使用这种重复计算结构(称为循环结构),C语言提供了循环语句来实现,以简化、并规范循环结构程序设计。 在语言中,可用以下语句实现循环
2、: (1)用for语句。 (2)用do-while语句。 (3)用while语句。,5.1 for语句,循环的意思就是让程序重复地执行某些语句 。,C语言提供的循环结构有三种:for语句、while语句和do_while语句。,for语句既可以用于循环次数已知的情况,也可用于循环次数预先不知道的情况。,for语句的一般形式为:,for ();) ,功能:先计算的值,然后判断的值,若该值为“假”,则退出循环,执行循环体下面的语句;若该值为“真”,则执行,然后计算的值,再判断的值,重复以上的操作。,for语句的流程图如图 :,一般情况下,是由一对花括括起来的复合语句。,for循环语句注意:, 可以
3、省略,但须保留分号(;),同时在for之前必须给循环变量赋值,如: i=1; for ( ; i=100; i+ +) sum=sum+i;, 一般不可省略,否则为无限循环。 如:for(i=1; i+) sum =sum+i; 相当于条件总为真,程序会一直不停的执行直到“数据溢出”。, 亦可省略,但在循环语句体中必须有语句来修改循环变量,以使条件表达式的值在某一时刻为0,从而能正常结束循环。,如:for(sum=0, i=1; i=100;) sum = sum +i; i+; , 三个表达式均省略,即for(;),为无限循环,程序中要避免这种情况的发生。, 条件表达式可以是关系表达式、数值
4、表达式。只要表达式的值0。就执行循环语句。,如:for( i=0; (c=getchar()!= n; i+=c);, 初始表达式、循环表达式可以是逗号表达式,如:for (sum=0, i=1; i=100; i+, i+) 相当于:sum=0; for(i=1; i=100; i=i+2), for循环也可以嵌套,执行时是由外向里,逐层进行,先执行外层循环,再进入内层循环;退出时相反,由里向外逐层退出,先退出内层循环,然后退到上一层循环。,【例5-2】任意从键盘输入两个整数a、b(ab),求它 们之间的几何级数的和,数学表达式为。,这个问题与例5-1类似,只是所求级数和的初值和终值不一样,
5、是由键盘任意输入的,为避免计算机错误,要求初值a要小于终值b 。,算法流程图如右图:,/*exam5_2.c 求几何级数的和*/ #include main() int i,j,a,b,sum=0; printf(Please input two number:n); scanf(a=%d,b=%d, ,【例5-3】编写一个程序,在屏幕上打印出具有8行7列的如下图案:,这是一个很有规律的图案,可采用二重循环嵌套的方式:第1层控制行数,第2层控制列数。,算法流程图如下图:,/*exam5_3.c 打印图案*/ #include main() int i,j; for(i=1;i=8;i+) fo
6、r(j=1;j=7;j+) printf(*); printf(n); ,5.2 while语句,While语句也是一种用于产生循环动作的语句, 一般形式为:,while() ,功能:先计算的值,若该值为“假”,则跳出循环,执行循环体后面的语句;若该值为“真”,则执行,然后回过头来再检查的值,重复以上的操作。,while语句的流程图,:是用一对花括号括起来的复合语句。,注意:在中要有使的值为假(或的值为零)的语句,否则会使程序出现无限循环而发生错误。,注意:由于while循环是先判断的值,后决定是否执行,因此,有可能一次也不执行。,【例5-4】 将例51用while语句重写,求简单几何级数的和
7、 。,/*exam5_4.c 用while求简单几何级数的和*/ #include main() int i=1,sum=0; while(i=100) sum=sum+i; i+; printf(sum=%dn,sum); ,程序运行结果: sum=5050,【例5-5】输入一个正整数n,求n!。,计算表达式:n!=n*(n-1)*(n-2)*2*1。用i代表循环变量,s代表n!的结果值。,编程时既可以采用for循环,也可以采用while循环,求任意正整数n的阶乘的算法流程图如图 :,/*exam5_5.c while应用:求n!*/ #include main() int i,n; lon
8、g s; printf(please enter a integer:n); scanf(%d, ,试改为for循环?,while 和 for 的比较,for (i = 1; i = 10; i+) sum = sum + i;,i = 1; 循环变量赋初值 while (i = 10) 循环条件 sum = sum + i; i+; 循环变量的改变 ,循环体,例5-6 从键盘输入一批学生的成绩,计算平均分。 分析: 求累加和 确定循环条件 不知道输入数据的个数,无法事先确定循环次数 用一个特殊的数据作为正常输入数据的结束标志,比如选用一个负数作为结束标志。,#include Int main
9、(void) int num; double grade, total; num = 0; total = 0; printf(“Enter grades: n); scanf(%lf, ,Enter grades: 67 88 73 54 82 -1 Grade average is 72.80,Enter grades: -1 67 88 73 54 82 Grade average is 0,5.3 dowhile语句,do_while语句是另一种用于产生循环动作的语句。 一般形式为:,do while();,功能:先执行一次,然后计算的值,若该值为“真”,则重复以上的操作,直到该值为“
10、假”,则退出循环语句,执行下一条语句。,do_while语句的流程图 :,应该是用一对花括号括起来的复合语句。,注意 :,要有可以使的值为“假”(即的值等于零)的语句,否则会使程序出现无限循环而发生错误。,do_while循环与while循环的区别,不论情况怎样,do_while循环中的至少会执行一次。,【例5-7】 将例5-6用do_while语句重写。,#include Int main(void) int num; double grade, total; num = 0; total = 0; do printf(“Enter grades:); scanf (“%lf”, ,Ente
11、r grades: 67 88 73 54 82 -1 Grade average is 72.80,Enter grades: -1 67 88 73 54 82 Grade average is 0,【例5-8】求sin(x)=x-x3/3!+x5/5!-x7/7!+直到最后一项绝对值小于le-7(即10-7)为止。,分析:,多项式从第二项起,每一项都是前一项乘以一个因子, (-x2)/(n*(n-1) (n=3,5,7,9) 用s代表sin(x)的值,t代表每一项的值, 则:t=t*(-x2) / (n*(n-1); s=s+t; x的值是用弧度值表示的 (10=180弧度),如: 30
12、00.523598775,算法流程图如后图:,/*exam5_8.c 求sin(x)的值*/ #include #include main() double s,t,x; int n=1; scanf(%lf, ,程序运行结果: 1.57 sin(1.570000)=1.000000,while 是先判别条件,再决定是否循环; do-while 是先至少循环一次,然后再根据循环的结果决定是否继续循环。,while 和 do-while 的比较,循环语句的选择,if(循环次数已知) 使用for语句 else /* 循环次数未知 */ if (循环条件在进入循环时明确) 使用while语句 els
13、e /* 循环条件需要在循环体中明确 */ 使用do-while语句,5.4 用于循环中的break和continue语句,一、break语句,break语句的作用是从一种控制结构中跳出来 。 break语句可用于循环结构,其作用是从本层循环结构中跳出,可以提前结束执行,执行循环结构外的下一条语句。,break语句的一般形式为: break;,break语句在循环语句体中的位置应根据程序的需要而定,一般是用在循环体内某一个if条件分支的语句中,用来表示在循环过程中当某一个条件成立时提前结束循环。,程序解析判断素数,算法:除了1和m,不能被其它数整除。 设 i 取值 2, m-1 如果m不能被该
14、区间上的任何一个数整除,即对每个i,m%i 都不为0,则m是素数 只要找到一个i,使m%i为0,则m肯定不是素数 m %2 %3 %4 %5 %(m-1) 不是素数 | =0 =0 是素数 i m/2) printf(yesn) else printf(non”);,int main(void) int i, m; printf(“Enter a number: ); scanf (%d, ,源程序判断素数,Enter a number: 9 No,Enter a number: 11 11 is a prime number!,循环条件? 循环的结束条件?,break 语句,while(ex
15、p) 语句1 if (expb) break; 语句2 ,for (i = 2; i m/2 ) printf(Yes); else printf(No!n);,当循环有多个出口时: 表示循环条件 区分结束条件,for(i = 2; i = m/2; i+) if(m%i = 0) printf(No!n); break; printf(Yes);,二、Continue语句,Continue语句只适用于循环结构,其一般形式为:,作用:提前结束本次循环,提前进行下一次循环。,【例5-10】编写程序,打印100200中不能被3整除的数。,/*exam5_10.c 求不能被3整除的数*/ #incl
16、ude main() int n; for(n=100;n=200;n+) if(n%3=0) continue; printf(%dt,n); ,算法流程图如图 :,要准确地使用break语句和continue语句,除非有必要,否则若可以不用则尽量不采用break语句和continue语句。,对于例5-10的问题,打印100200中不能被3整除的数。不采用continue语句的算法流程图如图所示:,/*exam5q10.c 例5-10问题不用continue * #include main() int n; for(n=100;n=200; n+) if(n%3!=0) /*n不能被3整除*
17、/ printf(%d,n); ,【例5-11】 break语句和continue语句在程序中的区别,/*exam5_11.c break的作用*/ #include main() int x; for(x=1;x=10;+x) if(x=5) break; printf(%d,x); ,运行结果: 1,2,3,4,/*exam5q11.c continue的作用*/ #include main() int x; for(x=1;x=10;+x) if(x=5) continue; printf(%d,x); ,运行结果:1,2,3,4,6,7,8,9,10,5.5 循环结构的嵌套,循环结构的
18、嵌套,指的是某一种循环结构的语句中,包含有另一个循环结构。,使用嵌套的结构时,要注意嵌套的层次,不能交叉。,例5.12 求1! + 2! + . + 100!,嵌套循环,for (i = 1; i = 100; i+) item = i ! sum = sum + item; ,for(i = 1; i = 100; i+) item = 1; for (j = 1; j = i; j+) item = item * j; sum = sum + item; ,例4-6 源程序,#include int main(void) int i, j; double item, sum; /* ite
19、m 存放阶乘 */ sum = 0; for(i = 1; i = 100; i+) item = 1; /* 每次求阶乘都从1开始 */ for (j = 1; j = i; j+) /* 内层循环算出 item = i! */ item = item * j; sum = sum + item; printf(1! + 2! + 3! + + 100! = %en, sum); ,内层循环的初始化,for(i = 1; i = 100; i+) item = 1; for (j = 1; j = i; j+) item = item * j; sum = sum + item; ,求1!
20、+ 2! + . + 100!,item = 1; for(i = 1; i = 100; i+) for (j = 1; j = i; j+) item = item * j; sum = sum + item; ,求1! + 1!*2! + + 1!*2!*100! ?,分析嵌套循环的执行过程,for(i = 1; i = 100; i+) item = 1; for (j = 1; j = i; j+) item = item * j; sum = sum + item; ,外层循环变量 i 的每个值 内层循环变量 j 变化一个轮次; 内外层循环变量不能相同 分别用 i 和 j,for
21、(i = 1; i = 100; i+) for (j = 1; j = i; j+) printf (%d %dn, i, j );,5.6 goto语句,goto语句是一种无条件转向语句,它可以用在程序的任何地方,其一般形式为:,goto 语句标号;,“语句标号”为任何合法的标识符,放在某个语句前面并加上冒号“:”作为语句的标号,标号只对goto 语句有意义,带有标号的语句被称作标号语句。,如:error: 、end:、exp:等均为合法的语句的标号。,goto语句的作用:转到标号语句所在的地方继续执行。,【例5-13】用if语句和goto语句组合构成的循环重 写计算器 的程序。,/*ex
22、am5_13.c if+goto构成循环*/ #include main() int i,sum=0; i=1; loop:if(i=100) sum=sum+i; i+; goto loop; printf(sum=%d,sum); ,程序运行结果: sum=5050,goto语句是一种非结构化的语句,在程序设计中应尽量少用或不用goto语句。,5.7 程序范例,【例5-16】打印出ASC码序列中从33127(十进制)的字符对照表。,/*exam5_16.c 打印部分ASCII码字符*/ #include main() int i; for (i=33; i128; i+) printf(%
23、d - %ct,i,i); ,【例5-17】设公鸡每只5元,母鸡每只3元,小鸡每元3只,现用100元钱买100只鸡,编写一个程序,算出可以各买多少只鸡?,#include main() int i,j,k; for(i=0; i*5=100; i+) for(j=0; j*3=100; j+) for(k=0; k/3=100; k+=3) if(i*5+j*3+k/3)=100 ,程序运行结果: Cock - 0 Hen - 25 Chicken - 75 Cock - 4 Hen - 18 Chicken - 78 Cock - 8 Hen - 11 Chicken - 81 Cock - 12 Hen - 4 Chicken - 84,小结 :,三种循环结构:for、while和do_while循环。,当循环次数是肯定的情况下,用for循环比较方便。,while循环和for循环都要先判断条件再执行循环语句体,因此,有可能一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026事业单位招聘备考题库有答案详解
- 2026年本溪市教育系统冬季“名校优生”引进急需 紧缺人才备考题库(本溪市第一中学)及答案详解(夺冠系列)
- 2025福建福清市明德幼儿园招聘备考题库及1套完整答案详解
- 2026年陇东学院高层次人才招聘100人备考题库(第一期)含答案详解
- 2026江西南昌市劳动保障事务代理中心招聘非全日制白案厨师1名备考题库及答案详解(考点梳理)
- 2025安徽宣城市旌德县旅发置业有限公司招聘2人备考题库及答案详解(考点梳理)
- 2026天津市中天天杰招聘备考题库及参考答案详解一套
- 2026年南昌八一起义纪念馆招聘编外人员2人备考题库有完整答案详解
- 2026年福建泉州仰恩大学招聘6名工作人员备考题库完整参考答案详解
- 2026广东佛山市顺德区乐从镇觉培幼儿园招聘带班教师及后勤人员6人备考题库完整参考答案详解
- 2025至2030中国汽车检测行业市场深度研究与战略咨询分析报告
- 2026年南昌健康职业技术学院单招职业技能考试备考试题附答案详解
- 2026年安徽粮食工程职业学院高职单招职业适应性考试备考试题及答案详解
- 雨课堂学堂在线学堂云《中国电影经典影片鉴赏(北京师范大学)》单元测试考核答案
- 四川水利安全b证考试试题及答案
- 2626《药事管理与法规》国家开放大学期末考试题库
- 2025江西江新造船有限公司招聘70人模拟笔试试题及答案解析
- 重庆市丰都县2025届九年级上学期1月期末考试英语试卷(不含听力原文及音频答案不全)
- 2026年党支部主题党日活动方案
- 供销合同示范文本
- 《分布式光伏发电开发建设管理办法》问答(2025年版)
评论
0/150
提交评论