第六章循环控制_第1页
第六章循环控制_第2页
第六章循环控制_第3页
第六章循环控制_第4页
第六章循环控制_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

1三种基本程序结构顺序结构选择结构循环结构2第六章循环控制概述goto语句、用goto语句构成循环结构用while语句构成循环结构用do-while语句构成循环结构用for语句构成循环结构break语句与continue语句程序举例3概述循环控制应用例子:输入全校学生成绩;求若干个数之和;迭代求根;排序;播放音乐、视频4goto语句一般形式goto语句标号功能:程序执行顺序无条件跳转到语句标号处说明语句标号用标识符表示。goto语句常用环境:和if语句一起构成循环结构;从多重循环内层跳转到循环体外。5goto语句示例用if语句和goto语句构成循环,求#include<stdio.h>voidmain(void){inti,sum=0;i=1;loop:if(i<=100){sum+=i;i++;

gotoloop;}printf("%d\n",sum);}6功能:表达式语句真假表达式成立(值非0)?语句while语句一般形式:while(表达式)语句当7while语句使用举例[例6.2]求#include<stdio.h>voidmain(void){inti,sum=0;i=1;while(i<=100){sum+=i;i++;}printf("%d\n",sum);}8while语句的注意循环体包含多个语句时,要使用语句块的形式。在循环体内应该有使循环趋于结束的语句。9do-while语句do-while语句的一般形式为:do语句while(表达式)表达式语句假真直到…不10#include<stdio.h>voidmain(void){inti,sum=0;i=1;do{sum+=i;i++;}while(i<=100);printf("%d\n",sum);}用do-while语句来实现startsum=0i=1sum=sum+ii=i+1i<=100endTF11do-while语句和while的区别与while语句基本相同,一点差别在于:while语句是先判断再确定是否进入循环体;do-while先执行一次指定循环体语句再判断。P117例当while后面表达式第一次值为"真",两种循环完全相同;否则不同。在使用中,使用"当"和"直到…不"来进行区别。12for语句的流程图如下:for语句改写为while语句如下:求解表达式1判断表达式2语句求解表达式3执行过程1先求解表达式1;2求表达式2,若为假,则中止for循环若为真,则执行for语句中的内嵌语句3.求解表达式34.转回第2步5.for循环结束,继续执行for语句的下一语句。for语句表达式1;while(表达式2){语句表达式3;}for语句的一般形式:for(表达式1;表达式2;表达式3)语句13例:用for语句求voidmain(void){inti,sum;sum=0;

for(i=1;i<=100;i++)sum+=i;printf("theresultis%d",sum);}表达式1表达式2表达式3for语句i=1;while(i<=100){sum+=i;i++;}14for语句一般用法for语句常用形式for(循环变量赋初值;循环条件;循环变量增值)又例:n!可用for语句描述如下:p=1;for(i=2;i<=n;i++)p*=i;i=2;for(;;){p*=i; i++; if(i>n)break;}程序举例:打印图形*****15#include<stdio.h>intmain(void){

printf("*****");}#include<stdio.h>intmain(void){inti;for(i=1;i<=5;i++);printf("*");}程序举例:打印图形********************16程序举例:打印图形**********17程序举例:打印图形1819for语句使用举例-编程并输出乘法表2021voidmain(void){inti,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++)printf(”%d*%d=%d

”,i,j,j*i);printf("\n");}}1*1=12*1=22*2=43*1=33*2=63*3=9……9*1=99*2=189*3=27……9*9=81for语句使用举例-编程并输出乘法表Demo603.c1*1=1 1*2=21*3=3… 1*9=92*1=22*2=42*3=6… 2*9=183*1=33*2=63*3=9………9*1=99*2=189*3=27……9*9=811*1=1 1*2=21*3=3… 1*9=9

2*2=42*3=6… 2*9=18

3*3=9…3*9=27……

9*9=8123(2)for语句中表达式1是可省略的:若省略表达式1则需在for语句前相应位置给相应变量赋初值;注意;不能省略!(1)表达式1既可以是给循环变量赋初值如:5!如:5!可改写为:

p=1;i=2;for(;i<6;i++)p=p*i;p=1;for(i=2;i<6;i++)p=p*i;i=2;for(p=1;i<6;i++)p=p*i;可改写为:也可以是与循环变量无关的表达式;for语句注意24(4)for语句中表达式3也可省略,相应地,此表达式放在for

循环体中。(5)其他写法

for(p=1,i=2;i<6;i++)p=p*i;for(p=1,i=2;i<6;p*=i,i++);(3)for语句中表达式2也可省略,即不判断循环条件,循环无终止地进行下去。如:for(i=1;;i++)sum+=i;for(;;)

…for(;i<=100;){sum+=i;

i++;}while(1)

