第4章C语言

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第4章循环控制使用C语言编程解决实际问题时,常常要用到循环控制语句来控制程序一遍一遍反复地执行某个部分的语句。例如,要输入全班学生成绩;求若干个数之和等。几乎所有实用的程序都离不开循环。由循环关键字和循环体语句构成的循环结构是结构化程序设计的基本结构之一。它和顺序结构、选择结构共同作为各种复杂程序的基本构造单元。因此熟练掌握选择结构和循环结构的概念及使用是程序设计的最基本的要求。C语言中提供了while语句,do-while语句和for语句,用于实现循环控制结构程序设计。在循环语句中通过判断“表达式”的值(表达式的意义同前一章if中相同)来完成嵌入的一个需要重复执行的语句,通常为复合语句构成的循环体。在循环中可以使用以下转移语句:break语句、continue语句及goto语句来进行流程控制,以终止循环或控制进入下一次循环继续执行。本章分别介绍这些控制语句。۝4.1while语句while语句用来实现“当型”循环结构。其一般形式为:while(表达式)循环体语句;其中while为关键字。表达式为循环条件。执行时先判断循环条件,即计算表达式的值来决定是否进入循环体。如果其值为真(非0),则进入循环执行循环体语句。执行完一遍循环体后,再返回计算表达式的值。若其值仍为真,则继续进入循环体执行循环体语句。反复进行,当表达式的值为假(为0),则退出循环,转入执行循环体后面的语句。若在执行while语句开始,即初次计算表达式时,表达式的值即为假(为0),则不进入循环,将退出while语句。此时,循环体语句一次也未被执行,程序转入执行循环体后面的语句。while语句的执行过程如图1.3-7(a)当型循环流程图和图4.1-1while语句的N-S图所示。例4.1-1求5n。分析:若n=3,5n=5×5×5#includestdio.hvoidmain(){inti=1,n;longm=1;scanf(“%d”,&n);while(i=n){m*=5;i++;}printf(“%ld\n”,m);}运行结果:6↙15625例4.1-2求1001in图4.1-1while语句的N-S图当表达式为真循环体语句分析:如第一章介绍的算法,使用一个累加变量直接累加。参见图1.3-3(a)(b)所示。#includestdio.hvoidmain(){inti=1,sum=0;while(i=100){sum=sum+i;i++;}printf(“%d”,sum);}运行结果:5050例4.1-3求1~5各数平方根分析:求1,2,3,4,5各数的值#includestdio.h#includemath.hviodmain(){intn=1;printf(“n\ts\n”);while(n6){printf(“%d\t%0.3f\n”,n,sqrt(n));n++;}}运行结果:ns11.00021.41431.73242.00052.236程序说明♣在循环体中应有能使循环趋向于结束的控制变量改变的语句,如上3例中的i++、n++。在表达式中应设置能够达到的结束条件。如上3例中的i=n、i=100、i6。如果没有这两个设置,要么控制变量始终不改变,循环永不结束;要么控制变量有改变,但永远达不到结束条件,也是循环无止境。例4.1-1中while循环语句,也可以写成更紧凑的形式,即while((i++)=n)m*=5;♣循环体如果包含一个以上的语句,应该用花括号“{}”括起来,以复合语句的形式出现。如果不加花括号,while语句循环体的范围只到while及表达式后面第一个分号处。♣在例4.1-1中,因为变量m中的数字放大的速度很快,为保证字长,将变量m定义为long整型。۝4.2do-while语句do-while语句用来实现“直达型”循环结构。do-while语句的特点是先进入循环执行循环体语句,然后判断循环条件是否成立,再决定是再次进入,还是退出循环。其一般形式为do{循环体语句;}while(表达式);其中do、while为关键字。表达式为循环条件。表达式后的分号“;”不能丢掉。该循环语句的功能是,先执行循环体语句,然后计算表达式。若其值为真(非0),则返回并进入执行循环体,反复进行,直到表达式的值为假,退出循环。do-while语句的执行过程如图1.3-7(b)直达型循环流程图和图4.2-1do-while语句的N-S图所示。例4.2-1用do-while语句求1001in,与while比较。#includestdio.hvoidmain(){inti=1,sum=0;do{sum=sum+i;i++;}while(i=100);printf(“%d”,sum);}由例4.2-1和例4.1-2可见,do-while语句与while语句的主要区别是:while语句先判断循环条件真假,决定是进入循环体执行循环语句,还是直接退出循环体;而do-while语句是首先执行一次循环体语句,再判断循环条件。由此可见,do-while语句的循环体语句至少要执行一次,所以图4.2-1表示的do-while语句为“直到型循环”结构。同时,也不难看出,对于同一个问题,既可以用while语句处理,也可以用do-while语句处理。二者完全等价,并可相互转换。若while语句和do-while语句的循环体部分是一样的,它们的结果也一样。但是要注意的一点:由于while后面的表达式在第一次计算时有可能为假(0值),而do-while语句又至少被执行一次的情况存在,因此,尽管while和do-while有相同的循环体,可结果有可能不一样。比如下面的比较,给出的初始值不同。例4.2-2while和do-while循环,给出变量i的相同初始值的结果比较。(1)#includestdio.h(2)#includestdio.hvoidmain()voidmain(){intsum=0,i;{intsum=0,i;scanf(“&d”,&i);scanf(“&d”,&i);while(i=10)do{sum=sum+i;{sum=sum+i;i++;i++;}}while(i=10);printf(“sum=%d”,sum);}printf(“sum=%d”,sum);}运行结果:运行结果:1↙1↙sum=55sum=55图4.2-1do-while语句的N-S图循环体语句当表达式为假再运行一次:再运行一次:11↙11↙sum=0sum=11从上面的两次输入,可以看到有相同的结果,也有不相同的结果。当输入i值小于或等于10时,二者得到结果相同。而当i10时,二者结果不同。原因请读者自己分析。例4.2-3从键盘输入某班学生的数学成绩。求该班数学的平均分,最高分及最低分。分析:一个班学生的人数只有在输入完成绩之后才能统计出来,为此须设计一个结束标志。本例设定当输入为负数时,表示输入结束,之前的学生人数就确定了。平均分数为总分数除以学生人数;求最高分相当于求最大值;求最低分相当于求最小值。#includestdio.hvoidmain(){floatscore,total=0,max=0,min,count=0;/*score表示学生成绩,total为总分,max为最高分,min为最低分,count为人数*/printf(“Pleaseinputscores:\n”);scanf(“%f”,&score);min=score;do{if(scoremax)max=score;if(scoremin)min=score;++count;total+=score;scanf(“%f”,&score);}while(score=0);printf(“Themaximalscoreis%3.1f\n”,max);printf(“Theminimalscoreis%3.1f\n”,min);printf(“Theaveragescoreis%0.3f\n”,total/count);}运行结果:Pleaseinputscores:90.5↙60.2↙79.5↙88.7↙99.5↙56.1↙87.5↙85↙86↙82↙-1↙Themaximalscoreis99.5Theminimalscoreis56.1Theaveragescoreis81.500۝4.3for语句C语言中的for语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环条件的情况,它完全可以代替while语句。4.3.1语句格式for循环语句的一般形式为for(表达式1;表达式2;表达式3){循环体语句;}其中有3个控制循环的表达式,并用分号“;”隔开。表达式1一般作为循环语句的循环控制变量等的赋初值运算;表达式2一般是一个关系表达式,判定循环控制变量是否满足该条件,以决定控制程序是进入循环体执行循环体语句,还是结束循环退出for循环语句,也称为条件表达式;表达式3一般用于修改循环控制变量的值,是增加还是减少,以便再次判定时能够达到结束循环的条件,是一个运算表达式。for语句执行的过程是先求表达式1的值;再求表达式2的值,若其值为真(非0),则执行for语句中的循环体语句;接着求解表达式3,修改循环控制变量的值,再返回求解表达式2。如此反复进行,直到表达式2的值为假(为0),退出循环,继续执行for循环语句的下一条语句。for语句最简单的应用形式和最易理解的形式如下for(循环控制变量赋初值;循环条件;循环控制变量修改)语句如:for(i=1;i=100;i++)sum=sum+i;式中3个表达式的功能为,表达式1即“i=1;”是设置循环控制变量i的初值;表达式2即“i=100;”是设置控制条件;表达式3即“i++”是修改循环控制变量i的值。所以,循环控制变量i的初值、i所达到的条件、i的修改方式共同作用决定了for循环的循环次数。循环体内的sum=sum+i;语句被执行100次。如果循环体只有一个语句,花括号可以省略。for语句的执行过程流程如图4.3-1所示。从上例for语句执行累加和同例4.1-2的while语句执行累加和比较中,可以看出它们的执行过程完全一样,即相当于以下语句i=1;while(i=100){sum=sum+i;i++;}很显然,用for语句更加简单、方便。但是要注意的一点是一定要设置一个能控制循环次数的循环控制变量,如两例中的变量i,并能出现在表达式2中。for循环语句其它形式♣表达式1和表达式3可以使用逗号表达式。表达式1和表达式3,不仅可以是设置控制循环变量初值和修改变量的表达式,还可以是与控制循环变量无关的其它表达式。甚至可以使用逗号表达式,每个简单表达式间用逗号“,”间隔。如例4.3-2的for语句和以下语句:for(sum=0;i=100;i++)sum=sum+i;for(sum=0,i=1;i=100;i++)sum=sum+i;for(i=0,j=100;i=j;i++,j--)k=i+j;♣表达式2一般为关系表达式(i=100)或逻辑表达式(ab&&xy),但也可以是其它表达式,形如i=j、a+b、5。同if语句的表达式意义一样,必须特别注意“非0”的意义。如i=j,这是赋值表达式。只要j值不为0(i值就不为0,即“非0”)就继续循环,只有其值为0时,才终止for循环。如以下语句就完成了3次循环。for(i=0,j=3;i=j;i++,j--){……}由此可见,表达式的类型不仅限于关系表达式和逻辑表达式,可以是其它表达式。只要其值为非0,就不终止for循环。例4.3-1输出1~3这几个数#includestdio.hvoidmain(){inti;for(i=1;i=3;i++)printf(“%d\n”,i);}运行结果:123例4.3-2一个数字从1开始,另一个数字从2开始。两数之和不大于10,输出这两个数。#includestdio.hvo

1 / 16
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功