第五章循环结构_第1页
第五章循环结构_第2页
第五章循环结构_第3页
第五章循环结构_第4页
第五章循环结构_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

CProgramCProgramCProgramCProgramCProgramCProgramCProgramCProgramCProgramCProgramCProgramCProgramCProgramCProgramCProgramCProgramCProgramCProgramCProgramCProgramCProgramCProgramCProgramCProgramCProgramCProgramCProgramCProgram第5章循环控制用while语句设计循环结构程序用do_while设计循环结构程序用for语句设计循环结构程序本章内容复习提问1、请从键盘输入五个学生成绩,输出总成绩并统计不及格人数.main(){floats1,s2,s3,s4,s5,sum;intcount=0;printf(“input5scores:\n”);

scanf("%f,%f,%f,%f,%f",&s1,&s2,&s3,&s4,&s5);

sum=s1+s2+s3+s4+s5;

if(s1<60)count++;if(s2<60)count++;if(s3<60)count++;if(s4<60)count++;if(s5<60)count++;

printf(“sum=%6.2f,count=%d\n",sum,count);}思考如果要是有50个学生呢?概述一.引入循环控制语句的作用当满足一定条件时,重复执行一段程序.基本结构之一.二.设置循环需要考虑的问题循环初值,循环条件的设置,循环条件的修改.三.C语言中可用以下语句实现循环

用goto语句和if语句构成循环------尽量避免使用用while语句用do—while语句用for语句while语句当型循环一般形式:while(表达式)

循环体语句执行流程:特点:先判断表达式,后执行循环体当满足条件时,一直做某事当表达式为真循环体while语句表达式语句0非0说明:循环体有可能一次也不执行循环体可为任意类型语句下列情况,退出while循环条件表达式不成立(为零)循环体内遇break,return,goto无限循环:while(1)

循环体语句;while语句注意:

循环体若包含一个以上语句,应该用花括号括起来(使用复合语句)。循环体内,应注意设置修改循环条件的语句。否则循环无法终止。while语句#include<stdio.h>main(){inti,sum=0;

i=1;

while(i<=100)

{

sum=sum+i;

i++;

}

printf("%d",sum);}循环初值循环终值循环变量增值循环条件循环体例用while循环求1+2+3…+100编程计算1~10的平方和

执行过程isum10+1*1=121+2*2=535+3*3=14414+4*4=30530+5*5=55655+6*6=91791+7*7=1408140+8*8=2049204+9*9=285285+10*10=38511文件包含循环初值主函数#include<stdio.h>main(){}inti=1,sum=0;while(){}i<=10sum+=i*i;i++;循环条件循环变量增值将i的平方累加到sum中练习思考Printf(“sum=%d”,sum);运行结果:sum=385编程计算50个学生成绩的和并统计不及格人数思考练习main(){floatscore,sum=0;inti=1,count=0;while(i<=50){printf(“inputascore:\n”);

scanf("%f",&score);

sum+=score;

if(score<60)count++;

i++;}

printf(“sum=%10.2f,count=%d\n",sum,count);}do~while语句直到型循环一般形式:do

循环体语句while(表达式);执行流程:特点:先执行循环体,后判断表达式一直做某事,直到不满足条件为止循环体直到P为假表达式语句假真do-while语句表达式循环体假(0)真(非0)循环体While循环说明:至少执行一次循环体do~while可转化成while结构do-while语句例用do~while循环求#include<stdio.h>main(){inti,sum=0;i=1;

do

{

sum+=i; i++;

}while(i<=100);

printf("%d",sum);}循环初值循环终值循环变量增值循环条件循环体do-while语句表达式循环体语句假真表达式循环体语句假真

先判断条件,后执行语句先执行语句,后判断条件do

循环体语句while(表达式);while(表达式)

循环体语句while语句与do—while语句的比较例1:求1+2+3+······+n的值,n值通过键盘输入。main(){intn,k=1,s=0;printf(“inputaninteger:\n”);scanf(“%d”,&n);while(k<=n){s=s+k;k++;}printf(“s=%d\n”,s);}main(){intn,k=1,s=0;printf(“inputaninteger:\n”);scanf(“%d”,&n);do{s=s+k;k++;}while(k<=n);printf(“s=%d\n”,s);}输入5时结果为:s=15输入0时结果为:s=0输入5时结果为:s=15输入0时结果为:s=1结论:当while后的表达式第一次为真时,while语句和do-while语句的结果相同,否则不同。while语句与do—while语句的比较例:用π/4≈1-1/3+1/5-1/7+……公式求π的近似值,直到最后一项的绝对值小于10-6为止程序举例分析问题:1、1-1/3+1/5-1/7+……要先求出来2、其中每一项为一个分数且有规律。3、每一项的分子为1、-1、1、-14、分母1、3、5、7序号分子(a)分母(b)1112-11+2=3313+2=5………………nanbnn+1-anbn+2递推公式分子(a):an+1=an且

