C语言程序设计循环结构程序设计_第1页
C语言程序设计循环结构程序设计_第2页
C语言程序设计循环结构程序设计_第3页
C语言程序设计循环结构程序设计_第4页
C语言程序设计循环结构程序设计_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

2024/7/111循环的基本概念不同形式的循环控制多重循环问题2024/7/112什么是循环?为什么要使用循环??5.1循环的基本概念循环是有规律的重复操作。将复杂问题分解为简单的操作过程,程序只对简单过程描述,这些过程的多次重复就可完成对问题的求解。重复的频繁性决定了循环在程序设计中必不可少!一、循环问题问题1:问题2:求学生平均成绩分数相加后除以课程数做99次加法问题3:找出数集x中能同时被3和7整除的数

找数问题分解循环控制2024/7/1135.1循环的基本概念

while循环(5.2节)

dowhile循环(5.3节)

for循环(5.4节)

if--goto循环(一般不用)难点:循环嵌套

C提供四种循环控制语句:2024/7/1145.1循环的基本概念(续)二、循环结构循环结构有两种形式:当型循环结构直到型循环结构循环体N条件Y当型循环直到型循环条件NY循环体先判断后循环先循环后判断入口出口区别?循环体中是一个过程,该过程的复杂程度取决于问题及对问题的分解2024/7/1155.1循环的基本概念(续)循环体N条件Y当型循环条件循环次数Y循环体?Y执行1Y执行3Y执行2N结束

循环体Y?循环体Y

??N3次在循环入口处判断当条件为真时执行循环2024/7/1165.1循环的基本概念(完)直到型循环在循环出口处判断,当条件为真时继续执行循环,直到条件为假时为止。条件NY循环体条件循环次数执行1Y

执行3Y

执行2N

结束

3次Y条件循环体Y条件循环体Y条件循环体Y

执行4条件循环体N4次循环至少执行一次2024/7/1175.2while循环控制语句一般格式while(表达式)

{语句组}

一般为关系表达式或逻辑表达式,也可以是C语言其他类型的合法表达式

用来控制循环体是否被执行称为内嵌语句,可以是基本语句、控制语句,也可以是复合语句是循环重复执行的部分当条件为真时执行循环体2024/7/118语句一般格式while(表达式)

{语句组}

功能:计算“表达式”的值,为非0(逻辑真)时,重复执行内嵌语句,每执行一次,就判断一次表达式的值,直到表达式的值为0时结束循环,转去执行while后面的语句。2024/7/119当表达式为真语句N-S结构图NY流程图表达式非0?语句循环控制条件循环体语句一般格式while(表达式)

{语句组}

2024/7/1110例如:【例5.1】编写程序,求100个自然数的和即:

s=1+2+3+…+100

思路:寻找加数与求和的规律

加数i——从1变到100,每循环一次,使i增1,直到i的值超过100。i的初值设为1。求和——设变量

sum存放和,循环求sum=sum+i,直至i超过100。

2024/7/1111算法和程序:#include"stdio.h"voidmain(){inti,sum;i=1;sum=0;while(i<=100)

{sum=sum+i;i++;

}printf("sum=%d\n",sum);}程序输出结果:sum=5050i:循环控制变量sum:累加器

i=1,sum=0当i<=100sum=sum+ii++输出sum2024/7/1112注意:如果while的(表达式)值为0,则循环体一次也不执行

(例如当i的初值=101)。在循环体中必须有使循环趋向结束的操作,否则循环将无限进行(死循环)。在循环体中,语句的先后位置必须符合逻辑,否则会影响运算结果。思考程序段的输出?

……i=1;sum=0;while(i<=100){i++;sum=sum+i;}运行后,输出:sum=5150原因是什么?

2024/7/1113注意(续):总结:为了保证循环正常运行,应该特别注意:循环控制条件的描述

控制条件的初始状态(初始值)

循环体内部对控制条件的影响2024/7/11145.3do-while语句语句一般格式do

{语句组}while(表达式);

功能:先执行内嵌语句(循环体),之后计算表达式的值,不为0(逻辑真)时,再执行循环体并判断条件,直到表达式的值为0结束循环,转去执行while下面的语句。直到条件为假时结束循环2024/7/1115

