第4章循环结构的流程及应用学习目标使用循环处理需要反复执行的操作。循环结构的流程图。循环与条件的综合应用。学一学while语句的一般格式:while(表达式){语句体;}首先计算表达式的值,如果表达式的值为非0(真),则执行循环体语句,然后重新计算表达式的值,并再次判断值是否为真,如为真,再执行循环体内的语句,如此循环往复;如果表达式的值为0(假),则退出循环结构。试一试问题4.1编写程序计算1+2+3+……+10,然后输出结果。试一试问题4.2计算一个住户一年的煤气费用的总和(每月煤气费由键盘输入)。练一练①如果问题4.1中的累加变为累乘,即求10!,试编程实现。提示:求阶乘作乘法运算结果可能超过int型的范围,须定义long类型。②拓展问题4.2,计算每月煤气费用超过100元的共有几个月?试一试问题4.3试编写一个小游戏程序,输入两个数据,如果输入数据之和为5的倍数,那么就算输了,停止游戏;如果赢了,接着继续输入数据。试一试问题4.4运行下面的两段程序,查看结果有什么不同之处。程序2:#includestdio.hvoidmain(){inti=0;while(i10){i++;if(i%3==0){printf(%d,i);continue;}}}程序1:#includestdio.hvoidmain(){inti=0;while(i10){i++;if(i%3==0){printf(%d,i);break;}}}试一试问题4.5编写程序,计算满足:12+22+32+…+n21000的最大n值。相关知识点1.循环的3个要点循环变量的初始值、循环条件和循环变量的增量。2.while语句的一般形式while(表达式){循环体语句;}其中表达式为循环条件,循环体语句为要反复执行的操作。3.break语句与continue语句基本格式:Break;或continue;break语句的功能是结束break所在的层的循环体语句的执行。continue语句的功能是结束本次循环中循环体语句的执行,接着进行下次循环条件的判断,以决定是否执行下一次循环学一学do-while语句的一般格式do{语句体;}while(表达式);先执行循环体语句,再求解表达式的值,若表达式的值为非0,则再次执行循环体语句,如此反复,直到表达式的值为0,结束循环,并转到下一条语句执行试一试问题4.6将问题4.1改为用do-while语句的形式实现。试一试问题4.7观察以下两个程序运行结果是否相同?程序1:#includestdio.hvoidmain(){intk,iSum=0;scanf(%d,&k);do{iSum=iSum+k;k++;}while(k=10);printf(sumis%d,iSum);}程序2:#includestdio.hvoidmain(){intk,iSum=0;scanf(%d,&k);while(k=10){iSum=iSum+k;k++;}printf(sumis%d,iSum);}练一练将问题4.2、问题4.3、问题4.5改为用do-while语句实现,并分析程序有什么不同之处?相关知识点1.do-while语句一般形式do{循环体语句;}while(表达式);do-while语句用来实现直到型循环,不管条件是否成立,至少执行循环体一次。2.do-while语句与while语句的不同之处①执行流程不同。do-while语句先执行一次循环体,再判断表达式;而while语句先判断表达式,后执行循环体。②执行循环体的次数可能不同。do-while语句的循环体至少执行一次;而while语句的循环体可能一次也不执行。学一学for循环语句的一般格式for(表达式1;表达式2;表达式3){循环体语句}常见形式:for(初始表达式;循环条件表达式;变量增值表达式){循环体语句;}试一试问题4.8将问题4.1改为用for语句的形式实现。试一试问题4.9某班同学上体育课,从1开始报数,共有38人,老师要求报数时凡是3的倍数的同学往前一步走,试编程将这些同学的序号打印出来。试一试问题4.10相传古代印度国王舍罕要褒奖他的聪明能干的宰相达依尔(国际象棋发明者),问他需要什么,达依尔回答说:“国王只要在国际象棋的棋盘上第一个格子放一粒麦子,第二个格子放上二粒,第三个格子放四粒,以此类推,每一格的麦子数是前一格的两倍,一直放到64格,我就感恩不尽了”。国王答应了,结果全印度的粮食用完还不够。国王很纳闷,怎么也算不清这笔账。现在我们用C语言编程算一下(1 m3小麦大约为1.42×108粒)。流程图试一试问题4.11两个同学之间通信,但是不想让别人知道通信的内容,于是相互约定:将a转化为c,b转化为d……x转化为z,y转化为a,z转化为b。试从键盘上输入多个小写字符(以#做结束符),按上述约定将字符串转换为密文。练一练①在问题4.11中,将else语句去掉,会出现什么结果,并解释。②拓展问题4.11,将约定改为:如果输入大写符,请先转换为小写字符,如果输入小写字符按题中规则转换,其他字符不发生改变,试编程实现。想一想再次拓展问题4.11,除进行转换外,还要统计出输入的字符数。相关知识点1.for语句的一般形式for循环语句的一般格式:for(表达式1;表达式2;表达式3){循环体语句}学一学一个循环的循环体内包含另外一个循环语句,这样的编程方式称之为“循环的嵌套”。循环嵌套时,外层循环执行一次,内层循环从头到尾执行一遍。3种循环(while循环、do-While循环和for循环)不仅可以自身嵌套,而且还可以互相嵌套。试一试问题4.12一个小学生刚开始学习乘法,但总记不住九九乘法表,请帮忙编写一个程序在计算机上打印一份出来(如图4-14所示)。(双重循环实例)试一试问题4.13编写一个具有“加”、“减”、“乘”和“除”四则运算的小计算器,要求能反复多次操作,当输入运算符“#”时退出。(循环与条件嵌套实例)试一试问题4.14鸡兔同笼是我国古代著名趣题之一。大约在1500年前,《孙子算经》中就记载了这个有趣的问题。书中是这样叙述的:“今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?”这四句话的意思是:有若干只鸡兔同在一个笼子里,从上面数,有35个头;从下面数,有94只脚。问笼中各有几只鸡和兔?(穷举法实例)想一想①拓展问题4.14,使用while语句和do-while语句实现,并分别画出流程图,观察各流程图有什么不同。②输出3~100间所有的素数。提示:所谓k是素数,是指k不能被2~(k–1)之间的任何整数整除。所以,只要从2~k–1,逐个相除,如果有一个数能被k整除,则k不是素数;否则,k是素数。③百钱百鸡问题。100元买100只鸡,其中公鸡5元1只,母鸡3元1只,小鸡1元3只,要求每种鸡至少有1只,试编写程序统计并输出所有购买方案。提示:每种鸡的购买数是不确定的,只能从1开始进行判断,所以算法与问题4.14相同。相关知识点①3种循环都可以用来处理同一类问题,一般情况下它们可以互相替代。②3种循环都能用break语句结束循环,用continue语句开始下一次循环。③while和do-while只判断循环条件。循环变量的初始化要放在循环语句之前(如i=0,s=1等),在循环体中还应包含修改循环条件的语句(如i++,j++等)。do-while语句至少执行一次,while语句可能一次也不执行。这两种语句一般情况下用于循环次数不确定的循环中。④for语句本身除了包含循环条件之外,还可以给循环变量赋初值。当然也允许省略其中某些部分。如果省略前后两项成为:for(;循环条件;)的形式时,完全与while(循环条件)的形式等效。for语句多用于循环次数确定的循环。