语言西理生活课件第5章循环结构_第1页
语言西理生活课件第5章循环结构_第2页
语言西理生活课件第5章循环结构_第3页
语言西理生活课件第5章循环结构_第4页
语言西理生活课件第5章循环结构_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

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

文档简介

1第5章循环结构

循环语句转移语句2while语句for语句do-while语句循环结构

在给定条件成立时,反复执行某程序段,直到条件不成立为止。反复执行的程序段,称为循环体。3while循环4while循环while(表达式)语句1;语句2;

可以是任何合法的表达式,控制循环是否继续。

反复执行的部分(循环体),多条语句需表示为复合语句。表达式非0语句1语句25while循环的一般构造循环控制变量赋初值;while(表达式){

处理语句;

改变循环控制变量的语句;

}i=1;while(i<=4){printf(“*”);

i++;}提示:在循环表达式中控制循环是否结束的变量称为循环控制变量。输出i1*2*3*4*56

编程实现:打印1~100,每行输出5个。12345678910111213141516输出形式i=1;while(

){printf(“%5d”,i);

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

i++;}i<=100main(){

inti;}7

编程实现:1+2+3+…+100设计思路:反复执行以下的赋值语句s=s+i;累加和变量

需累加的数,依次取序列中的值。

常用算法:累加和求解问题。is01+12+23+38i=1s=0i<=100s=s+ii++

输出smain(){

inti,s;i=1;s=0;while(

i<=100

){s+=i;i++;}printf(“s=%d”,s);}s+=i++;

9

编程实现:从键盘上输入5个数,求其和值。数据结构

计数器变量i;

存放每次要加数x

累加和s;算法

i置为1;s置为0;

若i<=5,则反复做:

读入数=>x;s=s+x;

i增1;

直到i>5为止。输出s。main(){

inti;floatx,s;s=0;i=1;while(i<=5){scanf(“%f”,&x);s=s+x;i++;

}printf(“s=%f”,s);}10

编程实现:5!=1*2*3*4*5设计思路:反复执行以下的赋值语句t=t*i;累乘积变量

需乘的数,依次取序列中的值。

常用算法:连乘积求解问题。it11*12*23*3i=1;t=1;while(

i<=5

){t*=i;i++;}11

编程实现:求xn设计思路:反复执行以下的赋值语句,循环n次t=t*x;x*x*x*x*x*xmain(){

inti,n;floatx,t;t=1;i=1;scanf(“%d%f”,&n,&x);while(i<=n){t=t*x;i++;/*i起着计数作用*/

}printf(“t=%f”,t);}12编程实现:直到最后一项的绝对值小于10-4为止。设计思路:将以上式子表示如下:数据结构

表示分子的变量s;表示分母的变量n;表示累加数的变量t;表示累加和的变量pi;13算法设置s、n、t和pi的初值若|t|>=10-4,反复做:将t加到累加和pi中改变s、n、t为下一项值输出pi*4的值main(){

ints;floatn,t,pi;s=1;n=1;pi=0;t=s/n;while(fabs(t)>=1e-4){pi=pi+t;s=-s;n+=2;t=s/n;}printf(“pi=%f”,4*pi);}#include<math.h>14intn=0;while(n++<=2);printf(“%d”,n);分析n<=2n++intn=0;while(n++<=2)printf(“%d”,n);n0123输出:3输出:12315

常用算法:逐个处理键盘上输入的字符,一般采用如下算法。读取一个字符若读入的字符不是回车符,反复做:处理该字符;

读取下一个字符直到读入的字符为回车符为止。ch=getchar();while(ch!=‘\n’){

putchar(ch);/*处理*/

ch=getchar();/*读下一个*/

}16ch=getchar();while(ch!=‘\n’){

putchar(ch);ch=getchar();}while((ch=getchar())!=‘\n’)

putchar(ch);while(ch=getchar()

!=‘\n’)

putchar(ch);17

