第3章 循环结构

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第三章循环结构

在程序设计中,如果需要重复执行某些操作,就要用到循环结构。使用循环结构编程时,首先要明确2个问题,哪些操作需要重复执行?这些操作在什么情况下重复执行?它们分别对应循环体和循环条件,然后就可以选用C语言提供的3种循环语句:while、do-while 、for实现循环,这写循环语句我们在第一章“1、2 C语言程序设计语法”和第二章“2.6字符类型”中也都见过,而第二章2、4节的用if语句和goto 语句构成“直到型”也叫循环结构。

3.1 while 语句

while是用来实现循环的语句,而且它的适用面很广。其一般格式为:

while (表达式)

循环语句;

其执行的流程如图3.1所示。当表达式的值为“真”时,循环执行,直到表达式的值为“假”,循环终止并继续执行while的下一条语句。

while语句的用法:

(1)while语句中的表达式可以是任意合法的表达式,

循环体语句只能是一条语句。

(2)while语句的构成简单,只有一个表达式和一条

循环体语句,分别对应循环的两个核心要素:循

环条件和循环体,可以直接把循环问题的分析设

计转换为语句实现。

(3)循环的实现一般包括4部分,即初始化、条件控图3.1 while语句的执行流程制、重复的操作以及通过改变循环变量的值最终

改变条件的真假性,使循环能正常结束。当使用while语句时,由于它只有2个成分(表达式和循环体语句),就需要另加初始化部分,第4部分while的循环体语句中必须包含能最终改变循环条件真假性的操作。

例3.1 从键盘输入一批学生的成绩,计算平均分。

这是一个累加求和的问题,将输入的成绩先累加,最后再除以学生的数量,算出平均分。本题的难点在于确定循环条件,由于题目中没有给出学生的数量,不知道输入数据的个数,所以无法事先确定循环次数,这时需要自己设计循环条件,可以用一个特殊的数据作为正常输入数据的结束标志,由于成绩都是正数,就选用一个负数作为结束标志,因此,循环条件就是输入的数据grade>=0 。

#include

int main()

{ int num; //记录输入数据的个数,以便统计平均分

double grade,total; //grade存放输入的成绩,total保存成绩之和

num=0;

total=0;//置初值为0

printf("Enter grades:"); //输入提示

scanf("%lf",&grade); // 输入第一个数据

while( grade >= 0 )

{ total = total + grade; //累加成绩

num ++; //计数

scanf("%lf",&grade); //再读入一个新数据,为下次循环做准备

}

if(num!=0)

printf("Grade verage is %.2f\n",total/num); //total/num是累加成绩/成绩门数

else

printf("Grade average is 0\n");

return 0;

}

例3.2 猴子吃桃问题,猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半多一个。以后每天早上都吃了前一天剩下的一半多一个,到第10天早上想再吃时,见只剩下一个桃子了,求第一天共摘下多少桃子。程序编写如下:

#include // 第10天是1,因为4的1半是2,多1个是3,第10天是1了main() // 第9天是(1+1)*2=4 (1+1)*2=4是第9天的4 { int day=9,x1,x2=1;// 第8天是(4+1)*2=10 第8天10

while(day>0) // 第7天是(10+1)*2=22 第7天22

{//第一天桃子数是第二天桃子数加1后的2倍// 第6天是(22+1)*2=46 第6天46 x1 = ( x2+1 ) * 2; // 第5天是(46+1)*2=94第5天94

x2 = x1 ; // 第4天是(94+1)*2=190 第4天190

day--; // 第3天是(190+1)*2=382 第3天382

} // 第2天是(382+1)*2=766 1534/2-1=766是第2天printf("total = %d\n",x1); // 第1天是(766+1)*2=1534 (766+1)*2=1534是第1天return 0;

}

运行结果:total = 1534 (也就是猴子第一天摘的桃子是1534个)

3.2 do – while 语句

do – while语句与while语句略有不同,它先执行循环体,后判断循环条件。所以无论循环条件的值如何,至少会执行一次循环体,其一般形式如下:

do

{

循环体语句

}

While( 表达式);

do – while语句的执行流程如图3.2所示,第一

次进入循环时,首先执行循环体语句,然后再检查循环

控制条件,即计算表达式,若值为“真”,继续循环,直

到表达式的值为“假”,循环结束,执行do-while的下

一条语句。

do-while语句的使用方法和while语句类似,语句

中的表达式可以是任意合法的表达式,循环体语句只能

是一条语句;使用时要另加初始化部分,循环体语句必须

包含能最终改变条件真假的操作,例如例3.2中的day>0

用–day来控制,到day减到不大于0时就结束了。图3.2 do-while语句流程图do – while语句适用于先循环,后判断循环条件

的情况,一般在循环体的执行过程中明确循环控制条件,它每执行一次循环体后,再判断条件,以决定是否进行下一次循环。

例3.3 求sn = a + aa + aaa + … + aa…a 之值,其中a是一个数字,例如:

3 + 33 + 333 + 3333 + 33333(此时n是5),a和n由键盘输入。

#include

main()

{//a是位上的数如3,n是多少位如33333是5位,tn是前个位数a,sn是后位数aa int a,n,i=1,sn=0,tn=0;

printf("a = :");

scanf("%d",&a);

printf("n = :");

scanf("%d",&n);

do

{ tn = tn+a;//第一次tn是0,0+a是a ,之后a*10为a0,第2次tn是a ,a+a*10=aa ……

sn = sn+tn;

a = a*10;

++i;

}

while(i<=n);

printf("a+aa+aaa+...=%d\n",sn);

return 0;

}

运行结果:a = : 3

n = : 5

a + aa + aaa + … = 37035

注意:

(1)循环体如果包含一个以上的语句,应该用大括弧括起来,以复合语句形式出现。如果不加大括

相关文档
最新文档