C语言-第5章循环结构.ppt_第1页
C语言-第5章循环结构.ppt_第2页
C语言-第5章循环结构.ppt_第3页
C语言-第5章循环结构.ppt_第4页
C语言-第5章循环结构.ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章循环结构,循环的基本要素有三个:循环入口(即循环的初始化条件)循环出口(即循环的终止条件)循环体(反复执行的部分)C语言提供了3种循环语句实现循环结构5.1while语句5.2do-while语句5.3for语句5.4转移语句5.5举例巩固练习,语义:计算表达式的值,当值为非0(真)时,执行循环体语句。重复上述操作,直到表达式的值为0(假)时,跳出循环,转而执行while语句的后续语句。,5.1while语句,while语句的一般形式为:while(表达式)语句;,while(i=100)sum=sum+i;i=i+1;,【例5.1】计算,sum称为累加器,使用前要进行初始化,一般初始化为0,思考:,2.求1+1/2+1/3+.+1/n3.求1-1/2+1/3-.-1/n,1.求,使用while语句应注意以下几点:,while语句中的表达式可以是任意表达式,一般是关系表达或逻辑表达式,只要表达式的值为非0(真)则继续循环。如:while(n-)printf(%d,n);循环体可以是空语句、单语句或用花括号括起来的复合语句。应注意循环条件的选择以避免死循环。例如下列循环语句:while(n=10)printf(%d,n+);while语句从语法上来说是一条完整的控制语句。,死循环,允许while语句的循环体语句又是while语句,从而形成循环嵌套。如:i=1;while(i=9)/*外循环*/j=1;while(j100)sum+=i;,使用while语句应注意以下几点:,5.2do-while语句,do-while语句的一般形式为:do语句;while(表达式);,语义:先执行循环体语句一次,再判别表达式的值,若为非0(真)则继续执行循环体语句,否则终止循环,转而执行dowhile语句后面的语句。,注意观察,【例5.3】一个人口统计程序,1980年世界人口已达45亿,按年增长率1%计算,问什么年份开始世界人口突破100亿大关。,while(p1e+10)p=p*(1+rate);year+;,初值:年:year=1980人口:p=4.5e+09以后每年的人口:p=p*(1+0.01),5.3for语句,一般形式为:for(表达式1;表达式2;表达3)语句执行过程:计算表达式1的值,为循环变量赋初值。计算表达式2的值,若值为非0(真),则执行循环体一次,否则跳出循环。计算表达式3的值,转回第步重复执行。,如:sum=0;for(k=1;k=100;k+)sum+=k;,赋值,控制循环结束,循环变量增值或减值,例:求n个自然数的累加和,dosum+=i;i+;while(i=n);,for(i=1;i=n;i+)sum+=i;,【例5.4】编程计算正整数1到n中的奇数之和以及偶数之和。,注意:,三个表达式均可省略,但两个分号不能省略。省略表达式1:此时必须在for语句之前给循环变量赋初值。如:k=1;for(;k=100)break;省略表达式3:应另设法使循环正常执行。如:for(k=1;k=100;)s+=k;k+;全省略:“死循环”如:for(;)sum+=k;,关于:for(表达式1;表达式2;表达3)语句,循环体也可以省略,但分号不可省略。“;”代表空语句,表示不执行任何操作,但在语法上不可少。如:for(k=1;k=10000;k+);表达式1和3还可包含与循环变量无关的其它表达式。如:for(s=0,k=1;k=100;k+,s=s+k);for(k=0;k=100;k+,k+)s+=k;表达式2可为任意表达式,只要值为非零,就执行循环体。如:for(k=0;(c=getchar()!=n;k+);for(;(c=getchar()!=n;)printf(“%c”,c);,思考:使用三种循环语句实现:1+2*2+3*3+100*100,关于:for(表达式1;表达式2;表达3)语句,三种循环语句可相互嵌套,构成多重循环。,for()while(),dofor()while();,while()for(),for()for(),for(i=1;i=2;i+)j=1;while(j=5)printf(“%d”,j);printf(“n”);,【例5.6】有1、2、3三个数字,编写程序输出由这三个数组成的互不相同且无重复数字的两位数。即输出:12,13,21,23,31,32。,#include“stdio.h”main()inti,j,k;printf(n);for(i=1;i4;i+)*二重循环*/for(j=1;j4;j+)if(i!=j)/*确保i、j两位互不相同*/printf(%d%dn,i,j);,三位数?,【例5.7】编程打印三角形表示(黑色区域)的九九乘法表,*12345678911224336944812165510152025661218243036771421283542498816243240485664991827364554637281,#includestdio.hmain()inti,j,p;for(i=1;i=9;i+)for(j=1;j=i;j+)p=i*j;printf(%4d,p);printf(“n”);/换行,5.4转移语句,C语言提供的4种转移语句为:goto,break,continue和return。goto语句goto语句也称为无条件转移语句,其一般格式如下:goto语句标号;改变程序正常流向,转去执行语句标号所标识的语句。语句标号用标识符定义,置于某一语句行的前面,语句标号后加冒号(:),起标识语句的作用。,如:label:i+;gotolabel;,一般形式为:break;break语句只能用在switch语句或循环语句中作用:跳出switch语句或跳出本层循环,转去执行后面的程序语句。,main()inti,s;s=0;for(i=1;i5)break;printf(“s=%dn”,s);,5.4转移语句-break语句,一般格式是:continue;语义:结束本次循环,即不再执行循环体中continue语句之后的语句,转入下一次循环条件的判断与执行。注意(1)只能用在循环体中,(2)只结束本层本次的循环,并不跳出循环。,#includestdio.hmain()intk=0,s=0,i;for(i=1;i2)continue;k=k+s;printf(s=%d,k=%dn,s,k);,5.4转移语句-continue语句,例:打印1-100之内能被7整除的数,#include“stdio.h”main()intn;for(n=1;n=100;n+)if(n%7)=0)printf(“%d”,n);,思考:如何控制每行打印5个数,(n%7)!=0),continue;,【例5.11】打印fibonacci数列:1,1,2,3,5,8,13,21,的前36个数,分析:由题意可得下列递推公式:F1=1F2=1Fn=Fn-1+Fn-2(n=336),#includestdio.hmain()longf1,f2;inti;f1=1;f2=1;for(i=1;i=k,则说明for语句是正常退出,即m不能被2k之间的任何数整除,#includestdio.hmain()intn,i;scanf(%d,其实循环只需从2到n的平方根就可以了。,【例5.16】输出2100以内的素数。,k=sqrt(n);,k,k,k;,【例5.16】:判断一个整数n是否是素数(只能被1和本身整除的数称为素数),#include“math.h”,【例5.16】输出2100以内的素数。,【例5.16】:判断一个整数n是否是素数(只能被1和本身整除的数称为素数),#includestdio.h#include“math.h”main()intn,i,k;scanf(%d,其实n无需输入,可以循环取值。,for(n=2;n=100;n+),去掉2以上的所有偶数,再次优化,行数x前导空格数a输出字符个数n131223315407315223131归纳:xa=4-xn=2*x-1,补充例题1(习题5.3(6):打印如下图形,*,#includestdio.hmain()intx,n,a;for(x=1;x=1;x-)for(a=1;a=4-x;a+)printf();for(n=1;n=2*x-1;n+)printf(*);printf(n);,*,1222333334444444333332221,如果?,行数x前导空格数a输出字符个数n131223315407315223131归纳:xa=4-xn=2*x-1,(输出数),#includestdio.hmain()intx,n,a;for(x=1;x=1;x-)for(a=1;a=4-x;a+)printf();for(n=1;n=2*x-1;n+)printf(*);printf(n);,1222333334444444333332221,printf(%d,x);,printf(%d,x);,#includestdio.hmain()intx,n,a;for(x=1;x=1;x-)for(a=1;a=4-x;a+)printf();for(n=1;n=2*x-1;n+)printf(%d,x);printf(n);,for(n=1;n0;n-)printf(%d,n);,for(n=1;n0;n-)printf(%d,n);,1121123211234321123211211,又如果?,补充例题2:从输入的若干个正数中选择最大值,用-1结束输入,#include“stdio.h”main()intx,max=0,i;scanf(“%d”,补充例题3:输入一个多位数字,以相反的顺序打印该数。如:输入3456,输出6543,#include“stdio.h”main()intnumber,right,t=0;printf(“enteryournumber:n”);scanf(“%d”,#defineN6/*6名学生*/#defineM5/*5门课程*/main()inti,j;floatg,sum,ave;for(i=1;i=N;i+)sum=0;for(j=1;j=M;j+)scanf(“%f”,补充例题4:输入6名学生5门课程的成绩,分别求每个学生的平均成绩,1.以下程序中,while循环的循环次数是_。main()inti=0:while(i10)if(i1)continue;if(i=5)break;i+:A)1B)10C)6D)死循环,不能确定次数,巩固练习,D)死循环,不能确定次数,2.以下程序运行时,从键盘输入:01,程序执行后输出结果是_:#includestdio.hmain()chark;inti;for(i=1;i3;i+)scanf(%c,A)anotherB)anotherC)anotherD)numbernumbernumbernumbernumberanothernumber,巩固练习,A),3.以下程序的输出结果是_。#includestdio.hmain()inta=0,i;for(i=1;i5;i+)switch(i)case0:case3:a+=2;case1:case2:a+=3;default:a+=5;printf(%dn,a);A)3lB)13C)10D)20,巩固练习,A)3l,4.以下程序的输出结果是_。#includestdio.hmain()inti=0,a=0;while(i20)for(;)if(i%10)=0)break;elsei-;i+=11;a+=i;printf(%dn,a);A)21B)32C)33D)11,巩固练习,B)32,5.以下程序的功能是:按顺序读入10名学生4门课程的成绩,计算出每位学生的平均分并输出:#includestdio.hmain()intn,k;floatscore,sum,ave;sum=0.0;for(n=1;n=10;n+)for(k=1;k10,巩固练习,17,本章小结,语言提供了三种循环语句用于实现循环结构。for语句一般用于实现给定循环变量初值,步长增值及循环次数的循环结构。当循环次数及循环控制条件要在循环过程中才能确定的循环可用while或dowhile语句。三种循环语句可以相互嵌套组成多重循环,循环之间可以并列但不能交叉。,三种循环语句分析用while和dowhile循环时,循环变量的初始化操作在循环之前进行,而for循环是在表达式1中进行的。whi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论