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

下载本文档

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

文档简介

goto语句

while语句

do-while语句

for语句

break语句

continue语句第五章循环结构程序设计5.1概述循环:反复执行称为“循环体”的程序段。C语言中用如下语句实现循环:用goto语句和if语句构成循环。用while语句。用do-while语句。用for语句。例

:求1+2+3+4+5+……+100的值。(用四种循环语句来编程实现)用if语句和goto语句构成循环。用while语句。用do-while语句。用for语句。步骤1:设sum=0。步骤2:设i=1(i为被加数)。步骤3:使sum+i,和仍放在sum中,表示为sum=sum+i。步骤4:使i的值加1,表示为i=i+1(或i++)。步骤5:判断如果i不大于100(i<=100),返回重新执行步骤3、4、5;否则算法结束。最后求得的sum的值就是1+2+3+4+5+……+100的值。sum=sum+ii=i+1i<=100?假真i=1,sum=0输出sum1、用if语句和goto语句构成循环。#include<stdio.h>voidmain(){inti=1,sum=0;loop:if(i<=100) {sum=sum+i; i++; gotoloop; }

printf("%d",sum);}2、用while语句构成循环。#include<stdio.h>voidmain(){inti=1,sum=0;

while(i<=100) {sum=sum+i; i++; }printf("%d",sum);}3、用do-while语句构成循环。#include<stdio.h>voidmain(){inti=1,sum=0;do{sum=sum+i;i++;}while(i<=100);printf("%d",sum);}4、用for语句构成循环。#include<stdio.h>voidmain(){inti,sum=0;for(i=1;i<=100;i++)sum=sum+i;printf("%d\n",sum);}for语句总结:for语句常用于循环次数已知的循环控制;也可以用于循环次数不确定而只给出循环结束条件的情况。for(i=1;i<=100;i++)sum=sum+i;这里,循环条件由变量i设定,变量i称为“循环变量”。这是for语句的典型用法:已知循环次数。(本例100次)。“表达式1”,循环初始条件(i=1)。“表达式2”,循环条件(i<=100)。“表达式3”,修改循环条件(i++)。几点说明:1、for语句中的“表达式1”可以省略,此时应在for语句之前给循环变量赋初值。例如:for(;a<10;a--)2、for语句中的“表达式2”如果省略,就认为表达式2始终为真。例如:for(t=1;;t++)sum=sum+1;他相当于:t=1;while(t) {sum=sum+1;t++;}3、for语句中的“表达式3”也可以省略,但此时程序员应设法保证循环能正常结束。如:for(t=1;t<=100;) {sum=sum+t;t++;}4、for语句中的表达式1、3省略,只有表达式2,即只给出循环的条件。如:for(;a<100;)5、for语句中的三个表达式都省略,如:for(;;)相当于:while(1)无终止的执行循环体。6、表达式1可以是设置循环变量初值的赋值表达式,也可以是其他与循环无关的表达式。如:for(sum=0,I=1;I<=100;I++,j--)sum=sum+I;7、表达式一般是关系表达式(如I<=100)或逻辑表达式(如s<b&&x<y),也可以是数值表达式或字符表达式。例、小游戏——猜数字。开始

x=a?结束输入一个数x产生一个随机数aYN

x>a?

输出“大了”YN

输出“小了”#include"stdio.h"#include"stdlib.h"#include"time.h"voidmain(){ intx,a; srand(time(0)); a=(int)(rand()%100); while(1) { scanf("%d",&x); if(x>a) printf("big!\n"); elseif(x<a) printf("small!\n"); else {printf("right!\n");break;} }}程序如下:爱因斯坦的数学题 有一条长阶梯,若每步跨2阶,则最后剩一阶,若每步跨3阶,则最后剩2阶,若每步跨5阶,最后剩4阶,若每步跨6阶最后剩5阶。只有每次跨7阶,最后才正好一阶不剩。请问这条阶梯共有多少阶?请大家思考一个问题???分析:设总阶梯数为N,那么每步跨2阶,最后剩一阶:

N除以2的余数等于1;每步跨3阶,最后剩2阶:

N除以3的余数等于2;每步跨5阶,最后剩4阶:

N除以5的余数等于4;每步跨6阶,最后剩5阶。

