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

下载本文档

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

文档简介

第五章循环结构5.1循环的概念

5.2while语句

5.3do—while语句

5.4for语句5.5循环的嵌套5.6break语句和continue语句5.7程序举例5.8C语言趣味程序实例4:谁家孩子跑最慢5.9本章小结关键字:while语句do—while语for语句

在计算机科学中,一门好的语言应为程序流程提供下面三种模式:执行语句序列(顺序)利用某个测试,选择序列(选择)重复语句序列,直到满足某个条件(循环)对于第一、二种模式大家已经熟悉了,在本章里,大家将学到C语言的三种循环结构:while语句、do—while语句、for语句,利用有关运算符构造表达式以便控制三种循环。

5.1循环的概念循环结构是结构化程序设计的基本结构之一,几乎所有实用的程序都包含循环。所谓循环就是在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。C语言中提供的循环语句基本形式有以下三种:while语句、do—while语句、for语句。5.2while语句

while语句是一种先判断后执行的语句,属于“当型”循环结构。

格式为:

while(表达式){循环体语句}

执行过程:先计算表达式的值,当值为真(非0)时,执行循环体语句;否则退出循环,执行循环语句的下一条语句。因此,while循环可能不执行循环语句。

【程序文本5.1】求n!。分析:n!=1*2*3*…*(n-1)*n,这种求积可以用计算机的快速计算能力来实现,算法是比较典型的,可以用一个变量存放“积”中的“项”,它的初始值为1,每一次循环增加1,其值的变化为1,2,3,…,n-1,n。用另一个变量存放“积”的中间值,其值变化为1,1*2,1*2*3,…,1*2*3…*n。

#include“stdio.h”main(){inti=1,n;longt=1;

printf(“\n请输入n的值:”);

scanf(“%d”,&n);while(i<=n){t=t*i;i++;}printf(“\nn!=%ld”,t);}

程序运行结果:请输入n的值:5↙n!=120

【程序文本5.2】读入一行字母,统计其中元音字母出现的次数。分析:将读入的一串字母,依次进行判断,若是某个元音字母则进行累加统计。#include“stdio.h”main(){charc;

intcount=0;

while((c=getchar())!=’\n’){switch(c)

{case‘a’:case‘A’:case‘e’:case‘E’:case‘i’:case‘I’:case‘o’:case‘O’:case‘u’:case‘U’:count++;break;}}

printf(“元音字母的个数为:%d”,count);}程序运行结果:Ashuio89kIfy↙元音字母的个数为:55.3do—while语句

do—while语句是一种先执行后判断的循环语句,属“直到型”循环结构。格式为:

do{

循环体语句

}while(表达式);

执行过程:它先执行循环中的语句,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while循环至少要执行一次循环语句。

【程序文本5.3】计算2+4+6+8+…+100的值#include“stdio.h”main(){

inti=2,sum=0;do{sum=sum+i;i=i+2;}while(i<=100);

printf(“\nsum=%d”,sum);}程序运行结果:sum=2550【程序文本5.4】有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。#include“stdio.h”main(){

inti=0,t,n=20;floata=2,b=1,s=0;do{s=s+a/b;t=a;a=a+b;

b=t;i++;}while(i<=20);

printf(“sum=%9.6f\n”,s);}程序运行结果:sum=32.660259【程序文本5.5】猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩一个桃子了。求第一天共摘多少桃子。#include“stdio.h”main(){

intday,x1,x2;day=9;x2=1;do{x1=(x2+1)*2;x2=x1;day--;}while(day>0);

printf(“total=%d\n”,x1);}程序运行结果:total=1534for语句是C语言循环中使用最灵活的一种,它既能实现计数循环也能实现非计数循环。格式为:

for(表达式1;表达式2;表达式3){循环体语句}执行过程:先计算表达式1的值,再计算表达式2的值,若为真,则执行循环体,若为假,直接跳出循环,然后计算表达式3的值;再次计算表达式2的值,若为真,再执行循环体,再计算表达式3的值,直到某次表达式2的值为假循环结束,执行循环后面的语句。

注意:1.“表达式1”作用是设置循环初值,一般为赋值表达式,当在for外部已经给循环变量赋了初值时,可以省略“表达式1”。

2.“表达式2”是循环控制判断条件,一般为关系表达式或逻辑表达式。若省略,则认为“表达式2”始终为真。

3.“表达式3”可用来修改循环变量的值,一般是赋值表达式。若省略,则程序设计应另外保证循环能正常结束。【程序文本5.6】计算1+3+5+7+…+99的值#include“stdio.h”main(){

int

i,sum;sum=0;for(i=1;i<=99;i=i+2)

sum+=i;printf(“\nsum=%d”,sum);}程序运行结果:sum=2500【程序文本5.7】统计从键盘上输入的字符个数。#include“stdio.h”main(){

intn=0;

printf(“\n请输入一串字符:”);

for(;getchar()!=’\n’;n++);printf(“\n字符个数为:%d”,n);}程序运行结果:请输入一串字符:Iamastudent.字符个数为:15【程序文本5.8】求(即求1+2!+3!+4!+…+20!)。#include“stdio.h”main(){floats=0,t=1;