do-while循环的算法循环体当表达式为真N-S结构图NY循环体表达式非0?流程图#include"stdio.h"voidmain(){inti=1,sum=0;do{sum=sum+i;i++;}while(i<=100);printf("%d\n",sum);}用do-while语句求100个自然数的和2024/7/1116

voidmain(){intn=1,s=0,x;scanf("%d",&x);printf("s=%d\n",s);}求:流程图n<=xs=s+nYn加1开始初始化n,s,x输入xdo{s=s+n;n++;}

while(n<=x);dowhileN输出s结束2024/7/1117/*ex1-1.C*/voidmain(){ints=0,x;scanf("%d",&x);

while(x<=10)

{s=s+x;x++;}printf("s=%d\n",s);}/*ex1.C*/voidmain(){ints=0,x;scanf("%d",&x);

do

{s=s+x;x++;}

while(x<=10);printf("s=%d\n",s);}例循环至少执行一次循环没有被执行三、while与dowhile的比较输出:s=12输出:s=0如输入为1和12,两程序各输出情况?输入12时:2024/7/11185.4for语句语句一般格式for(表达式1;表达式2;表达式3)语句循环初始条件循环控制条件循环体

1.求解表达式1;

2.求解表达式2,值为真(非0)执行循环体,然后执行第3步;值为假(0)则结束循环,转到第5步,

3.求解表达式3;4.转回第2步。

5.循环结束,执行for语句下面的语句。

2024/7/1119for(e1;e2;e3)

语句的算法N-S结构图for(e1;e2;e3)语句NY流程图计算e1语句e3e2为真?例如:voidmain(){inti,sum;sum=0;

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

printf("sum=%d\n",sum);}2024/7/1120for循环控制语句

for(e1;e2;e3)

e1、e2、e3均可缺少for(;n<100;n++)缺少e1,n应在循环之前赋初值

for(n=0;;n++)缺少e2,造成死循环for(n=0;n<100;)缺少e3,n增量应在循环体内进行for(;;)缺少e1,e2,e3,死循环!for(;n<100;)缺少e1,e3分号始终不能缺少!讨论可结合跳转语句使用,一般情况下不使用2024/7/1121for循环控制语句for(初值;判断;增量)语句;for(初值;判断;增量)

{复合语句;}for(初值;判断;增量);2.e1和e3可是与初值、增量无关的逗号表达式for(s=0,n=1;n<=100;s=s+n,printf(“%d”,s))n++;for(s=0;n<100;s=s+n,n++){printf(“%d”,s);}求累加和n的初值在for之前完成增量在for之外完成for语句的形式:2024/7/1122for循环控制语句voidmain(){intn=1,s=0,x;scanf("%d",&x);for(;n<=x;n++)s=s+n;printf("s=%d\n",s);}while(n<=x){s=s+n;n++;}voidmain(){intn,s,x;scanf("%d",&x);

for(n=1,s=0;n<=x;n++)

s=s+n;printf("s=%d\n",s);}例缺少e1赋初值语句

2024/7/1123for循环控制语句voidmain(){intn,s;for(n=1;n<=10;n+=2)printf("n=%d\n",n);}voidmain(){intn,s;for(n=1;n<=10;n+=2);printf("n=%d\n",n);}以下程序的输出结果输出结果:n=11输出结果:n=1n=3n=5n=7n=9?

无循环体

循环体;2024/7/11245.5循环结构中的跳转语句有如下三种语句实现跳转:continue语句break语句goto语句功能:在循环语句的循环体中使用,可以进行循环的流程控制2024/7/1125后续语句…continue;

…YN表达式?后续语句…continue;…表达式?YN5.5.1continue语句及应用功能:中断循环体的本次执行(即跳过循环体中尚未执行的语句),立即开始执行下一次循环。while语句do-while语句后续语句计算表达式3计算表达式1…continue;…表达式2?YNfor语句2024/7/1126例如:⑴intx,n=0,s=0;while(n<10){scanf("%d",&x);

if(x<0)continue;

s+=x;n++;};

⑵intx,n=0,s=0;do{scanf("%d",&x);

if(x<0)continue;

s+=x;n++;}while(n<10);

⑶for(n=0,s=0;n<10;n++){scanf("%d",&x);

if(x<0)continue;

s+=x;}2024/7/1127应用举例【例5.4】把100~200之间能被7整除的数,以十个数为一行的形式输出,最后输出一共有多少个这样的数。

for(n=100;n<=200;n++)n能被7整除