…for(i=0;(c=getchar())!=‘\n’;i+=c);P120例子25例子程序段:计算r=1到r=10的圆面积,直到面积大于100为止。floatpi=3.14159;for(r=1;r<=10;r++){area=pi*r*r;if(area>100)break;printf("r=%f,area=%f\n",r,area);}break语句与continue语句break语句一般形式:break;break语句只用于从循环体内跳出循环-终止循环和跳出switch语句。见demo604.c26continue语句continue语句形式:continue;continue语句的作用:结束本次循环并准备执行下次循环。所谓结束本次循环指跳过循环体中continue语句后面尚未执行的语句。准备执行下次循环,是指进行下一次是否执行循环的判定,即先计算表达式3,再判断表达式2的值是否为真。27voidmain(void){intn;for(n=100;n<=200;n++){if(n%3==0)break;printf(“%d,”,n);}…}voidmain(void){intn;for(n=100;n<=200;n++){if(n%3!=0)printf("%d,",n);}}continue语句举例[例6.7]将100~200之间不能被3整除的数输出。break;见demo607.c28break和continue的区别break语句与continue语句的区别:break语句是结束循环,无条件跳到循环外。continue语句的作用是结束循环中的本次执行,整个循环并不因此结束。29t=1,pi=0,n=1,s=1pi=pi+tn=n+2s=-st=s/n当|t|>=10-6pi=pi*4输出pi程序举例例5.7用pi/4=1-1/3+1/5-1/7+1/9-……公式求pi的近似值。30

程序举例#include<math.h>voidmain(void){intsign;doublen,t,pi;t=1;pi=0;n=1.0;sign=1;while(fabs(t)>=1e-6){pi=pi+t;n=n+2;sign=-sign;t=sign/n;}pi=pi*4;printf("pi=%10.6f\n",pi);}for()见demo608.c31运行结果:

pi=3.141593改动:1.只到某个分母大于100为止32[例6.9]求Fibonacci数列前40个数。

Fibonacci数列有如下特点:第1,2两个数为1,1。从第3个数开始,该数是其前面两个数之和。即:F1=1(n=1)F2=1(n=2)Fn=Fn-1+Fn-2(n>=3)

程序举例-问题112358132134……33f1f2f1f2f1f2F1=1,f2=1输出f1,f2f1=f1+f2f2=f2+f1fori=1to2034程序举例-源程序voidmain(void){longintf1,f2;inti;f1=1;f2=1;for(i=1;i<=20;i++){printf("%12ld%12ld",f1,f2);if(i%2==0)printf("\n");f1=f1+f2;f2=f2+f1;}}见demo605.c35112358132134558914423337761098715972584418167651094617711286574636875025121393196418317811514229832040134626921783093524478570228879227465149303522415787139088169632459861023341556.6程序举例运行结果36改动:1.直到某个数大于11000为止2.用while改写37判断整数n是否素数voidmain(void){inti,r,n;scanf("%d",&n);i=2;do{r=n%i;if(r==0){printf("n不是素数");break;}i++;}while(i<n)printf("n是素数");}Start输入ni=2r=n%ii=i+1r=0?i>n-1打印n"是素数"NY打印n"不是素数"Endbreak见demo612.c38voidmain(void){inti,r,n;scanf("%d",&n);i=2;do{r=n%i;if(r==0){printf("n不是素数");break;}i++;}while(i<=sqrt(n));if(i>sqrt(n))printf("n是素数");}voidmain(void){inti,r,n;scanf("%d",&n);i=2;do{r=n%i;if(r==0){printf("n不是素数");break;}i++;}while(i<n);if(i>=n)printf("n是素数");}循环次数是多少?是否可以优化?见demo613.c39程序举例-问题例6.10译密码为使电文保密,往往按一定规律将其转换成密码,收报人再按一定规律将其解密。现按以下规律译码:A变成E,a变成e,即变成其后第4个字母。W变成A,X变成B,Y变成C,Z变成D,输入一行字符要求输出相应密码。40程序举例-源程序#include<stdio.h>voidmain(void){charc;while((c=getchar()!=‘\n’){if((c>=‘a’&&c<=‘z’)||(c>=‘A’&&c<=‘Z’)){c=c+4; if(c>’Z’&&c<=‘Z’+4||c>’z’) c=c-26;

}printf("%c",c);}}见demo610.c41while(ans<=12742){

}

运行结果:n=37,ans=13743.895347voidmain(void){intn=1;floatans;/*n—对折次数,ans—*/ans=2*1e-7;/*存放对折后的厚度*/ans=ans*2;n=n+1;printf("n=%d,ans=%f\n",n,ans);}程序举例例:用0.1mm厚纸对折,问对折多少次后,其厚度超过地球直径(12742公里)?for(n=1;ans<=12742;n++)ans*=2;42voidmain(void){longinti=1,ans;ans=111*11*(i*10+1);while(111111!=ans)

{ i++; ans=111*11*(i*

温馨提示

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

评论

0/150

提交评论