IT计算机课件循环控制_第1页
IT计算机课件循环控制_第2页
IT计算机课件循环控制_第3页
IT计算机课件循环控制_第4页
IT计算机课件循环控制_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

第5章循环结构程序设计

■概述

■whiIe语句

■do-whiIe语句

■for语句

■goto语句以及用goto语句构成循环

■几种循环的比较

■循环的嵌套

■break语句和continue语句

概述

E复习提问:

,口程序的基本结构:

,川页序结构

选择结构

4循环结构

返回

顺序结构

ENDI返回

选择结构

复习提问:

分支结构的特点:

每一条执行了的语句

都只执行一遍。

不重复执行;

但有语句不执行。

返回

循环结构

特点:I循环条件

在给定翥件成立时,反复执行某程序段,

直到条件不成立为止。J

循环体

分类:

1)用while语句;

2)用do-while语句;

3)用for语句

4)用goto语句和if语句构成循环;返回

while语句

♦:♦一般形式:♦:♦执行流程:

循环变量的初始值;

while(循环条件表达式)

循环体语句;

循环体语句可以是一条,

也可以是多条,

多条的时候应用复合语句

{}将多条语句括起来。避免死循环

循环程序分析

1、计算S=1+2+3+4+…+100(自然数累加)

main()

{ints,i;

s=0;1求1—100之间的奇数(偶数)和

i=1;2求100—2000的累加和

while(i<=100)3求20的阶乘20!

{s=s+i;

4求1+1/2+1/3+.・・+1/100

i=i+1;

5求公差为q,首项为a的等差数

)列的第n项的值,以及其前n项

u,,

printf(s=%d\n,s);和

)

2、从键盘输入10个半径值,分别计算并输出

相应的园面积。

main()