编程实现:将输入的一行小写字母=>大写字母,其余不变。数据结构

定义一个字符型变量ch算法读入一个字符=>ch

如果是小写字母,则转换成大写字母输出,其余字符原样输出。重复以上过程,直到读入的字符为回车符。输入:Youare12yearsold.输出:YOUARE12YEARSOLD.18输入:输出:Youare12yearsold.YOUARE12YEARSOLD.#include<stdio.h>main(){

charch;printf(“请输入一串字符:”);while

((ch=getchar())!=‘n’)

{

if(ch>=‘a’&&ch<=‘z’)

ch=ch-32;putchar(ch);

}}19

编程实现:输入一行字符,统计其中字母、数字和其他符号的个数。数据结构

定义一个字符型变量c;

定义三个计数器变量letters、digit和others,分别记录相应字符的个数。

输入:As123g1b,9算法

计数器变量置初值;读入一个字符=>c

如是字母,则letters增1;如是数字字符,则digit增1;否则others增1。重复以上过程,直到读入的字符为回车符。输出计数器变量的值。20输入:As123g1b,9#include<stdio.h>main(){

intletters,digits,others;charc;letters=digits=others=0;

while((c=getchar())!='\n')

if(c>='A'&&c<='Z'||c>='a'&&c<='z')letters++;

elseif(c>='0'&&c<='9')digits++;

elseothers++;printf("%4d%4d%4d",letters,digits,others);}21while((ch=getchar())==‘e’)putchar(‘*’);若输入abcde,则循环执行几次。结论:一次也不执行。分析22do-while循环23do-while循环do{

语句序列;}while(表达式);语句2;语句序列表达式非0语句2

若为一条语句则可省略{}24i=1;sum=0;do{sum=sum+i;i++;}while(i<=100);实现1+2+3+…+100累加和的编程25i=0;while(i>0){printf(“i=%d”,i);i--;}

区别i=0;do{printf(“i=%d”,i);i--;}while(i>0);一次循环未执行至少执行一次循环26i=1;s=1;do{s=s+i;i++;}while(i<5);练习若变量已正确定义,以下不能正确计算1+2+3+4+5的程序段是:i=0;s=0;do{i++;s=s+i;}while(i<5);i=1;s=0;do{s=s+i;i++;}while(i<6);i=1;s=0;do{s=s+i;i++;}while(i<=5)27for循环28for循环for(表达式1;表达式2;表达式3)语句1;语句2;表达式1表达式2非0语句1表达式3语句2说明表达式1

一般是对循环控制变量赋初值的表达式。表达式2

控制循环是否结束的表达式。表达式3

一般是改变循环控制变量的表达式。29for(k=0;k<5;k++)printf(“*”);k输出0*1*2*3*4*5求累加和的程序段:1+2+3+…+100s=0;for(i=0;i<=100;i++)s+=i;i=100;i>=0;i--30编程实现求n!scanf(“%d”,&n);t=1;for(i=1;i<=n;i++)t=t*i;for(i=n;i>=1;i--)31for循环的变体s=0;for(i=1;i<=100;i++)s+=i;表达式1可省略s=0;i=1;for(

;i<=100;i++)s+=i;表达式3可省略s=0;for(i=1;i<=100;

)

{s+=i;i++;

}32表达式2可省略,表示条件永远为真s=0;for(i=1;

;i++)s+=i;表达式1~3都省略for(

;;

){}

死循环,要避免表达式1,表达式3省略s=0;i=1;for(

;i<=100;

){s+=i;i++;}33表达式1可设置与循环控制变量无关的语句i=1;for(s=0;i<=100;i++)s+=i;表达式1、表达式3可以是,表达式for(s=0,i=1

;i<=100;

s+=i,i++);可无循环体for(i=1;i<=100;i++);for(i=0,j=100

;i<=j;

i++,j--)k=i+j;34编程实现编程计算正整数1~n中奇数之和和偶数之和。main(){

}inti,n;ints1,s2;printf(“请输入一个整数值:”);scanf(“%d”,&n);s1=s2=0;for(i=1;i<=n;i++)

