循环结构学习.pptx

上传人:莉*** 文档编号:88342797 上传时间:2023-04-25 格式:PPTX 页数:90 大小:519.22KB
返回 下载 相关 举报
循环结构学习.pptx_第1页
第1页 / 共90页
循环结构学习.pptx_第2页
第2页 / 共90页
点击查看更多>>
资源描述

《循环结构学习.pptx》由会员分享,可在线阅读,更多相关《循环结构学习.pptx(90页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、15.1 while语句 1、while 语句 常称为“当型当型”循环语句。循环体循环体循环体循环体非零非零非零非零零零零零表达式表达式表达式表达式第1页/共90页2 2、while 语句的形式:while(while(表达式)表达式)循环体;循环体;特点:先判断表达式,后执行语句。说明:循环体有可能一次也不执行循环体可为任意类型语句下列情况,退出while循环条件表达式不成立(为零)循环体内遇break,return,goto无限循环:while(1)循环体;第2页/共90页3例(ch5_01.c)求1+2+3+4+5+100。#include#includemain()main()inti

2、,sum=0;inti,sum=0;i=1;i=1;while(i=100)while(i=100)sum=sum+i;sum=sum+i;i+;i+;printf(%d,sum);printf(%d,sum);循环初值循环初值循环终值循环终值循环变量增值循环变量增值 循环条件循环条件循环体循环体求求1010!第3页/共90页4例(ch5_02.c)显示110的平方#includemain()inti=1;while(i=10)printf(%d*%d=%dn,i,i,i*i);i+;运行结果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8

3、110*10=100第4页/共90页55.2 do-while语句1、do-while语句 常称为“直到型”循环语句。循环体循环体循环体循环体非零非零非零非零零零零零表达式表达式表达式表达式第5页/共90页62、do-while的形式:do do 循环体;循环体;whilewhile(表达式);表达式);特点:先执行,后判断。说明:至少执行一次循环体dowhile可转化成while结构例(ch5_03.c)用dowhile求1+2+3+4+5+100。#includemain()inti,sum=0;i=1;dosum+=i;i+;while(i=100);printf(%d,sum);第6页

4、/共90页7 1.循环体如果包含一个以上的语句,应该用花括号括起来,以复合语句形式出现。2.循环体中应有使循环趋于结束的语句。例:分析下列三个程序段 注:i=1;i=1;while(i=100)while(i=100)putchar(*);putchar(*);i+;i+;i=1;i=1;putchar(*);putchar(*);i+;i+;i=1;i=1;while(i=100);while(i=100);putchar(*);i+;putchar(*);i+;第7页/共90页8main()inti,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(“%d

5、n”,sum);main()int i,sum=0;i=1i=1;do sum=sum+i;sum=sum+i;i+;i+;while(i=100i=100);printf(“%dn”,sum);第8页/共90页95.3for语句1、C语言中最灵活、最复杂的循环语句;表达式表达式表达式表达式1 1表达式表达式表达式表达式2 2循环体语句循环体语句循环体语句循环体语句表达式表达式表达式表达式3 34 可以用于循环次数确定的情况;可以用于循环次数确定的情况;44 可以用于循环次数不确定的情况;可以用于循环次数不确定的情况;44 可实现可实现whilewhile和和do-whiledo-while语

