c语言循环结构_第1页
c语言循环结构_第2页
c语言循环结构_第3页
c语言循环结构_第4页
c语言循环结构_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

循环结构1循环语句程序设计一.while语句二.do-while语句三.for语句四.循环的嵌套六.典型举例说明2五.break和contiune语句一.while语句

1.while的语句格式:

while(条件)

语句2.当条件为真〔非0〕时重复执行内嵌语句〔循环体〕;当条件为假〔0〕时,跳过内嵌语句,执行整个while的后续语句。循环准备条件P循环语句假真3

程序用while语句实现求1+2+…+n。

main(){inti,sum,n;

scanf(“%d”,&n);/*键盘输入n*/i=1;sum=0;/*初始化i=1,sum=0*/while(i<=n){sum=sum+i;

i++;}printf(“%d”,sum);}4一.while语句二.do-while语句

1.do–while的语句格式:

do

语句

while(条件);

2.功能:while循环准备条件P循环语句假真5例比较下面两个程序的区别,分别写出它们的执行结果。main()/*程序1*/{inti,sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf("%d",sum);}

结果相同6main()/*程序2*/

{inti,sum=0;i=1;

do

{sum=sum+i;i++;}

while(i<=100);printf("%d",sum);}二.do-while语句

同样是以下程序,但如果while后面的表达式结果一开始就是假时,两种循环结果会不一样。main()/*程序1*/{inti,sum=0;i=101;while(i<=100){sum=sum+i;i++;}printf("%d",sum);}输出结果为:sum=0输出结果为:sum=101结果不相同〔表达式的值第一次为真时,两值相同,否那么不同〕7main()/*程序2*/

{inti,sum=0;i=101;do{sum=sum+i;i++;}while(i<=100);printf("%d",sum);}二.do-while语句

三.for语句

1.for的语句格式:for〔表达式1;表达式2;表达式3〕语句2.for语句的执行过程。〔1〕先求解表达式1〔表达式1通常是为循环变量赋初值〕。〔2〕再求解表达式2〔循环的控制条件〕。假设为非0,那么执行第〔3〕步;假设为0,那么结束循环,转到第〔5〕步。〔3〕执行内嵌语句〔循环体〕后,求解表达式3〔通常对表达式2中的循环控制变量进行修正,以便在假设干次循环之后能够使表达式2的值为0,结束循环〕。〔4〕转回上面第〔2〕步,继续执行。(5)执行for语句的下面一个语句〔后续语句〕。8表达式2表达式1

语句表达式3后续语句假真for语句的执行过程流程图表示9三.for语句

例,下面程序段计算1+2+…+100并输出,它的执行过程如下图。for(sum=0,i=1;i<=100;i++)

sum=sum+i;

printf(“%d”,sum);

表达式1表达式2表达式3循环体语句后续语句10三.for语句

i<=100sum=0,i=1

sum=sum+ii++printf(“%d”,sum)假真程序的结构和流程图

另外,也可以用while语句等价表示。11三.for语句

3.说明:

(1)for语句的3个表达式都可为逗号表达式。尤其是表达式1常用逗号表达式给多个变量赋初值。例如:for(sum=0,i=1;i<=100;i++)sum=sum+i;上面for语句中表达式1:sum=0,i=1为逗号表达式,负责为sum和i赋初值。

注意:上述程序也可以写成:

sum=0;

for(i=1;i<=100;i++)sum=sum+i;12三.for语句

(2)表达式2一般是关系表达式〔如i<=100〕或逻辑表达式〔如:a>0&&b>0〕,但也可以是数值表达式或字符表达式,只要其值为非0,就执行循环体。例如:for(num=1,i=1;num%2;i++)scanf(“%d”,&num);其中:表达式2为算术表达式num%2。当num为奇数时循环执行scanf(%d”,&num)。13三.for语句

(3)for语句一般形式中的“语句”局部就是循环体,它可以是一个单语句,也可以是一个复合语句。如果不加{},系统只将for后面的一个单语句作为循环体。例如:for(i=1;i<=10;i++){a=a+1;b=b+1;}

