《循环程序设计》PPT课件.ppt

上传人:tia****nde 文档编号:11507805 上传时间:2020-04-26 格式:PPT 页数:106 大小:2.14MB
返回 下载 相关 举报
《循环程序设计》PPT课件.ppt_第1页
第1页 / 共106页
《循环程序设计》PPT课件.ppt_第2页
第2页 / 共106页
《循环程序设计》PPT课件.ppt_第3页
第3页 / 共106页
点击查看更多>>
资源描述
第5章循环程序设计,2,回顾,关系运算符逻辑运算符掌握if语句的基本使用方法多重if结构就是在主if块的else部分中还包含其他if块嵌套if结构是在主if块中还包含另一个if语句C语言规定,嵌套if结构中每个else部分总是属于前面最近的那个缺少对应的else部分的if语句switch结构也可以用于多分支选择。用于分支条件是整型表达式,而且判断该整型表达式的值是否等于某些值(可以罗列的),然后根据不同的情况,执行不同的操作条件运算符是ifelse语句的另一种表现形式,3,教学目标,理解为什么使用循环结构熟练掌握while循环的使用熟练掌握do-while循环的使用理解while和do-while循环的区别熟练使用for循环理解break和continue语句的用法熟练使用嵌套循环,4,循环的必要性,intresult;result=1*10;printf(110%dn,result);result=2*10;printf(210%dn,result);result=3*10;printf(310%dn,result);result=4*10;printf(410%dn,result);result=5*10;printf(510%dn,result);,1101021020310304104051050,输出结果,重复语句,5,循环的必要性,110=10210=20310=30410=40510=50,0+1,1+1,2+1,上个数字+1,.,重复(上个数字+1)10,6,C语言中的各种循环,while,do-while,for,需要多次重复执行一个或多个任务的问题考虑使用循环来解决,7,while循环,while(表达式)语句;,while循环的一般语法:,计算表达式的值,当值为真(非0)时,执行循环体语句,一旦条件为假,就停止执行循环体。如果条件在开始时就为假,那么不执行循环体语句直接退出循环。,工作原理,8,while循环,规则1:,while(循环条件),循环条件中使用的变量需要经过初始化,9,while循环,规则2:,while(index100).index+;,while循环主体中的语句必须修改循环条件的值,否则会形成死循环,while(1),10,#includeintmain(void)intnum=1,result;while(num=10)result=num*10;printf(%d10%dn,num,result);num+;return0;,while循环示例,11,while循环示例,问题描述:写一个程序,要求它从摄氏温度0度到250度,每隔20度为一项,输出一个摄氏温度与华氏温度的对照表,同时要求对照表中的条目不超过10条。,解题思路:数据结构整型变量c,和实型变量f,及计数器count设计输出结果计算公式f=c*9/5.0+32.0算法编程调试,12,#includeintmain(void)intc=0,count=0;doublef;while(c=250,while循环示例,输出:1:C=0,F=32.002:C=20,F=68.003:C=40,F=104.004:C=60,F=140.005:C=80,F=176.006:C=100,F=212.007:C=120,F=248.008:C=140,F=284.009:C=160,F=320.0010:C=180,F=356.00,13,do-while循环,do语句;while(表达式);,do-while循环的一般语法:,do.scanf(%c,它先执行循环体中的语句,然后再判断条件是否为真,如果为真则继续循环;如果为假,则终止循环。,工作原理,示例,14,问题描述:猜数游戏。要求猜一个介于110之间的数字,根据用户猜测的数与标准值进行对比,并给出提示,以便下次猜测能接近标准值,直到猜中为止。,do-while循环示例,15,do-while循环示例,intnumber=5,guess;/number可用随机数来控制puts(猜一个110之间的数);doprintf(请输入您猜测的数:);scanf(%d,16,嵌套while循环,嵌套while循环的语法,while(i=10).while(i=j).,外循环,内循环,只有在内循环完全结束后,外循环才会进行下一趟。,17,问题描述:用*打印一个直角三角形图案。图案如下所示:*,嵌套while循环示例,解题思路:需要打印多少行?nstars(行数变量)为110行。每行的“*”数量?stars(星数变量)为110个,即nstars个。每行的起始位置算法:,18,嵌套while循环示例,#includevoidmain()intnstars=1,stars;while(nstars=10)stars=1;while(stars=nstars)printf(*);stars+;puts(”);nstars+;,内层循环控制每行打印*号的个数,外层循环控制打印的行数,输出:*,19,嵌套do-while循环,嵌套do-while循环的语法,do.do.while(.);.while(.);,外循环,内循环,只有在内循环完全结束后,外循环才会进行下一趟。,20,输入字符序列,统计输入的字符数,解题思路:设置字符计数器x,类型;字符容器i,类型;是否输入更多字符序列控制器ans(Y/N),类型。每一字符序列结束标志为“n”,即以回车结束。算法:可采取由里向外的设计思路,先解决一行的字符统计,在解决多行的统计。,21,嵌套do-while循环示例,intx;chari,ans;ans=y;dox=0;printf(n请输入字符序列:);fflush(stdin);/清空输入缓冲区,避免缓冲区内残存读取函数无法取走的内容doi=getchar();x+;while(i!=n);printf(n输入的字符数为:%d,-x);printf(n是否需要输入更多序列(Y/N)?);ans=getchar();while(ans=Y|ans=y);,输出:请输入字符序列:GOODMORNING输入的字符数为:11是否需要输入更多序列(Y/N)?N,内存中的变量xians0y,检查条件判断是否按下回车键。如果否,循环继续执行后续语句;如果是,循环回到开始处。,如按下Y/y,则循环从开始处执行,否则循环停止,22,while和do-while比较,while(循环条件)循环体;,do循环体;while(循环条件);,do-while循环是先执行后判断,所以,即使开始条件为假,循环体也至少会被执行一次。,while循环是先判断后执行,所以,如果条件为假,则循环体一次也不会被执行。,比较while和do-while循环的工作原理,23,while和dowhile比较,问题描述:输入一个正整数,然后,反转输出。如输入123,输出321.分析:难点是如何分离出每一位数,并按逆序输出。,24,while和dowhile比较,intvalue,r_digit;value=0;doprintf(n请输入一个数:);scanf(%d,intvalue,r_digit;value=0;while(value=0)printf(n请输入一个数:);scanf(%d,用do-while循环将数字左右反转,用while循环将数字左右反转,25,for(表达式1;表达式2;表达式3)语句;,for循环的一般语法:,for循环,counter=0;inum=1;cnt=100;,counter=10;inum0,counter+;inum=inum+1;cnt-,分号用于分隔for循环的三个表达式,1、计算表达式1的值,通常为循环变量赋初值;2、计算表达式2的值,即判断循环条件是否为真,若值为真则执行循环体一次,否则跳出循环;3、计算表达式3的值,这里通常写更新循环变量的赋值表达式,然后转回第2步重复执行;,工作原理,1,2,3,4,26,for循环示例,问题:编程计算n!,如5!分析:设置变量任意整数number循环变量count(1number)count=count+1因子(借用循环变量的值)累乘积factorial初值?factorial=factorial*count,27,for循环示例,#includevoidmain()intn,i,f=1;puts(n输入任意一正整数:);scanf(%d,循环执行五次,28,打印输出九九乘法表,#includevoidmain()inti,j;for(i=1;i=9;i+)for(j=1;j=9;j+)printf(%d*%d=%dt,i,j,i*j);printf(n);,思考:要想输出下半三角,应如何修改循环?,29,打印输出九九乘法表,#includevoidmain()inti,j;for(i=1;i=9;i+)for(j=1;j=i;j+)printf(%d*%d=%dt,i,j,i*j);printf(n);,思考:要是想输出上半三角,应如何修改循环?,30,逗号运算符,for(i=0,j=max;i=max;i+,j-)printf(n%d+%d=%d,i,j,i+j);,for语句中的三个表达式都可以是逗号表达式逗号表达式就是通过,运算符隔开的多个表达式组成的表达式逗号表达式从左往右计算。逗号运算符在C语言运算符中的优先级最低,31,for循环示例,#includeintmain(void)inti,j,max;puts(请输入一个值);puts(根据这个值可输出以下加法表:);scanf(%d,循环执行max次,初始化语句只执行一次,请输入一个值根据这个值可以输出以下加法表:50+5=51+4=52+3=53+2=54+1=55+0=5,32,for循环的表达式,for循环中有三个表达式for语句中的各个表达式都可以省略分号分隔符不能省略,for(;);,可省略,不能省略,33,省略表达式,intnum=0;for(;num=10;num+)printf(%dn,num*2);,inta=0,n;puts(输入n的值:);scanf(%d,相当于省去了为循环变量赋初值,此时应在for语句之前给循环变量赋初值,34,省略表达式,for(num=1;num+).,不判断循环条件,也就是认为表达式2始终为真,这时应在循环体内设法结束循环,否则将成为死循环,35,省略表达式,for(i=1;i=100;)sum=sum+1;i+;,省去修改循环变量的值,但此时应在循环体内设法结束循环,36,省略三个表达式,for(;)puts(这将一直进行下去);i=getchar();if(i=X|i=x)break;,即不为循环变量赋初值,不设置循环条件(认为表达式2为真值),不修改循环变量的值,无终止地执行循环体。此时应在循环体内设法结束循环,否则会成为死循环,37,break语句,break语句可以改变程序的控制流break语句用于do-while、while、for循环中时,可使程序终止循环而执行循环后面的语句break语句通常在循环中与条件语句一起使用。若条件值为真,将跳出循环,控制流转向循环后面的语句如果已执行break语句,就不会执行循环体中位于break语句后的语句在多层循环中,一个break语句只向外跳一层,38,break语句,跳出for循环for(;)puts(这将一直进行下去);i=getchar();if(i=X|i=x)break;,跳出while循环while(1)if(x=10)break;,跳出do-while循环doif(x=10)break;while(x15);,39,问题描述:统计从键盘输入的若干个字符中有效字符的个数,以换行符作为输入结束。有效字符是指第一个空格符前面的字符,若输入字符中没有空格符,则有效字符为除了换行符之外的所有字符。,#includevoidmain()intcnt=0;charc;puts(请输入一行字符:);doc=getchar();if(c=|c=n)/32,10break;cnt+;while(1=1);printf(n共%d个有效字符。n,cnt);,break语句示例,H,0,_,请输入一行字符:Helloworld,共有5个有效字符,1,循环执行5次,5,40,continue语句,continue语句只能用在循环里continue语句的作用是跳过循环体中剩余的语句而执行下一次循环对于while和do-while循环,continue语句执行之后的动作是条件判断;对于for循环,随后的动作是变量更新,41,continue语句,while()continue;,while()break;,跳出整个循环,继续下一次循环,42,问题描述:求整数1100的累加值,但要求跳过所有个位为3的数。,#includevoidmain()inti,sum=0;for(i=1;i=100;i+)if(i%10=3)continue;sum+=i;printf(sum=%dn,sum);,continue语句示例,null,0,3,1,循环执行到i=3,3,输出:sum=4570,1,循环执行到i=101,101,4570,43,问题描述:用“*”输出一个菱形图案,图案如下:*,嵌套循环示例,打印的行数i,i=14,每行打印的空格数j,j=4-i0,每行打印的*号数k,k=12*i-1,解题思路(注:上半部):,44,嵌套循环示例,#includevoidmain()inti,j,k;for(i=1;i=4;i+)for(j=1;j=4-i;j+)printf();for(k=1;k=2*i-1;k+)printf(*);puts();for(i=1;i=3;i+)for(j=1;j=i;j+)printf();for(k=1;k=7-2*i;k+)printf(*);puts();,输出:*,*,控制打印的行数,控制每行打印的空格数,控制每行打印的*号数,控制打印的行数,控制每行打印的空格数,控制每行打印的*号数,45,问题描述:打印输出100至200之间的全部素数。分析:素数是指只能被1和它本身整除的数。算法比较简单,先将这个数被2除,如果能整除,且该数又不等于2,则该数不是素数。如果该数不能被2整除,再看则是否能被3整除。如果被3整除,并且该数不等于3,则该数不是素数,否则再判断是否被4整除,依此类推,该数只要是能被小于本身的某个数整除时,就不是素数。,嵌套循环示例,#includevoidmain()inti,j,n;n=0;for(i=100;i=200;i+)j=2;while(i%j!=0)j+;if(i=j)printf(%d,i);n+;if(n%8=0)puts();puts();,输出:从100到200之间所有的素数为:101103107109113127131137139149151157163167173179181191193197199,控制每行输出8个素数,如果第一个能被整除的数等于该数本身,则说明该数为素数,从2到i之间寻找第一个能被整除的数,46,嵌套循环示例,#includevoidmain()inti,num;charc;doputs(请输入一个数:);scanf(%d,输出:请输入一个数:58该数是58您是否还要输入其他的数(y/n)?y请输入一个数:64该数是64您是否还要输入其他的数(y/n)?nPressanykeytocontinue,47,循环综合示例1,用50元钱买了3种水果。各种水果加起来一共100个。西瓜5元一个,苹果1元一个,桔子1元3个,设计一程序输出每种水果各买了几个。解题思路:本题有2个约束条件。第1个:3种水果一共100个第2个:3种水果一共花了50元可先按第1个约束条件列出所有可行的情况,然后对每个可能解检查它是否满足第2个约束条件。也可先用第2个约束条件列出所有情况,然后对每个可能解检查它是否满足第1个约束条件。,48,循环综合示例1,#includevoidmain()intmellon,apple,orange;/分别表示西瓜数、苹果数和桔子数for(mellon=1;mellon20;+mellon)/对每种可能的西瓜数for(apple=1;apple100-mellon;+apple)/当西瓜数给定后可能的苹果数orange=100-mellon-apple;/剩下的钱全买了桔子if(orange%3=0,49,循环综合示例1,#includevoidmain()intmellon,apple,orange;/分别表示西瓜数、苹果数和桔子数for(mellon=1;mellon10;+mellon)/对每种可能的西瓜数for(apple=1;apple50-5*mellon;+apple)/当西瓜数给定后可能的苹果数orange=3*(50-5*mellon-apple);/剩下的钱全买了桔子if(mellon+apple+orange=100)/三种水果数之和是否为100printf(mellon:%dt,apple:%dt,orange:%dn,mellon,apple,orange);,50,循环综合示例2,问题:上地理课时,四个学生回答我国四大湖大小时分别说:A:洞庭最大,洪泽最小,鄱阳第三B:洪泽最大,洞庭最小,鄱阳第二,太湖第三C:洪泽最小,洞庭第三D:鄱阳最大,太湖最小,洪泽第二,洞庭第三对于每个湖的大小,每个人仅答对一个,试判断四个湖的大小。,51,循环综合示例2,解题思路如果用a,b,c,d分别表示四个湖的排序。a表示洞庭湖,b表示洪泽湖,c表示鄱阳湖,d表示太湖。可以假设:洞庭最大,洪泽第二,鄱阳第三,太湖第四,然后检查每位同学是否都讲对了一个。如果不是,再尝试下一种情况:洞庭最大,洪泽第二,鄱阳第四,太湖第三,再检查每位同学是否都讲对了一个。尝试所有可能的情况,直到满足每位同学都讲对一个为止。,52,循环综合示例2,解题思路为了尝试所有情况,需要假设洞庭湖可能是最大,也可能是第二、第三或第四。因此,a的值可能从1变到4。同样,b,c,d的值也都可能从1变到4。为此,需要一个控制结构,使a,b,c,d的值能自动从1变到4。这种结构就是循环结构。,53,循环综合示例2,#includevoidmain()inta,b,c,d;for(a=1;a=4;+a)for(b=1;b=4;+b)if(a=b)continue;elsefor(c=1;c=4;+c)if(c=a|c=b)continue;elsed=10-a-b-c;if(a=1)+(b=4)+(c=3)=1,问题:效率差解决方法:一旦找到答案就应该结束,54,循环综合示例2,#includevoidmain()inta,b,c,d,flag=0;/flag为标志,一旦找到,则置为1。for(a=1;a=4;+a)for(b=1;b=4;+b)if(a=b)continue;elsefor(c=1;c=4;+c)if(c=a|c=b)continue;elsed=10-a-b-c;if(a=1)+(b=4)+(c=3)=1,改进一,55,循环综合示例2,改进二,#includevoidmain()inta,b,c,d,flag=0;/flag为标志,一旦找到,则置为1。for(a=1;a=4,56,循环综合示例3,列出ABC三个字母的全排列,每种排列中A、B、C不允许重复出现。#includevoidmain()charc1,c2,c3;for(c1=A;c1=C;+c1)for(c2=A;c2=C;+c2)if(c1=c2)continue;elsefor(c3=A;c3=C;+c3)if(c3=c1|c3=c2)continue;elseprintf(%c%c%cn,c1,c2,c3);,57,循环综合示例4,输入两个正整数m和n,求其最大公约数和最小公倍数。,分析:1.用辗转相除法求最大公约数。m对n求余数为a,若a0,则mn,na,继续求余;否则n为最大公约数。例如,设m=12,n=21.,次数被除数除数余数,1122112,2,21,12,9,3,12,9,3,4,9,3,0,3,注意保留m、n的原始值,以便求最小公倍数,2.循环条件:a!=0,58,循环综合示例4,#includevoidmain()intm,n,m1,n1,a;printf(输入两个正整数:n);scanf(%d%d,/*保存m、n的值*/,/*循环变量赋初值*/,/*辗转相除*/,59,循环综合示例5,编程由计算机想一个110000之间的数请人猜,最多猜10次。如果猜对了,则提示“Right!”,否则提示“Wrong!”,并告诉人所猜的数是大(Toohigh)还是小(Toolow),要求每次运行程序时机器所想的数都不能一样。,60,循环综合示例6,先由计算机“想”一个1到100之间的数请人猜,如果人猜对了,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,且结束游戏,否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,则停止本次猜数,然后继续猜下一个数。每次运行程序可以反复猜多个数,直到操作者想停止时才结束。,61,循环综合示例7,国王的许诺:相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜欢象棋,决定让宰相自己选择何种赏赐。这位聪明的宰相指着88共64格的象棋盘说:陛下,请您赏给我一些麦子吧,就在棋盘的第一个格子中放1粒,第2格中放2粒,第3格放4粒,以后每一格都比前一格增加一倍,依此放完棋盘上的64个格子,我就感恩不尽了。舍罕王让人扛来一袋麦子,他要兑现他的许诺。国王能兑现他的许诺吗?试编程计算舍罕王共要多少麦子赏赐他的宰相,这些麦子合多少立方米?(已知1立方米麦子约1.42e8粒)总粒数为:sum=1+2+22+23+263,62,循环综合示例7,#defineCONST1.42e8#include#includevoidmain()intn;doubleterm,sum=0;/*累加求和变量赋初值*/for(n=1;n=64;n+)term=pow(2,n-1);/*根据累加项的规律计算累加项*/sum=sum+term;/*累加运算*/printf(“sum=%en”,sum);/*打印总麦粒数*/printf(“volum=%en”,sum/CONST);/*折合总麦粒体积数*/,方法一,63,循环综合示例7,#defineCONST1.42e8#includevoidmain()intn;doubleterm=1,sum=1;/*累乘求积累加求和变量赋初值*/for(n=2;n=64;n+)term=term*2;/*根据后项总是前项的2倍计算累加项*/sum=sum+term;/*累加运算*/printf(“sum=%en”,sum);/*打印总麦粒数*/printf(“volum=%en”,sum/CONST);/*折合总麦粒体积数*/,方法二,64,循环综合示例8,马克思手稿中的趣味数学题:有30个人,其中有男人、女人和小孩,在一家饭馆里吃饭共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,问男人、女人和小孩各有几人?解方程组,65,循环综合示例8,#includevoidmain()intx,y,z;puts(MantWomentChildern);for(x=0;x=30;x+)for(y=0;y=30;y+)for(z=0;z=30;z+)if(x+y+z=30,方法一:穷举法,66,循环综合示例8,#includevoidmain()intx,y,z;puts(MantWomentChildern);for(x=0;x=16;x+)for(y=0;y=1.0E-6);printf(e=%lf(n=%d)n,e,n);,69,循环综合示例10,求水仙花数:如果一个三位数的个位数、十位数和百位数的立方和等于该数自身,则称该数为水仙花数。编一程序求出所有的水仙花数。153=13+53+33370=33+73+03371=33+73+13407=43+03+73,70,循环综合示例10,解题思路用穷举法对100999之间的每个数进行验证。验证公式为:hdn=h3+d3+n3关键是如何分解一个3位数的百位、十位和个位?百位=n/100十位=(n/10)%10个位=n%10例:371h=371/100=3d=(371/10)%10=37%10=7n=371%10=1,71,循环综合示例10,#includevoidmain()intn,i,j,k;for(n=100;n=999;n=n+1)i=n/100;/n的百位数j=(n/10)%10;/n的十位数k=n%10;/n的个位数if(n=i*i*i+j*j*j+k*k*k)printf(%d=%d3+%d3+%d3n,n,i,j,k);,72,循环综合示例11,斐波那契数列:一对兔子从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如所有的兔子都不会死,求前24个月中每月的兔子数。F1=1(最初的一对兔子)F2=1(第2个月,最初的一对兔子长成,但尚未生育)F3=2(最初的兔子开始生育)Fn=Fn-1+Fn-2(兔子数量的通项公式,即每月兔子数等于上两个月兔子数之和)从而形成了如下数列:1,1,2,3,5,8,13,21,34,55,,73,循环综合示例11,#includeintmain(void)intf1=1,f2=1;inti;for(i=1;i=12;i+)printf(%dt%dt,f1,f2);f1=f1+f2;/赋值号左边的f1代表第3个数,是第1、2个数之和f2=f1+f2;/赋值号左边的f2代表第4个数,是第2、3个数之和,74,循环综合示例12,谁打烂了玻璃:有四个小孩踢皮球,不小心打烂了玻璃,老师问是谁干的。A说:不是我B说:是CC说:是DD说:他胡说现已知3个小孩说的是真话,一个小孩是假话。根据这些信息,编程找出打烂玻璃的孩子。,75,循环综合示例12,解题思路:如何求解逻辑问题?如何根据案例的问题描述给出对应的数学模型?用什么样的控制结构能够从许多种可能性中找出其中的一种或多种正确的解?,76,循环综合示例12,数学模型:设变量k表示打烂玻璃的孩子,A说:不是我B说:是CC说:是DD说:他胡说现已知3个人说的是真话,一个人是假话。,k!=1k=3k=4k!=4,(k!=1)+(k=3)+(k=4)+(k!=4)=3,77,循环综合示例12,按照这4种状态假定,逐一测试4个人的话有几个为真,如果不满3句为真,就否定这一假定,换下一个状态来试,78,循环综合示例12,#includevoidmain()intk;for(k=1;k=4;k+)if(k!=1)+(k=3)+(k=4)+(k!=4)=3)printf(打烂玻璃者为:%c,64+k);,79,循环综合示例12,考虑更加一般的情况,即本案例出现没有解或有多个解,要为上面的程序增加什么机制,怎么修改程序?如果题目改为有3个小孩说假话,1个小孩说真话,则打烂玻璃的孩子又是谁?,80,循环综合示例13,某地刑侦大队对涉及六个嫌疑人的一桩疑案进行分析:A、B至少有1人作案;A、E、F3人中至少有2人参与作案;A、D不可能是同案犯;B、C或同时作案,或与本案无关;C、D中有且仅有一人作案;如果D没有参与作案,则E也不可能参与作案。试编一程序,将作案人找出来。,81,逻辑与,运算符为elseprintf(A是罪犯);,循环综合示例13,95,循环综合示例14,A、B、C、D、E5人合伙夜间捕鱼,凌晨时都疲惫不堪,各自在湖边的树丛中找地方睡着了。日上三竿,A第一个醒来,他将鱼平分作5份,把多余的一条扔回湖中,拿自己的一份回家去了。B第二个醒来,也将鱼平分为5份,扔掉多余的一条,只拿走自己的一份。接着C、D、E依次醒来,也都按同样的办法分鱼。问五人至少合伙捕到多少条鱼?每个人醒来后看到的鱼数是多少条?解题思路:根据题意,总计将所有的鱼进行了5次平均分配,每次分配时的策略是相同的,即扔掉一条后剩下的鱼正好分为5份,然后拿走自己的一份,余下其他四份。假定鱼的总数为X,则X可以按照题目的要求进行五次分配:X-1后可被5整除,余下的鱼为4(X-1)5。若X满足上述要求,则X就是题目的解。,96,循环综合示例15,对于任意给定的一个正整数n,统计n!末尾中0的个数。小明有5本新书,要借给A、B、C3位小朋友,若每人每次只能借1本,则可以有多少种不同的借法?按照下面格式打印杨辉三角。,97,循环综合示例16,抓交通肇事犯:一辆卡车违反交通规则,撞人后逃跑。现场有3人目击事件,但都没有记住车号,只记下车号的一些特征。甲说:牌照的前2位数字是相同的;乙说:牌照的后2位数字是相同的,但与前两位不同;丙是位数学家,他说:4位的车号刚好是一个整数的平方,请根据以上线索求出车号。,98,循环综合示例17,有限5位数:个位数为6且能被3整除的5位数共有多少个?8除不尽的自然数:一个自然数被8除余1,所得的商被8除也余1,再将第二次的商被8除后余7,最后得到一个商位a。又知这个自然数被17除余4,所得的商被17除余15,最后得到一个商是a的2倍。求这个自然数。一个自然数的七进制表达式是一个3位数,而这个自然数的九进制表示也是一个3位数,且这2个3位数的数码顺序正好相反,求这个3位数。,99,韩信点兵:相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只略一眼队伍的排尾就知道总人数了。输入3个非负整数a,b,c,表示每种队形排尾的人数(a3,b5,c7),输出总人数的最小值。(或报告无解)。已知总人数不小于10,不超过100。样例输入:216样例输出:41样例输入:213样例输出:Noanswer,循环综合示例17,100,问题描述:假设每个班最多有30人,依次输入每个人的成绩,如果输入的不是0100之间的数,或者已经输入了30个数,则结束输入,要求输出最高和最低成绩且计算输出平均成绩。,解题思路变量的选取:任一人的成绩score,类型;最高和最低成绩,max和min;平均成绩ave,总成绩sum;计数器i,班级人数n循环控制:i=0floats,avg,min,max;puts(Enterscoresonebyone:);scanf(%f,方法1,if(s0)ave/=i;printf(Average:%.2fn,ave);,方法2,循环综合示例18,103,如果将题目更改为每班30个人,输入每人的5门功课成绩,求每人5门功课的平均值及每门功课全班的平均值,又该如何求呢?,循环综合示例18,104,总结,循环结构的特点是,在给定条件成立时,重复执行某程序段,直到条件不成立为止while循环用于在给定条件为真的情况下重复执行一组操作,while循环先判断后执行do-while循环先执行后判断,因此循环将至少执行一次在循环中,需要修改循环变量的值以改变循环条件,否则有可能形成死循环循环嵌套必须将内层循环完整的包含在外层循环中,105,总结,for循环与while循环类似,属于先判断后执行for语句中有三个表达式:表达式1通常用来给循环变量赋初值;表达式2通常是循环条件;表达式3用来更新循环变量的值for语句中的各个表达式都可以省略,但要注意分号分隔符不能省略如果省略表达式2和表达式3需要在循环体内设法结束循环,否则会导致死循环,106,总结,break语句用在循环中时,可直接终止循环,将控制转向循环后面的语句continue语句的作用是跳过循环体中剩余的语句而执行下一次循环嵌套循环时,必须将被嵌套的循环语句完整地包含在外层循环的循环体内,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!