FT

终止本输出n

次循环

输出了10个数

TF

换行2024/7/1128算法和程序#include"stdio.h"voidmain(){intn,j=0;for(n=100;n<=200;n++){if(n%7!=0)continue; printf("%6d",n);

j++;

if(j%10==0)printf("\n");

}printf("\nj=%d\n",j);}2024/7/1129后续语句…break;…YN表达式?后续语句…break;…表达式?YN5.5.2循环中break的应用功能:利用break语句能够强迫终止本层循环,转到后续语句执行。while语句do-while语句后续语句计算表达式3计算表达式1…break;…表达式2?YNfor语句2024/7/1130例如:⑴intx,n=0,s=0;while(n<10){scanf("%d",&x);

if(x<0)break;s+=x;n++;};⑵intx,n=0,s=0;do{scanf("%d",&x);

if(x<0)break;s+=x;n++;}while(n<10);⑶for(n=0,s=0;n<10;n++){scanf("%d",&x);

if(x<0)break;s+=x;}2024/7/11315.6循环的嵌套如果循环语句的循环体内又包含了另一条循环语句,则称为循环的嵌套例如:

#include<stdio.h>voidmain(){inti,j;

for(i=1;i<10;i++)for(j=1;j<=i;j++)printf((j==i)?"%4d\n":"%4d",i*j);

}外循环语句内循环语句2024/7/1132注意:while、do-while、for循环语句可以并列,也可以相互嵌套,但要层次清楚,不能出现交叉。多重循环程序执行时,外层循环每执行一次,内层循环都需要循环执行多次。例如:for(a=1;a<=10;a++){for(b=0;b<=5;b++)

……}外循环执行了10次,每次外循环中内循环执行6次循环正常结束时,内循环执行了10×6=60次2024/7/1133

5.7循环结构程序设计【例5.5】按每行输出5个数的形式输出Fibonacci数列的前20项

。Fibonacci数列的前几项是:1、1、2、3、5、8、13、21、34、…。此数列的变化规律是:1(n=1)1(n=2)fn-1+fn-2(n>2)fn=思路:设变量f1、f2和f3,并为f1和f2赋初值1,令f3=f1+f2得到第3项;将f1←f2,f2←f3,再求f3=f1+f2得到第4项;依此类推求第5项、第6项…这是一种递推算法应采用循环实现2024/7/1134算法和程序#include"stdio.h"#defineN20voidmain(){inti,f1,f2,f3;f1=f2=1;printf("\n%8d%8d",f1,f2);for(i=3;i<=N;i++)

{f3=f1+f2;f1=f2;f2=f3;printf("%8d",f3);

if(i%5==0)printf("\n");

}

}f1=1,f2=1并输出for(i=3;i<=20;i++)f3=f2+f1f1=f2,f2=f3

输出f3

输出5个数

TF

换行2024/7/1135举例【例5.6】判断输入的某个数m是否为素数。若是素数,输出“YES”,若不是,输出“NO”。

思路:素数是指只能被1和它本身整除的数,如5、7、11、17、…等。

分别用2、3、…,m-1尝试能否整除整数m。如果m能被某个数整除,则m就不是素数。这是一种穷举算法设除数为j,从2循环到m-12024/7/1136算法和程序:#include"math.h"voidmain(){intj,m,k;printf("Enteranintegernumber:");scanf("%d",&m);for(j=2;j<=m-1;j++)

if(m%j==0)break;printf("%d",m);if(j>=m)printf("YES\n");elseprintf("NO\n");}

输入一个数mfor(j=2;j<=m-1;j++)m%j==0TF

退出循环

j>=mTF输出"YES“输出"NO"2024/7/1137举例【例5.7】编程序求2~10000以内的完全数。

完全数:一个数的因子(除了这个数本身)之和等于该数本身。思路:设定i从2变到10000,对每个i找到其因子和s;判定i==s?若相等,则i为完全数,否则不是。

例如:6的因子是1、2、3,因子和1+2+3=6因此6是完全数使用穷举算法用双层循环实现2024/7/1138算法和程序:#include"stdio.h"voidmain(){inti,j,s;

for(i=2;i<=10000;i++)

{s=0;

for(j=1;j<i;j++)if(i%j==0)s+=j;if(i==s)printf("%6d\n

温馨提示

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

评论

0/150

提交评论