N除以6的余数等于5;每次跨7阶,最后才正好一阶不剩:

N除以7的余数等于0;必须同时满足这些条件N+1设:总阶梯数N=1输出结果N不满足条件判断是否满足条件?满足条件开始结束条件:N除以2的余数等于1;N除以3的余数等于2;N除以5的余数等于4;N除以6的余数等于5;N除以7的余数等于0;程序如下:#include<stdio.h>main(){intn=1;while(!((n%2==1)&&(n%3==2)&&(n%5==4)&&(n%6==5)&&(n%7==0)))n=n+1;printf("number=%d\n",n);}*运行结果?课堂编程1、把1~100之间的偶数输出。课堂编程序:2、找出所有的“水仙花数”。所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。

153=1+5+3333例题:#include<stdio.h>voidmain(){charc;for(;(c=getchar())!=‘\n’;)printf(“%c”,c);}运行:computer↙(输入)computer(输出)课堂编程序:3、输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。#include<stdio.h>voidmain(){charc;intletter=0,digit=0,space=0,other=0;while((c=getchar())!='\n') {if(c>='a'&&c<='z'||c>='A'&&c<='Z') letter++; elseif(c>='0'&&c<='9') digit++; elseif(c=='') space++; else other++;} printf("%d,%d,%d,%d\n",letter,digit,space,other);}循环的嵌套循环嵌套:一个循环(称为“外循环”)的循环体内包含另一个循环(称为“内循环”)。内循环中还可以包含循环,形成多层循环。(循环嵌套的层数理论上无限制)。三种循环(while循环、do-while循环、for循环)可以互相嵌套。例:(1)(2)while()do

{….{….

}

}while();嵌套while(){…}dowhile(){…}(3)(4)for(;;)while(){┆{┆

}┆}(5)(6)for(;;)do{…{┆

┆}}while();嵌套嵌套嵌套

嵌套for(;;){…}do{…}while()for(;;){…}while(){…}[例]

一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6的因子为1、2、3,而6=1+2+3,因此6是“完数”。编程序找出1000以内的所有“完数”。#include<stdio.h>voidmain(){intnum,j,sum;for(num=2;num<=1000;num++) { sum=0; for(j=1;j<num;j++) if(num%j==0) sum=sum+j; if(num==sum) printf("%d\n",num); }}break语句和continue语句一、break语句。作用:跳出所在的多分支switch语句,跳出所在的whiledo-whilefor循环语句(提前结束循环)。#definepi3.14#include<stdio.h>voidmain(){intr;floatarea;for(r=1;r<=10;r++){area=pi*r*r;if(area>100)break; printf("%d,%6.2f\n",r,area);}}

当r=6时,area>100,执行break语句,提前结束循环,不再计算r=7~10的area。运行结果:13.14212.57328.27450.27578.546113.107153.948201.069254.4710314.16当n能被3整除时,执行continue语句,结束执行本次循环的循环体,即跳过printf语句。二、continue语句。作用:提前结束本次循环体的执行,接着进行下一次循环条件的判别。[例]

把100~200之间不能被3整除的数输出。#include<stdio.h>voidmain(){intn;for(n=100;n<=200;n++){if(n%3==0)continue;printf("%d",n);}}三、break语句和continue语句的区别while(表达式1)while(表达式1){┇{┇

if(表达式2)

break;

if(表达式2)

continue;

┇┇}}break语句跳出循环

continue语句结束本次循环体的执行,进入下一次循环程序举例[例]

用以下公式 计算л的值,直到最后一项的绝对值小于1E-6为止。算法分析:1、每项的分母,等于前一项分母加2,用n=n+2实现,n的初值为1。2、每项的符号交替变化,用s=-s实现,s的初值为+1(第一项为正)。3、根据1和2,每一项的值t=s/n,第一项的值为1。#include"math.h"#include<stdio.h>voidmain(){ints;floatn,t,pi;t=1;pi=0;n=1.0;s=1;while((fabs(t))>=1E-6){pi=pi+t;n=n+2;s=-s;t=s/n;}pi=pi*4;printf("pi=%10.6f\n",pi);}运行结果:pi=3.141594f1f211f1=1f2=123f1=1+1=2f2=2+1=358f1=2+3=5f2=5+3=8[

温馨提示

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

评论

0/150

提交评论