intn;for(n=1;n<=20;n++){t=t+n;s=s+t;}printf(“1+2!+3!+4!+…+20!=%e\n”,s);}程序运行结果:1+2!+3!+4!+…+20!=2.561327e+18注意:s不能定义为int型,因为在TurboC或TurboC++等编译系统时,int型数据的范围为-32768~32767,也不能定义为long型,因为long型数据的范围为-21亿~21亿,也无法容纳求得的结果。

【程序文本5.9】一球从100m高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地时,共经过多少m?第10次反弹多高?#include“stdio.h”main(){floatsn=100,hn=sn/2;intn;for(n=2;n<=10;n++){sn=sn+2*hn;hn=hn/2;}

printf(“第10次落地时共经过%fm。\n”,sn);

printf(“第10次反弹0.097656m。\n”,hn);}运行结果:第10次落地时共经过299.609375m。第10次反弹0.097656m。我们在处理实际问题时,许多问题都需要用两层甚至多层循环才能解决,也就是说需要用到循环的嵌套格式来完成。所谓循环的嵌套是指在一个循环内又完整的包含了另外一个循环,即循环体本身包含循环语句。前面介绍的三种类型的循环都可以互相嵌套,循环的嵌套可以是多层,但每一层循环在逻辑上必须是完整的。

5.5循环的嵌套【程序文本5.6】输出九九乘法表。

#include“stdio.h”main(){int

i,j;for(i=1;i<=9;i++){for(j=1;j<=9;j++)

printf(“%d*%d=%-4d”,i,j,i*j);

printf(“\n”);}}程序运行结果:1*1=11*2=21*3=31*4=41*5=51*6=61*7=71*8=81*9=92*1=22*2=42*3=62*4=82*5=102*6=122*7=142*8=162*9=183*1=33*2=63*3=93*4=123*5=153*6=183*7=213*8=243*9=274*1=44*2=84*3=124*4=164*5=204*6=244*7=284*8=324*9=365*1=55*2=105*3=155*4=205*5=255*6=305*7=355*8=405*9=456*1=66*2=126*3=186*4=246*5=306*6=366*7=426*8=486*9=547*1=77*2=67*3=217*4=287*5=357*6=427*7=497*8=567*9=638*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=648*9=729*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81【程序文本5.7】打印下列图形。***************#include“studio.h”main()

{

inti,j;

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

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

{printf("*");}

pritnf("\n");

}}5.6.1break语句

break语句仅用在循环语句和switch语句中。在循环语句中是控制程序从循环结构中跳出,继续执行循环语句下面的语句;在switch语句中是控制程序跳出switch结构,继续执行switch语句下面的一个语句。

break语句的一般形式为:

break;5.6break语句和continue语句

【程序文本5.8】计算边长a=1到a=20时正方形的面积,直到面积area大于80为止。#include“stdio.h”main(){inta;

intarea=0;for(a=1;a<=20;a++){area=a*a;if(area>=80)break;

printf(“\narea=%d”,area);}}分析:程序中for循环体内,当area>80时,执行break语句,提前终止循环。程序的运行结果是:area=1area=4area=9area=16area=25area=36area=49area=64

5.6.2continue语句

continue语句的作用是结束本次循环,即跳过循环体中下面尚未执行的语句,进行下一次循环判定。

continue语句的一般形式为:

continue;【程序文本5.9】输出50到70之间不能被7整除的数。分析:对50~70的每一个数进行测试,如该数能被7整除,即模运算为0,则由continue语句结束本次循环转去执行下一次循环。只有模运算不为0时,才输出不能被7整除的数。#include“stdio.h”main(){intn;for(n=50;n<=70;n++){if(n%7==0)continue;printf(“%d\t”,n);}}程序运行结果:505152535455575859606162646566676869【例1】斐氏数列是公元13世纪数学家斐波拉契发明的,即:

1,2,3,5,8,13,21,34,55,89,…请编程输出该数列前20项。分析:该数列的规律是:数列前两项是1和2,以后每项均为前相邻两项之和,用数学语言描述是:F(0)=1;F(1)=2;F(n)=F(n-1)+F(n-2)(当n≥2时);现设两个变量a、b表示某项前两项(初值0、1),那么从第三项开始每项(用c表示)均可由前两项推出。

5.7程序举例#include“stdio.h”main(){inti,a=1,b=2,c;

printf(“%d\t%d\t”,a,b);for(i=1;i<=18;i++){c=a+b;

printf(“%d\t”,c);a=b;b=c;}printf(“\n”);}程序运行结果:123581321345589144233377610987159725844181676510946【例2】打印出所有的“水仙花”数。所谓“水仙花”数是指一个3位数,其各位数字立方和等于该数本身。例如:153是个“水仙花”数,因为153=13+53+33。#include“stdio.h”main(){

inti=100,j,ge,shi,bai;

printf(“\n所有的水仙花数有:”);

while(i<1000){j=i;ge=j%10;

j=j/10;shi=j%10;j=j/10;

bai=j;

if(i==ge*ge*ge+shi*shi*shi+bai

温馨提示

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

评论

0/150

提交评论