a1=1分母(b):bn+1=bn+2且b1=1每项(x):x=a/b且x=1和(s):s=s+x且s=0开始a=1,b=1,x=1,s=0|x|>=10-6s=s+xa=-ab=b+2x=a/b非00s=s*4输出s结束#include<stdio.h>#include<math.h>main(){floata,b,x,s;a=1;b=1;x=1;s=0;while(fab(x)>=1e-6)

{

s+=x; a=-a;b=b+2;x=a/b;

}s*=4; printf(“pi=%10.6f\n",s);}有一分数序列1/2,2/3,3/5,5/8,8/13,……求出这个数列的前20项之和。练习思考分析问题:1、每一项为一个分数且有规律。2、每一项的分子为1、2、3、5、83、每一项的分母为2、3、5、8、序号分子(a)分母(b)112221+2=3332+3=5453+5=8………………nanbnn+1bnan+bn

递推公式#include<stdio.h>#include<math.h>main(){floata,b,x,s,t;inti=1;a=1;b=2;x=0.5;s=0;while(i<=20)

{

s+=x; a=b;b=a+b;x=a/b;i++;

}printf(“s=%10.6f\n",s);}t=a;a=b;b=t+b;小结引入循环控制语句的作用设置循环需要考虑的问题

循环初值循环条件的设置循环条件的修改.实现循环的方法:用while语句用do—while语句作业补充1、下面这个程序执行后i和s的值为多少?(单选)#include<stdio.h>voidmain(){inti,s;i=0;s=0;while(i<10);{s+=(i++);printf("%d\n",s);}printf("i=%d\n",i);}A.i值为9,s值为45B.i值为10,s值为45C.i值为10,s值为36D.程序陷入了死循环2.请分析下面程序实现功能#include<stdio.h>main(){ intnumber,sum=0; scanf("%d",&number);

while(number)

{

sum+=number; scanf("%d",&number);

} printf("sum=%d\n",sum);}while(number!=0)作业本讲内容:第5章循环控制(二)for语句的格式及控制原理用for语句设计循环结构程序循环的嵌套break语句和continue语句复习提问1.请分析下面程序实现功能#include<stdio.h>main(){ intnumber,sum=0; scanf("%d",&number);

while(number!=0)

{

sum+=number; scanf("%d",&number);

} printf("sum=%d\n",sum);}功能:计算键盘输入数据和,直到输入0为止for语句一、for语句的一般格式:for(表达式1;表达式2;表达式3)语句二、for循环的控制原理1、执行过程:表达式2表达式1语句表达式3假真注意:表达式1只执行一次先判断后执行表达式3相当于循环语句的延伸。它们之间的区别可由程序设计者掌握

2、几点说明:

(1)for语句最简单的应用形式:

for(循环变量赋初值;循环条件;循环变量值调整)

语句for语句例1:用for语句求:main(){inti,sum=0;

for(i=1;i<=100;i++)sum+=i;printf("%d",sum);}main(){inti=1,sum=0;while(i<=100){sum+=i;i++;}printf("%d",sum);}用while语句:for语句用for循环语句:(2)三个表达式均可缺省,但起分割作用的两个分号不可省略。例如:for(;;)

表达式1省略:

应在for之前对循环变量赋初值。表达式2省略:

则不判断条件,循环无终止进行下去。表达式3省略:

则应另设法保证循环的结束。

for语句main(){inti,sum=0;

for(i=1;i<=100;i++)sum+=i;printf("%d",sum);}main(){inti=1,sum=0;while(i<=100){sum+=i;i++;}printf("%d",sum);}用while语句:for语句用for语句:main(){inti,sum=0;

i=1;for(;i<=100;i++)sum+=i;printf("%d",sum);}main(){inti=1,sum=0;while(i<=100){sum+=i;i++;}printf("%d",sum);}用while语句:for语句用for语句:main(){inti,sum=0;

i=1;for(;;i++){if(i>100)break;sum+=i;}printf("%d",sum);}main(){inti=1,sum=0;while(i<=100){sum+=i;i++;}printf("%d",sum);}用while语句:for语句用for语句:main(){inti=1,sum=0;while(i<=100){sum+=i;i++;}printf("%d",sum);}用while语句:for语句用for语句:main(){inti,sum=0;

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

i++;}printf("%d",sum);}(3)表达式1和表达式3可为逗号表达式