if(i%2==0)s2=s2+i;

elses1=s1+i;printf(“s1=%d,s2=%d”,s1,s2);35for语句的嵌套for(i=0;i<=2;i++){

for(j=0;j<=3;j++)printf(“*”);printf(“\n”);

}i****01****2****336for(i=0;i<=2;i++){

for(k=1;k<=i;k++)printf(““);for(j=0;j<=3;j++)printf(“*”);printf(“\n”);

}************37编程实现打印九九表。1

234567894

681012141618369

121518212427481216

2024283236510152025

3035404561218243036

4248547142128354249

5663816243240485664

729182736455463728123456789123456789

i=1;

for(j=1;j<=9;j++)printf(“%5d”,i*j);printf(“\n”);j<=i;for(i=1;i<=9;i++){}38break和continue语句39break语句switch语句中跳出switch语句,执行switch的下一条语句。循环体内

无论循环条件是否成立,无条件跳出循环。一般放在循环内的条件语句中。40s=0;for(i=1;i<=10;i++){s+=i;

if(s>5)

break;printf(“s=%d\n”,s);}输出结果s01s=13s=3541s=0;for(i=1;i<=5;i++){scanf(“%d”,&a);if(a<0)break;s=s+a;}若输入:123456–23若输入:12-345结果:1~5累加和的求解结果:1~2累加和的求解42s=0;for(;;){scanf(“%d”,&a);

if(a<0)break;s=s+a;}若输入:123456–23若输入:12-345结果:1~6累加和的求解结果:1~2累加和的求解43

在多重循环中,

break语句仅跳出包围该语句的那层循环for(t=0;t<100;t++){count=1;

for(;;){printf(“%d”,count);count++;if(count==10)break;

}

}

结果:输出100次的1~10的值。44continue语句功能:强制执行下一次循环while(表达式1){…if(表达式2)continue;…}do{…if(表2)continue;…}while(表1);45for(表达式1;

表达式2;

表达式3){…if(表达式4)continue;…}46do{scanf(“%d”,&x);

if(x<0)

continue;printf(“%d”,x);}while(x!=100);若输入:12-34-510012输出结果112410047for(i=0;i<=100;i++){if(i%3==0)continue;printf(“%8d”,i);}分析以下程序完成的功能把0~100之间不能被3整除的数打印出来。48编程实现

从键盘上输入n个数,求最大值和最小值。常用算法

穷举法。每个数据依次测试一遍,直到所有数据测试完毕。

思想默认第一个数为最大的最小的,分别保存在变量max和min中,然后每读一个新数,就和max和min中的值比较,如果比max中的大就改变max的值为该值,如果比min中的小就改变min值为该值,直到比较完所有的值。49数据结构

n:数据个数

x:读入的数xmax:存放最大数

min:存放最小数算法读入n将读入的第一个数=>

max、min变量中读下一个数=>x

若max<x,则max=x

若min>x,则min=x

重复以上过程,直到读完所有数为止。输出max、min50main(){

}intn,i;floatx,min,max;printf(“请输入数据个数:”);scanf(“%d”,&n);printf(“\n请输入%d个数据:”,n);scanf(“%f”,&x);max=min=x;for(i=2;i<=n;i++){scanf(“%f”,&x);

if(x>max)max=x;

elseif(x<min)min=x;

}printf(“max=%f,min=%f”,max,min);请输入数据个数:5请输入5个数据:271834122351

编程实现求Fibonacei数列的前40项,每行输出5个数。

1,1,2,3,5,8,13,…常用算法

递推算法。不断由已知值推出新值,直到求得解为止。规律fib1=fib2=1fibn=fibn-1+fibn-2n>=352

1,1,2,3,5,8,13,…f1f2+ff2f1+ff1f2+f53数据结构