14三.for语句

(4)for语句一般形式中的表达式1,2,3都可以省略,但其后的分号不能省略。但注意假设表达式2省略,代表条件永远为真〔死循环〕。例如:for(;;)语句例如:sum=0;i=1;for(;i<=100;i++)sum=sum+i;例如:for(sum=0,i=1;;i++)sum=sum+i;例如:for(sum=0,i=1;i<=100;){sum=sum+i;i++;}15三.for语句

16同一个问题,往往既可以用while语句解决,也可以用do-while或者for语句来解决,但在实际应用中,应根据具体情况来选用不同的循环语句。三种循环语句的比较语句适用范围说明if~gotowhiledo-whilefor无条件循环只知道结束条件而无法确定执行次数的情况下。至少执行一次时执行次数或者初值,终值,步长时。

该循环不能用break和continue语句控制①循环变量初始化在循环体之前②循环体中应包含使循环结束的语句③可以用break和continue语句控制使用比较灵活

一个循环体内又包含另一个完整的循环结构称为循环嵌套。

多重循环的嵌套次数可以是任意的,可以根据嵌套的层数分别叫做二重循环、三重循环等。

for语句、while语句和do-while语句在循环嵌套时互相嵌套的情况。

四.循环的嵌套17

例如,下面这条语句是二重循环:

for(i=1;i<=10;i++)for(j=1;j<=10;j++)printf(“%d”,i*j);

其中,第一个for是外循环、第二个for是内循环。其实,内循环包含在外循环的循环体中,是外循环的循环体中的一个语句或复合语句。18四.循环的嵌套

i=0

当i<=10j=0

当j<=10printf(“%d”,i*j)j++i++执行过程如下图。其中i为外循环的控制变量,j为内循环的控制变量。19四.循环的嵌套编程打印“九九乘法表”

分析:九九乘法表

1×1=11×2=21×3=3…

1×9=92×1=22×2=42×3=6…

2×9=183×1=33×2=63×3=9…

3×9=27……9×1=99×2=189×3=27…

9×9=8120四.循环的嵌套五.break与continue语句

break语句

1.break的语句格式:

break;2.功能:从switch结构或包含它的最内层循环结构中跳出。该语句只能用于switch语句和三种循环语句〔for、while、do-while〕的循环体中。21

程序计算r=1到r=10时的圆面积,直到面积大于100为止。

#definepi3.14main(){intr;floatarea;

for(r=1;r<=10;r++){area=pi*r*r;/*计算面积area*/if(area>100)break;

printf(“%f”,area);

}printf(“ok”);

}22五.break与continue语句

注意:在多重循环中,break只能退出其所在的循环,即:退出其所在的内层循环,对外层循环不起作用。假设要从内层循环直接退出外层循环,可以使用goto语句。例7百钱买百鸡问题。公鸡5元一只,母鸡3元一只,小鸡1元三只。100元要买100只鸡,且需包括公鸡、母鸡和小鸡。求公鸡、母鸡和小鸡各买多少只?〔找到一组解即可〕23五.break与continue语句

讨论:假设要买的公鸡、母鸡和小鸡个数分别标识为x,y,z,将它们定义为整型变量。由题目的条件可以列出下面的方程组:

x+y+z=1005x+3y+z/3.0=100这个方程组可能存在多个解。所以需要用穷举法解方程。很明显x的最大值不会超过20,y的最大值不会超过33(还可以根据数论知识将x和y的取值范围缩小),z可以根据x、y计算得出。24五.break与continue语句

所以程序需要设计成二重循环。由于题目只要求找到一组解,所以在循环过程中只要找到一组满足条件的x,y,z就可以跳出循环。跳出循环的方法可以采用break语句,但是,因为是二重循环,所以要考虑使用break是否方便。

25五.break与continue语句

voidmain()/*百钱买百鸡问题*/