6、句的语句的所有功能。所有功能。非零非零非零非零零零零零第9页/共90页102、for的形式:for(for(表达式表达式1 1;表达式;表达式2 2;表达式;表达式3 3)循环体循环体 说明:for语句中expr1,expr2,expr3 类型任意,都可省略,但分号;不可省无限循环:for(;)for语句可以转换成while结构 循环变量赋初值循环终止条件循环变量控制第10页/共90页11 sum=0;for(i=1;i=100;i+)sum=sum+i;它相当于以下语句:i=1;while(i=100)sum=sum+i;i+;表达式1;while(表达式2)语句;表达式3;第11页/共90

7、页12 3、for语句中表达式的省略(1)for语句一般形式中的“表达式1”可以省略;如:sum=0;i=1;for(;i100)break;if(i100)break;第12页/共90页13(3)表达式3也可以省略,但此时保证循环能正常结束。如:for(sum=0,i=1;i=100;)sum=sum+i;i+;(4)可以省略表达式1和表达式3,只有表达式2。如:i=1;sum=0;i=1;sum=0;for(;i=100;)while(i100)break;sum=sum+i;i+;第14页/共90页15(6)循环体为空语句 对for语句,循环体为空语句的一般形式为:for(表达式1;表达

8、式2;表达式3);如:for(sum=0,i=1;i=100;sum+=i,i+);又如:要在显示器上复制输入的字符,输入的字符为.时,结束循环。while(putchar(getchar()!=.);输入abcdefg.输出abcdefg.第15页/共90页16例:例:#include#includemain()main()inti;inti;for(i=0;i10;i+)for(i=0;i10;i+)putchar(a+i);putchar(a+i);运行结果:abcdefghij例:例:例:例:#include#includemain()main()inti=0;inti=0;for(;

9、i10;)for(;i10;)putchar(a+(i+);putchar(a+(i+);例:例:#include#includemain()main()inti=0;inti=0;for(;i10;putchar(a+i),i+)for(;i10;putchar(a+i),i+);例:例:#include#includemain()main()inti=0;inti=0;for(;i10;i+)for(;i10;i+)putchar(a+i);putchar(a+i);第16页/共90页17main()main()inti,j,k;inti,j,k;for(i=1,j=100;i=j;i+,

10、j-)for(i=1,j=100;i=j;i+,j-)k=i+j;k=i+j;printf(%d+%d=%dn,i,j,k);printf(%d+%d=%dn,i,j,k);#include#includemain()main()charc;charc;for(;(c=getchar()!=n;)for(;(c=getchar()!=n;)printf(%c,c);printf(%c,c);#include#includemain()main()inti,c;inti,c;for(i=0;(c=getchar()!=n;i+=3)for(i=0;(c=getchar()!=n;i+=3)pri

11、ntf(%c,i+c);printf(%c,i+c);第17页/共90页18循环终止条件的种类:循环终止条件的种类:1.1.关系表达式关系表达式:如前几例2.2.逻辑表达式逻辑表达式:for(;ab&xy;)3.3.字符表达式字符表达式:for(;(c=getchar()!=n(c=getchar()!=n;)printf(“%c”,c);第18页/共90页19例 输入30个09的字符数字,计算数字串中有多少个奇数,偶数和零.思路:1.输入30个字符数字char num,而不是整数2.30个字符的输入和30个数字的输入的区别 字符可以连续输入30个 009764146589.数字输入必须是用空

12、格,Tab键或回车隔开 0 0 9 7 6 4 1 4 6 5 8 9 3.将字符变成数字后判断奇偶 i=num-0;字符数字的ASCII码:48 49 50 51 52 53 54 55 56 57第19页/共90页20步骤:1.计数变量n1,n2,n3初始值设为零;2.输入1个字符num;3.循环变量初值为1;4.若i=30,重复字符变成数字,num=num-0判断num是否为0判断num2的值循环变量i+再输入1个字符num5.输出n1,n2,n3的值。输入输入numn1=0,n2=0,n3=0i=1i=30num=num-0num%2n1+n2+n3+输出输出n1,n2,n3的值的值n

13、um=0YNi+输入输入numYN第20页/共90页21259718528637908300264710031993thereare9evens,5zeros,16odds.main()inti,n1=0,n2=0,n3=0;charnum;scanf(“%c”,&num);for(i=1;i=30;i+)num=num-0;if(num=0)n1+;if(num%2)n2+;elsen3+;scanf(“%c”,&num);printf(Thereare%2devens,%2dodds,%2dzeros”,n1,n2,n3,);第21页/共90页22解题思路1.每当我们读入一张选票,只有6种

14、情况,将它们加到相应的人选上。2.-1结束循环3.case语句作为开关。例 统计选票。现有选票如下3,1,2,1,1,3,3,2,1,2,3,3,2,1,1,3,2,0,1,4,-1.-1是结束标志。设1选李,2选张,3选王,0和4为废票,谁会当选?第22页/共90页23main()intvote,l_vote,z_vote,w_vote,invalidvote;l_vote=0;z_vote=0;w_vote=0;invalidvote=0;scanf(“%d”,&vote);while(vote!=-1)switch(vote)case1:l_vote+;break;case2:z_vot

15、e+;break;case3:w_vote+;break;case0:case4:invalidvote+;break;scanf(“%d”,&vote);printf(Li%2d,zhang%d2d,wang%2d,invalid%2d”,l_vote,z_vote,w_vote,invalidvote);第23页/共90页24例 输入一个整数,计算它的位数.并反向输出.分析:设一个数13579,一位一位地切下末位循环结束条件:num=0;同时计数 count=count+1;13513513571357135791357977bitbitbitbit9955bitbit1313bitbit

16、11bitbitbit=num%10 num=num/1013571357 9 91351357 713135 5count=0;输入输入numnum!=0输出输出num%10count+num=num/10输出输出count331133第24页/共90页25main()main()longintnum;longintnum;intcount=0;intcount=0;printf(“Pleaseenteraninteger:n”);printf(“Pleaseenteraninteger:n”);scanf(“%ld”,&num);scanf(“%ld”,&num);dodoprintf(“

17、%d”,num%10);printf(“%d”,num%10);num=num/10;num=num/10;count+;count+;while(num!=0);while(num!=0);printf(“%ddigits.”,count);printf(“%ddigits.”,count);Pleaseenteraninteger:Pleaseenteraninteger:38293829 92834digits.92834digits.第25页/共90页265.4goto语句1、无条件转移语句;形式:goto 标号;2、有标号的语句称为标号语句;形式:标号:语句;3、goto语句在使用时

18、只能转移到goto所在的函数内的标号处,不能转移到该函数外;4、可以从多重循环的内层转移到最外层,而break只能跳出一层循环。满足标识符的规定满足标识符的规定第26页/共90页27 main()int i=1,sum=0;loop:if(i101)sum=sum+i;i+;goto loop;printf(“SUM=%fn”,sum);loop:sum=sum+i;i+;if(i101)gotoloop;第27页/共90页285.5break语句和continue语句break语句一般形式:break;break;功能:跳出所在的多分支switch语句跳出所在的while、do-while、

19、for循环语句(提前结束循环)。continue语句一般形式:continue;continue;功能:提前结束本次循环体的执行,接着进行下一次循环条件的判别。第28页/共90页29break语句main()int i;for(i=1;i=5;i+)printf(n%5d,i);printf(%5d,i);main()int i;for(i=1;i=5;i+)printf(n%5d,i);if(i=3)break;if(i=3)break;printf(n%d,i);111122223333444455551111222233当当i=3i=3时时,结束循环结束循环第29页/共90页30cont

20、inue语句main()int i;for(i=1;i=5;i+)printf(n%5d,i);printf(%5d,i);main()int i;for(i=1;i=5;i+)printf(n%5d,i);if(i=3)if(i=3)continue;continue;printf(n%d,i);11112222333344445555 111122223344445555当当i=3i=3时时,结束本次结束本次循环体循环体的执行的执行第30页/共90页31break与continue的区别for(e1;e2;e3)if(e)break;if(e)break;for(e1;e2;e3)if(e

21、)continue;if(e)continue;计算计算e1e1e2e2语句语句非00e e非0语句语句计算计算e3e30breakbreak语句语句语句语句0计算计算e1e1e2e2语句语句非00e e非0语句语句计算计算e3e3continuecontinue语句语句循循环环体体第31页/共90页32例(ch5_05.c)输出110中不是3的倍数的数。main()int n;for(n=1;n=10;n+)if(n%3=0)breakbreak;printf(“%d,”,n);输出:1,2,continue;输出:1,2,4,5,7,8,10,第32页/共90页33main()main()

22、inti,num=0,a;inti,num=0,a;floatsum=0;floatsum=0;for(i=1;i=10;i+)for(i=1;i=10;i+)scanf(%d,&a);scanf(%d,&a);if(a=0)if(a=0)continue;continue;num+;num+;sum+=a;sum+=a;printf(“num=%dprintf(“num=%d,aver=%6.2fn,num,sum/num);aver=%6.2fn,num,sum/num);例求输入的十个整数中正数个数及其平均值。(ch5_06.cch5_06.c)num=0,sum=0num=0,sum=

23、0输入整数输入整数a ai=10i=10a=0a=0Y YN Nnum+num+sum+=asum+=ai+i+i=1i=1第33页/共90页345.6 循环的嵌套三种循环可互相嵌套,层数不限外层循环可包含两个以上内循环嵌套循环的执行流程嵌套循环的跳转禁止:禁止:从外层跳入内层跳入同层的另一循环(1)while()while().(2)dodowhile();.while();(3)while()dowhile();.(4)for(;)dowhile();while().内内循循环环外循环外循环内内循循环环第34页/共90页35()当当外外层层循循环环结结构构每每执执行行一一次次循循环环时时,

24、内内层层循循环环结结构构在在一一般般情情况况下下要要从循环的开始到循环的正常结束从头到尾执行一遍从循环的开始到循环的正常结束从头到尾执行一遍。例例11()在在内内层层循循环环结结构构中中使使用用breakbreak语语句句可可以以提提前前结结束束本本次次内内层层循循环环结结构构的执行,而不影响外层循环结构的继续执行的执行,而不影响外层循环结构的继续执行。例例22()如如果果程程序序因因某某种种原原因因需需要要从从内内层层循循环环体体跳跳出出整整个个循循环环结结构构,此此时时才才可考虑使用可考虑使用 gotogoto语句。语句。例例33()()对于并列的循环结构,控制循环执行的变量名字可以相同。

25、对于并列的循环结构,控制循环执行的变量名字可以相同。在嵌套在嵌套循环结构中,循环结构中,内、外层控制循环执行的变量名字不能相同。内、外层控制循环执行的变量名字不能相同。例例4 4 对于嵌套循环结构的几点说明:对于嵌套循环结构的几点说明:第35页/共90页36例例1:main()inti,j;for(i=0;i3;i+)for(j=1;j=4;j+)printf(%d,j);printf(n);运行后,运行后,输出:输出:123412341234例例2:main()inti,j;for(i=0;i3;i+)for(j=1;j=4;j+)printf(%d,j);if(!(j%3)break;pr

26、intf(n);运行后,运行后,输出:输出:123123123第36页/共90页37例例4:main()inti,j;for(i=0;i3;i+)printf(%d,i);printf(n);for(i=1;i=4;i+)printf(%d,i);运行后,运行后,输出:输出:例例3:main()inti,j;for(i=0;i3;i+)for(j=1;j=4;j+)printf(%d,j);if(!(j%3)gotol;printf(n);l:;运行后,运行后,输出:输出:1230121234第37页/共90页38分析分析:求累加和ss=0for(k=1;k=n;k+)求t tk k s=s+

27、tk求累乘积t tk k=k!=k!t tk k=1=1for(i=1;i=k;i+)for(i=1;i=k;i+)t tk k=t=tk k*i*imain()int i,k;long s,t;printf(nInput n:);scanf(%d,&n);s=0;for(k=1;k=n;k+)for(k=1;k=n;k+)t=1;t=1;for(i=1;i=k;i+)for(i=1;i=k;i+)t=t*i;t=t*i;s=s+t;s=s+t;printf(ns=%ld,s);Inputn:5Inputn:5 s=153s=153例(ch5_07.c)求1!+2!+n!内外层循环控制变量内外

28、层循环控制变量不要同名。不要同名。第38页/共90页39main()int i,k;long s,t;printf(nInput n:);scanf(%d,&n);s=0;for(for(k=1;k=n;k+k=1;k=n;k+)t=1;t=1;for(for(i=1;i=k;i+i=1;i=k;i+)t=t*i;t=t*i;s=s+t;s=s+t;printf(ns=%ld,s);n=3s k k3 外循 t i ik 内循 Inputn:Inputn:3 3 s=9s=9 1 12 20 01 1 2 21 12 21 11 11 11 1 1 12 21 12 2 2 23 30 03

29、3 3 31 13 31 11 11 11 1 1 12 21 12 2 2 23 31 13 3 6 64 40 09 9 4 40 0 0 0 1 11 11 11 11 11 11 1第39页/共90页401 12 23 34 45 56 67 78 89 91 12 24 43 36 69 99 918182727363645455454636372728181.例(ch5_08.c)循环嵌套,输出九九表。ij第40页/共90页41*1 14 43 32 2for(i=1;i=5;i+)for(j=1;j=5;j+)printf();printf(n“);*for(i=1;i=5;i+

30、)for(j=1;j=i;j+)printf();printf(n“);*for(i=1;i=5;i+)for(j=1;j=5-i+1;j+)printf();printf(n“);*for(i=1;i=5;i+)for(j=1;ji;j+)printf();for(j=1;j=5-i+1;j+)printf();printf(n“);*for(i=1;i=5;i+)for(j=1;j5-i+1;j+)printf();for(j=1;j=i;j+)printf();printf(n);*第41页/共90页42i=9i=9输出输出i*ji*j假假(0)(0)真真(非非0)0)i=1i=1j+j

31、+j=1j=1j=ij=i真真(非非0)0)假假(0)(0)i+i+外循环外循环内循环内循环第42页/共90页43#include#includemain()main()inti,j;inti,j;for(i=1;i=9;i+)for(i=1;i=9;i+)printf(%4d,i);printf(%4d,i);printf(n-n);printf(n-n);for(i=1;i=9;i+)for(i=1;i=9;i+)for(j=1;j=i;j+)for(j=1;j=i;j+)printf(%4d,i*j);printf(%4d,i*j);printf(n);printf(n);第43页/共9

32、0页44 分析分析:uu 行的控制行的控制 i i:1 19 9uu*的个数的个数j j与当前行的关系与当前行的关系:j=2*i-1j=2*i-1uu*前面的空格前面的空格k k与行的关系与行的关系:开始时开始时,第一行有第一行有8 8个空格个空格每多一行每多一行,少一个空格少一个空格k=9-ik=9-iwhile(i=9)while(i=9)for(k=1;k=9-i;k+)for(k=1;k=9-i;k+)输出空格输出空格;for(j=1;j=2*i-1;j+)for(j=1;j=2*i-1;j+)输出输出*;*第44页/共90页45main()inti,j,k;i=1;while(i=9

33、)for(k=1;k=9-i;k+)printf(“”);for(j=1;j=2*i-1;j+)printf(“*”);printf(“n”);i+;i=1i=9k=1k=9-i输出空格输出空格k=k+1j=1j=2*i-1输出输出*j=j+1换行换行,i=i+1第45页/共90页46例(ch5_04.c)求fibonacci数列0,1,1,2,3,5,8,的前20项。fibonacci数列满足下面递归关系:F1=1(n=1)F2=1(n=2)Fn=Fn-1+Fn-2(n3)a=1,b=1fori=1to10输出输出a,ba=a+bb=b+a分析:1123581311235813 a+ba+b

34、a ab+ab+ab b a+ba+baab+ab+abb 第46页/共90页47main()inti,a,b,k=0;a=b=1;for(i=1;i=10;i+)printf(%10d%10d,a,b);a=a+b;b=a+b;k+=2;if(k%4=0)printf(n);1123581321345589144233377610987第47页/共90页48 1 i控制行:i 19 空格数:9-i 12 21 j控制列:第i行 左边:1i 123 321 右边:i-11 .12345678123456789 98765432187654321例编程输出下面的数字金字塔(1到9)。第48页/共

35、90页49 (ch5_09.c)main()int i,j,k,m;for(i=1;i=9;i+)for(i=1;i=9;i+)for(j=1;j=9-i;j+)/*输出9-i个空格*/putchar();for(j=1;j0;j-)/*输出i-1到1*/printf(“%d”,j);printf(“n”);第49页/共90页505.7 循环程序设计的问题写循环,先要发现循环。注意计算中的重复性动作,引进循环可能统一描述和处理。重复动作的常见例子:?累积一批可按规律算出的数据(如累加等);?反复从一个结果算出下一结果(递推等,见教材P71例5.9);?对一批数据做同样的加工处理;等。第50页/

36、共90页51写循环结构时要考虑和解决的问题:I.循环涉及哪些变量,引进什么临时性变量?II.这些变量在循环正式开始前应给什么初值?循环如何开始?III.每次循环中变量的值应如何改变?IV.什么情况下继续循环(什么情况下终止)?V.循环终止后如何得到所需结果?第51页/共90页52循环中的几种变量循环中常出现几类变量,了解这些有助于思考和分析。这也是写循环程序的经验总结。1)循环控制变量(循环变量):循环前设初值,循环递增/递减,达到/超过界限时循环结束。控制循环的进行/结束。for中常有这类变量。for(n=0;n 10;n+).for(n=2;n 52;n+=4).第52页/共90页532)

37、累积变量:循环中常用+=或*=等更新。初值常用运算的单位元(加用0;乘用1为初值)。循环结束时变量终值被作为循环计算结果。3)递推变量:前两类变量的推广形式。复杂循环常用几个协同的变量,每次由一个/几个变量推出一个新值,其余依次更新。对变量x1、x2、x3,循环体可能有序列:x1=x0.;x2=x1.;x3=.x1.x2.;第53页/共90页54本章重点三种循环语句whilewhile,do-while和forfor建立循环通常有以下情况:1.给定次数,for比较适用 for(i=1;i100;i+)2.给定条件,while比较适用 while(x+y)a&c A&cZ)第54页/共90页55

38、本章作业1.求2324210之和。2.输入两个正整数a和b,其中ab,输出a和b组成的闭区间中的所有偶数。3.从1开始做自然数的累加,当其累加和超过1000时,共计累加了多少数?当时的累加和是多少?(break 语句)。4.请编写程序,其功能是:求出1到1000之内能被7或11整除、但不能同时被7和11整除的所有整数并将它们输出。第55页/共90页565.编写程序,其功能是:求出能整除x且不是偶数的各整数(x由键盘输入),并将它们输出。例如,若x 中的值为:30,则有4个数符合要求,它们是1,3,5,15。6.有一个数,用3除余2,用5除余3,用7除2,请找出满足条件的最小数。7.编程打印出如

39、下矩阵:(51510)525125062503125.0009765625提示提示第56页/共90页57.main()int k,i,s=0,t=4;for(k=3;k=10;k+)t=t*2;s+=t;printf(s=%dn,s);#include#includemath.hmath.hmain()main()intk,i,s=0,t=4;intk,i,s=0,t=4;for(k=3;k=10;k+)for(k=3;kb)t=a;a=b;b=t;for(x=a;x1000)break;printf(s=%d,n=%d,s,n);方法一方法一方法一方法一方法二方法二方法二方法二main()i

40、nta,n,s;s=0,n=0;for(a=1;s=1000;a+)n+;s+=a;printf(s=%d,n=%d,s,n);第59页/共90页605.main()int i,n=0;float score30,aver=0.0;for(i=0;i100|scorei0)printf(Error!);goto aa;aver+=scorei;aver=aver/30;for(i=0;iaver)n+;printf(aver=%f,n=%dn,aver,n);求全班求全班3030名同学的某门功课在平均成绩以上的人名同学的某门功课在平均成绩以上的人数。数。第60页/共90页617.main()i

41、nt i;long n=1;for(i=1;i=1.0e-6)pi=pi+t;n=n+2;s=-s;t=s/n;pi=pi*4;printf(“pi=%10.6fn”,pi);第62页/共90页63方法一:数列是正、负相间的,在这里可用一方法一:数列是正、负相间的,在这里可用一个个“开关开关”变量变量t来解决符号的问题。来解决符号的问题。main()floats=0;intt=1,i;for(i=1;i101;i+)s+=1.*t/i;t=-t;printf(s=%fn,s);在处理循环时应注意在处理循环时应注意初、终值初、终值的设定!的设定!例求s=1-1/2+1/3-1/4+1/99-1/

42、100。第63页/共90页64方方法法二二:分分别别求求出出正正项项和和s1(奇奇数数倒倒数数)与与负负项项和和s2(偶数倒数偶数倒数),则,则s=s1-s2main()floats,s1=0,s2=0;inti;for(i=1;i101;i+=2)s1+=1.0/i;s2+=1.0/(i+1);s=s1-s2;printf(s=%fn,s);第64页/共90页65例梯形法求数值积分。0 0y yx xa a a+ha+ha+iha+iha+(i+1)ha+(i+1)hb bf(x)f f(x x)=4-x x2dxdxba第65页/共90页66main()float a,b,h,n1,n2,

43、s=0;int i;printf(“请输入积分限a和b:”);scanf(“%f%f”,&a,&b);h=(b-a)/1000;for(i=0;i1000;i+)n1=4-(a+i*h)*(a+i*h);n2=4-(a+(i+1)*h)*(a+(i+1)*h);s+=(n1+n2)*h/2;printf(“s=%10.2fn”,s);第66页/共90页第67页/共90页第68页/共90页第69页/共90页70例例枚举问题枚举问题或称为或称为穷举法穷举法。一般用于不。一般用于不定方程求非负整数解的问题。它将方程中定方程求非负整数解的问题。它将方程中未知数可以取的到的非负整数逐个进行验未知数可以取

44、的到的非负整数逐个进行验证找出所有满足方程的解。证找出所有满足方程的解。例如:例如:一元人民币兑换成一元人民币兑换成1分、分、2分、分、5分共有分共有多少种方法?多少种方法?若若5分、分、2分、分、1分的个数分别为分的个数分别为x个、个、y个、个、z个,则个,则x的取值为的取值为020,y的取值为的取值为050,z的取值为的取值为0100。于是有不定方程:于是有不定方程:5x+2y+z=100。第70页/共90页71main()int i,j,k,m=0;for(i=0;i21;i+)for(j=0;j51;j+)for(k=0;k101;k+)if(5*i+2*j+k=100)m+=1;pr

45、intf(m=%dn,m);运行结果:m=54130考虑程序的优化问题?考虑程序的优化问题?第71页/共90页72上面程序的循环次数超过上面程序的循环次数超过10万次,且大量的循环万次,且大量的循环都不满足方程。可对程序进行优化,由于随着都不满足方程。可对程序进行优化,由于随着5分个数分个数的增加,的增加,2分个数就会减少,因此循环变量分个数就会减少,因此循环变量j可控制在可控制在(100-5i)/2以内以内,这样使得这样使得5i+2j=100。若不足。若不足100则则补充补充1分,分,将问题转换成为求循环次数的问题了将问题转换成为求循环次数的问题了。main()inti,j,m=0;for(

46、i=0;i21;i+)for(j=0;jE,W-A.非字母字符忽略。思路:1.建 立 循 环,循 环 结 束 以 输 入 回 车 符 为 准 while(c=getchar()!=n)2.判断输入是否是字符,否则忽略 if(c=a&c=A&cZ&cz)c=c-26AZ.a.z.第73页/共90页74#include“stdio.h”#include“stdio.h”main()main()charc;charc;while(c=getchar()!=n)while(c=getchar()!=n)if(c=a&c=A&c=a&c=A&cZ&cz)c=c-26;if(cZ&cz)c=c-26;pr

47、intf(“%c”,c);printf(“%c”,c);abdEgWefhIkA第74页/共90页75例 输入若干数字,-1为输入结束标志,计算它们的平均数。main()floatvalue,total,average;intcounter;total=0;counter=0;average=0;scanf(“%d”,&value);while(value!=-1)total=total+value;counter+;scanf(“%f”,&value);if(counter=0)printf(“Nodataentered.n”);elseaverage=total/counter;print

48、f(Theaverageof%dvaluesis%f”,counter,average)23.9 85.68 227E02 0.00863 7593.44 71 14.7E-05 66 -1The average of 9 values is 2568.336412第75页/共90页76*本例还是要考虑每行的空格数、和星本例还是要考虑每行的空格数、和星号数问题,但要关注号数问题,但要关注空格数与星号数空格数与星号数在增在增加到一定的时候又要减少的规律。加到一定的时候又要减少的规律。例用循环语句显示下面的图案。第76页/共90页77#includemain()inti,j,k;for(i=-2;

49、i=2;i+)for(j=1;j=18+fabs(i);j+)printf();for(k=1;k=5-2*fabs(i);k+)printf(*);printf(n);注意初、终值注意初、终值从从-2到到2的目的目的。的。fabs(i)变化规律是:变化规律是:2,1,0,1,2。每行的空格数是:每行的空格数是:20,19,18,19,20。每行的星号数是:每行的星号数是:1,2,3,2,1。for(i=0;i4;i+)for(j=0;j20-i;j+)printf(“”);/*空格递减空格递减*/for(k=0;k2*i+1;k+)printf(“*”);/*星号递增星号递增*/第77页/共

50、90页78例 汽车里程表上的读数是95859,7小时之后里程表的读数是一个对称数(最大是5位数),问汽车的速度(是一个整数)。解题思路:检查所有的在95859到99999之间的对称数,如果它与95859的差能被7整除,则商是速度。/*第一种算法*/第78页/共90页79main()longi,a,b,c,e,d;flaotf,g;i=95859;while(i=99999)a=i/10000;b=(i-a*10000)/1000;c=(i-a*10000-b*1000)/100;d=(i-a*10000-b*1000-c*100)/10;e=i-a*10000-b*1000-c*100-d*1

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > PPT文档

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