{inti;

方法:floatBs;

i=l;

一控制循环10次

while(i<=10)

{scanf(u%f\&r);

1,

s=3.14*r*r;

输入半径r

printf(“r=%f,s=%f\n"百s);

计算园面积S

i=i+l;

输出r,S、}tc

课堂编程练习:

有30名学生,每名学生有三门课程的成绩。

从键盘输入成绩,计算并输出每个学生的总

分和平均成绩。

变量:控制循环30次

____,方法:

a,b,c一三门成绩

______+

total—总分输入3门成绩

aver一平均分计算总分和平均分

i—循环控制变量输出总分和平均分

例:分析下列程序段的循环次数及输出结果

(1)i=l;(3)i=l;

while(i<=100)while(i<=10)

putcharDprintfC%3d9\i);

i++;i++;

(2)i=l;(4)i=l;

while(i<=100)while(i<=100)

{putchar,*');printf(“%3d”,i++);

i++;

}

第六章6.1while语句

【例】输入一系列整数,判断其正负号,当输

入0时,结束循环。

#include"stdio.h"

voidmain()

intx;输入数据,为第

scanf(u%dr&x);一次判断做准备

while(x!=0)»判断是否结束

!ln

{if(x>0)printf(+);----k判断并输出正负号

elseprintf(n-n);

scanf(H%d——,输入数据,为下

一次判断做准备

【例】统计从键盘输入的一行字符的个数(以

回车键作为输入结束标记)。

#includenstdio.hfl

voidmain()

{charch;intnum=0;

ch=getchar();/*输入字符,为第一次判断做准备*/

while(ch!=l\nl)/*判断输入的字符是否回车键*/

{num++;/*统计输入的字符个数*/

ch=getchar();/*输入字符,为下一次判断做准备*/

printf(nnum=%d\n!\num);

用whiIe语句控制循环的一般方法

条件初始化i=1;

while(条件)While(i<=5)

{|输入半径r

语句1;]

语句2;!循环体计算园面积s

输出

「语句n;r,s

修改条件>i=i+l;

}

!!!!!!!!!注意

◎表达式在判断前,必须要有明确的值。

③循环体中一般有改变条件表达式的语句。

③while(表达式)后面没有分号。

返回

do・while语句

♦:♦一般形式:♦:♦执行流程:

循环变量的初始值;

do

循环体语句;

while(循环条件表达式);

返回

例6.3用do-while循环语句实现求导

//include<stdio.h>

main()

{inti,sum=0;

i=1;

do

{sum=sum+i;

i=i+1;

}while(i<=100);

printf("%d",sum);

}

do・while同while语句的重要区别

循环控制在循环体之前,总是先执行一次循环体,

只有当while后的表达式为然后再求表达式的值,因

非0时,才可能执行循环体,此,无论表达式的值是。还

循环体有可能一次都不执是非0,循环体至少执行一

行。次。

例6.4:while和do-while循环比较

main()main()

{intsum=0,i;{intsum=0,i;

scanf(u%d,,,&i);scanf(u%d,,,&i);

while(i<=10)do

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

i++;i++;

)}while(i<=10);

printf(usum=%d\n,,,sum);printf(usum=%d\n,,,sum);

]_______________________}

运行情况如下:运行情况如下:

1/1/

sum=55sum=55

再运行一次:再运行一次:

11/11/

Sum=0Sum=11返回

for语句

B一般形式

E执行流程

Ffor语句的一般形式

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

{

循环体语句;

例用血循环求詈

^include<stdio.h>

main()

{inti5sum=0;

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

sum+=i;

printf(”%cT,sijm);

3、说明

*三个表达式都可以是逗号表达式。

命三个表达式都是任选项,都可以省略,但要注

意省略表达式后,三个表达式之间的分号间隔

符不能省略。

例:用0--9这十个数字可以组成多少无重复数

字的三位数?

•编程方法:“枚举法”

按问题本身的性质,——列举出该问题所

有可能的解,并在逐一列举的过程中,检

验每个可能解是否是问题的真正解,若是,

我们采纳这个解,否则抛弃它。对于所列

举的值,既不能遗漏也不能重复。

#include"stdio.h"

voidmain()/*a,b,c代表百位、十位、个位*/

{intx9a9b9c,num=0;

/*num存放满足条件的数的个数,注意num要赋初值*/

for(x=100;x<=999;x++)

{a=x/100;b=x/10%10;c=x%10;

if(a!=b&&a!=c&&b!=c)

{num++;

printf(H%5df\x);

printf(u\nnumber=%d!\num);

例:裴波那契数列的第1、2项分别为1、1,

以后各项的值均是其前两项之和。求前30项

菲波那契数。

编程方法:“递推法”

所谓递推法就是从初值出发,归纳出新值与旧

值间的关系,直到求出所需值为止。新值的求

出依赖于旧值,不知道旧值,无法推导出新值c

数学上递推公式正是这一类问题。

a”一第一个数&一第二个数■第三个数

fl=l;f2=l;B=fl+f2;

.以后只要改变f2的值,即可求出下一个数.

fl=f2;f2=f3;f3=fl+f2;

>递推

a参考程序:

voidmain()

{longfl=l,f2=l,B;注意fl、f2、

f3、k的类型

intk;

printf(u%ld\t%ld\tfl,f2);

for(k=3;k<=30;k++)

{B=fl+f2;

printf(n%ld\t

fl=f2;f2=f3;_______,递推

例从a显示到j。解2:#include<stdio.h>

main()

解1:#include<stdio.h>{inti=0;

main()for(;i<10;i++)

{inti=0;putchar('a'+i);

for(i=0;i<10;i++)}

putchar('a'+i);

}运行结果:abcdefghij

解3:#include<stdio解4:#include<stdio.h>

main()main()

{inti=0;{inti=0;

for(;i<10;)for(;i<10;putchar(ta,+i),i++)

putchar■

))

goto语句以及用goto语句构成循环

一般形式:

goto语句标号;

由字母、数字和下划线组

成,不能使用整数

main()

inti,sum=O;

i=l;

loop:if(i<=100)

{sum=sum+i;

i++;

gotoloop;}

printf(n%d\nn,sum);

)

输出:

5050

循环的嵌套

口三种循环可互相嵌套,层数不限

口外层循环可包含两个以上内循环,但不能相互交叉

口嵌套循环的执行流程

do

(1)while()2){(3)while()

{……

while()dodo

{……

}}while();}while();

}}while();)

返回

二重

循环

嵌套

结构

执行

流程

for11=1to9

for12=0to9

for13=0to9

14=11*100+12*10+13

15=11*11*11+12*12*12+13*13*13解

2

结束

水他为数斜Hi1・・・・强4

#include<stdio.h>

main()

{int11,12,13,14;

for(11=1;11<=9;11++)/*百校刃

for(12=0;12<=9;12++)/*+有L*/

for(13=0;13V=9;13++)〃个位7

(

14=11*100+12*10+13;

if(14==U*U*U+12*12*12+13*13*13)

printf(nDaffodiFsnumberis%d\n!\14);

}}城套循进希式

6卜9。寸MI

6已卜00

9寸ZO009寸(N

八2I00。Z69出

~ZS寸(。9

(N00寸Z00寸

11fsi寸寸。

oeoeoeoe

iizegg寸寸

寸co9£O寸00Z9

zezgs

g96e00I寸卜

ieee

eIe寸9oce寸900

IIII

i(Ng寸006

九,九表相囹而程本--1

#include<stdio.h>

main()

{intij;输出表头输^出表^头/

for(i=1;i<=9;i++)printIi(f1%4d1j);

printf(M\nM);for1=1to9R)iI^ilto9一一1

for(i=];iv=9;i++)printW隹」“/।

printf(n\iiM);J:1to■"1

for(i=l;i<=9;i++)、,

{fora=l;j<=9;j++)//|

printf(M%4dy\f]hi-------不,1

printf(n\nn);Q————一・・-I

九,九表—2

123456789

1

24

369

481216

51O152025

61218243036

7142128354249

816243240485664

91827364554637281

九,九袤相囹和程本--2*

#include<stdio.h>

main()

{intij;输出表头输^出表^头/

for(i=1;i<=9;i++)printIi(f1%4d1j);

printf(M\nM);for1=1to9R)iI^ilto9一一1

for(i=];iv=9;i++)printW隹」“/।

printf(n\iiM);■"1

for(i=l;i<=9;i++)、,-1--------

{forg=l;j<=i;j++)/辎5:j/|

printf(M%4dy\f]hi-------不,1

printf(n\nn);Q———―"O"一■・―।

1234;56789

12,•3•平、4・56789

♦•-

5678981

10121416186472

1518212427

495663

162024283236

253035404536424854

364248542530354045

495663162024283236

64729121518212427

814681012141618

图4.26上三角乘法九九表123456789

图4.27下三角乘法九九表

扬辉三角形一-翘画

C开互)c开始,

1输入输出的行数n,刷出的行数n

11r"7

121fori=0ton.jii-O/on-

*I

133:forj=0toiHOtoi

146

151010输出G,j

1615201569,二一e

"输出回车换行前出回车换行1

AxI

开始

#include<stdio.h>

main()

{intn9ij,kjljl,kl;

printf(z/输入输出的行数:”);辉

scanf(z,%d,&n);

for(i=0;i<n;i++)三

{for(j=0;j<=i;j++)

{il=jl=kl=l;角

for(k=l;k<=i;k++)il*=k;

for(k=l;k<=j;k++)jl*=k;彬

for(k=l;k<=i-j;k++)kl*=k;

z/

printf(%7d〃,il/(jl*kl));}—

I

printf(z,\nz,);}

#include<stdio.h>杨

main()

{intn,ij,k,iljl,kl;

printf(7输入输出的行数:”);

scanf(v%d,&n);

il=l;三

for(i=0;i<n;i++)

{if(i>0)il*=i;角

jl=l;2

for(j=0;j<=i;j++)形

{ifG>0)jr=j;

kl=l;I

for(k=l;k<=i-j;k++)kl*=k;—

printfC%7d〃,}—

I

printf(v\nv);}

#include<stdio.h>扬

main()

{intn9ij,kjljl,kl;群

printf(z/输入输出的行数:”);

z,程

scanf(%d,&n);三

for(i=0;i<n;i++)

{for(j=0;j<=i;j++)角

{il=jl=l;3

for(k=j+l;k<=i;k++)il*=k;形

for(k=l;k<=i-j;k++)jl*=k;

printfC%7d〃,il/jl);}—

printf(z/\n〃);}

节钱买节喧

鸡翁一,值钱五;呜母一,值钱三;鸡雏

三,值钱〜。百钱买百鸣,问鸣翁、鸣母、鸣

雏各几何?

*

节钱买节理)---1

#include<stdio.h>02575

main()32077

{intx,y,z5m,n;

for(x=0;x<=100;x++)41878

for(y=0;y<=100;y++)71380

for(z=0;z<=100;z++)81181

{m=x+y+z;

83

n=5*x+3*y+z/3;

if(m==100&&n==100)12484

printf(z/%5d,%5d,%5d\n",x,y,z);

接解法是否正确7

*

飞钱买飞瑁—2

#include<stdio.h>

main()

02575

{血毗tx,y,z,m,n;

for(x=0;x<=100;x++)41878

for(y=0;y<=100;y++)81181

for(z=0;z<=99;z++)12484

{m=x+y+z;

n=5*x+3*y+z/3;

if(m==100&&n==100)

printfC%5.0f,%5.0f,%5.0f\n〃,与y,z);

*

节钱买节唱—3

#include<stdio.h>

main()

02575

{floatx,y,z,m,n;

fdr(x=0;x<=20;x++)41878

for(y=0;y<=33;y++)81181

for(z=0;z<=99;z++)12484

{m=x+y+z;

n=5*x+3*y+z/3;

if(m==100&&n==100)

printfC%5.0f,%5.0f,%5.0f\n〃,x,y,z);

*

T钱美/鬼。一4

#include<stdio.h>

main()

{floatx,y,z,m,n;

for(x=0;x<=20;x++)

for(y=0;y<=33;y++)

{z=100-x-y;

n=5*x+3*y+z/3;

if(n==100)

printfC%5.0f,%5.Of,%5.0f\n〃,羽y,z);

节钱买节帽----5*

#include<stdio.h>

main()5x+3y+z/3=100z=300-15x-9y

{intx,y,n;

//longm=100;x+y+z=100z=100-x-y

floatz;y=(100-7x)/4

for(x=0;x<=20;x++)

{y=(100・7*x)/4;

z=100-x-y;

/*m=x+y+z;*/

n=5*x+3*y+(int)(z/3);

if(y>=0&&z>=0&&n==100)

printfC%5d,%5d,%5.Of\n",羽必z);

例:打印如图显示:

#include<stdio.h>

RBCDEF

intmain(void)BCDEF

(JCDEF

constintR0WS=6;DEF

constintCHARS=6;

introw;

charch;

for(row=0;row<ROWS;row++)

(

for(ch=('A'+row);ch<('A'+CHARS);ch++)

printf("%c",ch);

printf("\n");

}

return0;

}

三钟循糅的比戴

小酬

以在表达式1中实

如冷使循环趋于结

一判断。]琴少

如环

这蔬章融赢最魂瀛融融是吆腺血We循环能|

飞r通常第二r七遁环銮量揩第J循环的次数.

死循环

•永远不会退出的循环为死循环

-for(;;)

()

-while(1)

{)

一do

{

}while(1)

•一般情况下,要极力避免死循环

•绝大多数程序不需要死循环。如果出现,往往都是bug

•时间过长的循环会造成“假死”效果,也要考虑解决

返回

break语句和continue语句

口break语句

•功能:在循环语句和switch语句中,终止并跳出循环

体或开关体。

•说明:

-break只能终止并跳出最近一层的结构

-break不能用于循环语句和switch语句之外的任何其它语

句之中。

返回

while

例break举例:输出圆面积,面积大于100时停止。

definePI3.14159

温馨提示

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

评论

0/150

提交评论