{intx,y,z;for(x=1;x<20;x++)for(y=1;y<33;y++){z=100–x–y;/*计算小鸡个数*/if(z!=0&&5*x+3*y+z/3.0==100)

gotoend;}end:printf("公鸡=%d,母鸡=%d,小鸡=%d\n",x,y,z);}26五.break与continue语句

main(){intx,y,z;

for(x=1;x<20;x++)for(y=1;y<33;y++){z=100–x–y;/*计算小鸡个数*/if(z!=0&&5*x+3*y+z/3.0==100)

break;

}

end:printf("公鸡=%d,母鸡=%d,小鸡=%d\n",x,y,z);

}27五.break与continue语句

continue语句

1.continue的语句格式:continue;

2.功能:结束本轮循环,即跳过循环体中continue下面的语句,执行下一次循环。

continue语句只适用于循环语句中。

注意:continue与break在功能上有很大的区别。28五.break与continue语句

程序把1~100之间的能被7整除的数输出。

main(){intn;

for(n=1;n<=100;n++){if(n%7!=0)continue;

printf(“%d”,n);

}

}29五.break与continue语句

程序把1~100之间的能被7整除的数输出。

main(){intn;

for(n=1;n<=100;n++){if(n%7!=0)break;

printf(“%d”,n);

}

}30五.break与continue语句

main(){inti;

for(i=1;i<6;i++){if(i%2)printf(“1”);

elsecontinue;

printf(“2”);

}}输出结果:12121231五.break与continue语句

main(){inti;for(i=1;i<6;i++){if(i%2){printf(“1”);continue;}

elseprintf(“2”);}}输出结果:1212132五.break与continue语句

main(){inti;for(i=1;i<6;i++){if(i%2){printf(“1”);continue;printf(“2”);}

}}输出结果:11133五.break与continue语句

六.程序举例1.最大最小问题2.分段〔多条件〕问题3.函数公式套用4.求素数问题5.求累加或累乘问题6.译码问题7.最大公倍数和最小公约数问题34程序.读入三个数,找出并打印其中的最大数程序如下:

main(){inta,b,c,max;scanf(“%d,%d,%d”,&a,&b,&c);if((a>b)&&(a>c))max=a;elseif((b>a)&&(b>c))max=b;elseif((c>a)&&(c>b))max=c;printf(“max=%d\n”,max);}请问:有什么问题吗?假假设:a=b但c<a呢?例如:a=5b=5c=435a>ba>cYYmax=amax=cNb>cmax=bNYNmax=c36程序.读入三个数,找出并打印其中的最大数main(){inta,b,c,max;scanf(“%d,%d,%d”,&a,&b,&c);if(a>b){if(a>c)max=a;elsemax=c;}else{if(b>c)max=b;elsemax=c;}printf(“max=%d\n”,max);}37程序.读入三个数,找出并打印其中的最大数程序输入10个数,求出其中的最大值〔或最小值〕比方,依次输入201030-27379036776389最大:90最小:-27有什么算法呢?38设一个变量max依次输入

201030-27379036776389max20303790这种算法俗称:打擂台法39程序输入10个数,求出其中的最大值〔或最小值〕程序

读入三个数,找出并打印其中的最大数main()程序如下(用打擂台法实现)

{inta,b,c,max;scanf(“%d,%d,%d”,&a,&b,&c);max=a;if(b>max)max=b;if(c>max)max=c;printf(“max=%d\n”,max);}4041t=1,pi=0,n=1.0,s=1当|t|1e-6pi=pi+tn=n+2s=-st=s/npi=pi*4输出pi分子:1,-1,1,-1…分母:1,3,5,7,…#include<stdio.h>#include<math.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.14159442求Fibonacci数列:1、1、2、3、5、8……前40个数Fibonacci数列可以用一个有趣的古典数学问题来描述:有一对兔子,出生三个月后每个月都生一对兔子。小兔子长到三个月后每个月又生一对兔子。假设所有的兔子都不死,问每个月的兔子总数是多少对?月数小兔中兔老兔总数1111111111123450200002352……………43f1=1,f2=1f

温馨提示

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

评论

0/150

提交评论