for语句例2:main(){inti,j,sum=0;for(i=1,j=10;i<=j;i++,j--)sum+=i+j;printf(“%d”,sum);}(4)for语句的循环体还可为另一个循环语句例1:输出Fibonacci数列的前40项。11235813……for语句三、for语句的应用示例f1=1,f2=1fori=1to20输出f1和f2f1=f1+f2f2=f1+f2算法流程图:问题分析:f1=1(n=1)f2=1(n=2)fn=fn-1+fn-2(n>=3)main(){longintf1,f2

;inti;f1=1;f2=1;for(i=1;i<=20;i++){printf(“%12ld%12ld”,f1,f2

);f1=f1+f2;f2=f1+f2;if(i%2==0)printf(“\n”);}}goto语句说明:标号用标识符表示,即由字母、数字和下划线组成,且首字符必须为字母或下划线。不能用整数来作标号用途:1.与if语句一起构成循环结构。2.从循环体中跳到循环体外(一般指最深层)。缺点:滥用goto语句,可使程序无规律、可读性差。goto

语句标号;………….标号:语句;合法标识符一般形式:例用if和goto语句构成循环,求1+2+3+……+100sum=0+1sum=1+2=3sum=3+3=6sum=6+4……sum=4950+100=5050问题分析:1、用变量sum

存放累加和,初始时sum清零2、用变量i存放加数,初始时i=13、判断i是否大于100,若是转6;否则转44、累加sum=sum+i5、i值加1,i=i+1,转36、输出sum值流程图:开始0->sum,1->ii<=100输出sum结束i=i+1sum=sum+i是否goto语句程序为:#include<stdio.h>main(){inti,sum=0;

i=1;loop:

if(i<=100)

{sum+=i; i++;

gotoloop;

}printf("%d",sum);}循环初值循环终值循环变量增值循环条件循环体goto语句一、定义

在循环体内又包含一个循环结构,称为循环嵌套。for(;;){···

for(;;){···}}循环的嵌套如下所示为for循环体嵌套for循环的形式:for(i=1;i<=2;i++){for(j=1;j<=2;j++)printf(“%5d”,i+j);}循环的嵌套例1:分析下列程序段的结果output:2334分析:iji+j12231324二、程序举例循环的嵌套例2:打印输出下列图案□□□□*□□□***□□*****□*******行号空格数*号数141233325417i5-i2*i-1

main(){inti,j,k;

for(i=1;i<=4;i++){for(j=1;j<=5-i;j++)printf(“□”);for(k=1;k<=2*i-1;k++)printf(“*”);

printf(“\n”);}}程序如下:主函数控制行循环循环变量定义每行中的空格每行中的*号换行练习打印输出下列图案□□□□□*□□□□**□□□***□□****□*****思考行号空格数j*号数k151242333424515i6-iimain(){}主函数inti,j,k;控制行循环

for(i=1;i<=5;i++){}循环变量定义for(j=1;j<=6-i;j++)printf(“□”);每行中的空格printf(“\n”);每行中的*号for(k=1;k<=i;k++)printf(“*”);换行练习常见的几种循环嵌套形式:for(;;){···

while(){···}}for循环体嵌套while循环for(;;){···

for(;;){···}}for循环体嵌套for循环循环的嵌套do{

do{···}while();}while();do_while循环体嵌套do_while循环while(){

do{···}while();

}while循环体嵌套do_while循环for(;;)

{

do{···}while()}for循环体嵌套do-while循环

do{

for(;;){···}}while();

do_while循环体嵌套for循环三种循环可互相嵌套,层数不限外层循环可包含两个以上内循环,但不能相互交叉嵌套循环的跳转CBACBAAB嵌套循环的执行流程CBA逐层跳出(break)CBA一次跳出(return,goto)循环的嵌套几种循环的比较三种循环语句的选用:1.若循环次数在执行循环体之前已确定,一般用for若循环次数根据循环体执行情况确定,一般用while或do~while2.当循环体至少执行一次,用do~while若循环体有可能一次也不执行,用while

break语句

功能:跳出循环体或开关体(switch语句)

说明:break只能跳出最近一层的结构break语句和continue语句例:小写字母转换成大写字母,直至输入非字母字符#include<stdio.h>main(){charc;}

温馨提示

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

评论

0/150

提交评论