定义三个变量f1、f2、f

(注意数据类型)算法

设置f1、f2初值为1,并输出求f,其值为f1+f2

打印f

判断是否输出回车换行改变f1、f2的值为下一项的前两项重复以上过程,直到输出38个为止54main(){

}doublef1,f2,f;inti;f1=f2=1;printf(“%12.0f%12.0f”,f1,f2);for(i=3;i<=40;i++){f=f1+f2;printf(“%12.0f”,f);

if(i%5==0)printf(“\n”);f1=f2;f2=f;

}55

编程实现判断某一数是否为素数。

除1和它本身之外,不能被其他任何整数整除的正整数。素数172,3,4,5,…16

2,3,4,…2,3,4,…17/256数据结构

定义一个变量x,存放要验证的数算法读一个需验证的数xx分别去除2,3,…x-1数列中的每一个数若不能除尽,重复以上步骤,继续取下一个数验证若能除尽,结束以上步骤根据以上情况,输出验证结果。57main(){

}intx,i;printf(“请输入要验证的整数:”);scanf(“%d”,&x);for(i=2;i<=x-1;i++)if(x%i==0)break;if(i<=x-1)printf(“%disnot”,x);elseprintf(“%disok”,x);i<x;i<=sqrt(x);58

方法2

设置一个标志变量算法读一个需验证的数x

设置标志变量flag初值为1。

x分别去除2,3,…x-1数列中的每一个数若能找到一个数能整除x,则设置flag=0,结束验证。否则,继续取下一个数。根据flag的值,输出验证结果。59#include<math.h>main(){

int

x,i;intflag;printf(“pleaseenterthevalue:”);scanf(“%d”,&x);

flag

=1;for(i=2;i<=sqrt(x);i++)if(x%i==0){flag=0;break;}

if(

flag)printf(“%disok”,x);

elseprintf(“%disnotok”,x);}60#include<math.h>main(){intx,i;intflag;printf(“pleaseenterthevalue:”);scanf(“%d”,&x);

flag=1;for(i=2;

flag

&&i<=sqrt(x);i++)if(x%i==0)flag=0;

if(flag)printf(“%disok”,x);

elseprintf(“%disnotok”,x);}61

编程实现求出2~100之间所有素数的累加和。main(){intx,i;scanf("%d",&x);

for

(i=2;i<=x-1;i++)

if(x%i==0)break;

if(i>x-1)printf("%5d",x);

}ints=0;for(x=2;x<=100;x++){}printf(“s=%d”,s);s=s+x;62

方法二:设置标志量。main(){

intx,i;ints=0;int

flag;for(x=2;x<100;x++){

flag=1;for(i=2;i<=x-1;i++)if(x%i==0){flag=0;break;}if(flag)s=s+x;}

}63编程实现输入n,计算如下表达式的值

1+1+2+1+2+3+…+1+2+3+…+n。1+(1+2)+(1+2+3)+…+(1+2+3+…+n)主要的数据结构

s:累加和变量;

t:加到累加和的数算法确定n值;

s=0;重复执行n次以下操作求t;

s=s+t;输出s。t=0;for(j=1;j<=1;j++)t=t+j;循环次数i122;33;i;641+(1+2)+(1+2+3)+…+(1+2+3+…+n)main(){

ints,t,n;inti,j;printf(“pleaseenterthenum:”);scanf(“%d”,&n);s=0;

for(i=1;i<=n;i++){

t=0;

for(j=1;j<=i;j++)t+=j;s=s+t;}printf(“s=%d”,s);}65main(){

int

s,t,n;inti,j;printf(“pleaseenterthenum:”);scanf(“%d”,&n);s=0;t=0;

for(i=1;i<=n;i++){t+=i;s=s+t;

}printf(“s=%d”,s);}66编程实现计算正整数n的各位上的数字之积。

依次类推,可以

温馨提示

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

评论

0/150

提交评论